付録(プログラミング補足)

3 年生 数理実習 A(統計手法)
補足資料
TA 村井義孝
ここでは,資料 14 ページ問 6 の進め方について補足する.
準備(実行済みのものは飛ばしてよい)
・データの読み込み.例えば,データのファイル名が sample.txt であれば,R のメニュー
から「ファイル」→「ディレクトリの変更...」として, データファイルのあるディレクト
リに移動し, その後
------------> X <- read.table("sample.txt")
------------を実行.
・パッケージの読み込み.以下を実行.
------------> library(ggm)
------------・関数の生成.資料 7 ページ問 2 の「偏相関行列を計算する関数 I」(またはⅡ)と 12 ペ
ージ問 5 の「グラフの辺のうち, 偏相関の絶対値が最小となる辺を求める」を実行.
・変数等の定義.資料 11 ページ「関数 fitConGraph の使い方, AIC の計算法」の第 3 行
から第 7 行(以下)を実行.
------------> n <- nrow(X); p <- ncol(X)
> R <- cor(X)
> amat <- matrix(1,p,p)-diag(p)
> dimnames(amat) <- dimnames(R)
-------------
ここから,資料 12 ページ「共分散選択アルゴリズム」の実行手順.
1. M に R を代入.以下を実行する.
------------> M <- R
------------2. 偏相関行列 P の計算.以下を実行する.
------------> P <- cor2par(M)
------------1
3. 偏相関の絶対値が最小となる(i,j)を計算するため,
------------> select.ij(P,amat)
------------を実行する.出力された枝をグラフから除く.例えば、実行結果が「[1] 4 1」であれば、
------------> amat[1,4] <- amat[4,1] <- 0
------------を実行すればよい.
4. 相関行列 M と AIC の計算.以下を実行する.
------------> f <- fitConGraph(amat,R,n)
> M <- f$Shat
> aic <- f$dev - 2*f$df
------------5.
------------> aic
------------を実行して計算された AIC を出力する.AIC が以前より減少したら 2.へ戻る(最初の反復で
は 0 より小さくなっていれば 2.へ戻る).増大していたら、最後に除去した枝を復元して
からグラフを出力.例えば最後に除去した枝が 4,1 であれば,
------------> amat[1,4] <- amat[4,1] <- 1
> drawGraph(amat,adjust=FALSE)
------------を実行する.
以上を1つのプログラムにまとめて記述する場合のヒント:
・反復には while 文を利用するのが簡単.
・後で辺が除去された順番を確認するためにも,3.における select.ij の実行結果を配列
に記憶するのがよい. 単純な方法として,反復回数を表す変数 k を導入し,
------------> ij[(2*k-1):(2*k)] <- select.ij(P,amat)
------------とすると,select.ij の実行結果が ij[2*k-1],ij[2*k]に記憶される.
・AIC も同様に配列に記憶するのがよい.
2