AICを求める
演習でR言語を使ったときに書いたスクリプト。
AIC最小となるモデルを求めてグラフを描きます。
実行にはggmというライブラリが必要です。
covariance <- function(R){ #options(digits = 3) M <- cor(R) #元の相関行列 P <- cor2par(M) #元の偏相関行列 n <- nrow(P);p <- ncol(P) #列(row)および行(colum) G <- matrix(1,p,p) - diag(p) #全て繋ったグラフ dimnames(G) <- dimnames(M) #AICを最小化する repeat{ aicn <- (-1) preaic <- 0 preG <- G x <- list(0,0) while(preaic > aicn){ x <- selectTriMin(P) G[x1,x2] <- 0 G[x2,x1] <- 0 fn <- fitConGraph(G,M,p) #Gに対応するMとAICを求める。 aicn <- fn$dev - 2*fn$df M <- fn$Shat P <- cor2par(M) browser() preaic <- aicn preG <- G drawGraph(preG,adjust=FALSE) } } #偏相関行列(三角行列)の絶対値が最小となる(i,j)を選択する selectTriMin <- function(G){ k = 0;l = 0 min <- G[1,2] p <- ncol(G) for(i in 1:(p-1)){ for(j in i:p){ if(abs(G[i,j]) < min){ min <- abs(G[i,j]) ;k <- i;l <- j } } } return( list(k,l) ) } }
実行して、都道府県ごとの人口、収入、失業率、できちゃった婚率、自殺率、大学卒業率のデータを入力すると、こんな感じになります。
線が繋がっているところが、相関があると考えられるデータ。
http://en.wikipedia.org/wiki/Akaike_information_criterion:AIC