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) )
	}
}

実行して、都道府県ごとの人口、収入、失業率、できちゃった婚率、自殺率、大学卒業率のデータを入力すると、こんな感じになります。
線が繋がっているところが、相関があると考えられるデータ。

あと、AICについては、wikipediaを参考

http://en.wikipedia.org/wiki/Akaike_information_criterion:AIC