多重共線性のチェック(トレランスと VIF) Last modified: Nov 18, 2004
目的
重回帰分析における多重共線性のチェックを行う
独立変数のみのデータ行列を引数として与えると,各変数のトレランスと VIF を返す
使用法
tolerance(x)
引数
x 説明変数だけのデータ行列(行がケース,列が変数。従属変数は加えてはいけない)
ソース
インストールは,以下の 1 行をコピーし,R コンソールにペーストする
source("http://aoki2.si.gunma-u.ac.jp/R/src/tolerance.R", encoding="euc-jp")
# 重回帰分析の回帰診断の一つとして,トレランスを計算する
tolerance <- function(x) # 説明変数だけのデータ行列
{
if (is.null(colnames(x))) { # 名前が付いていないときには仮の名前を付ける
colnames(x) <- paste("Var", 1:ncol(x), sep="")
}
x <- subset(x, complete.cases(x)) # 欠損値を持つケースを除く
VIF <- diag(solve(cor(x))) # 分散拡大要因(相関係数行列の逆行列の対角成分)
tolerance <- 1/VIF # トレランス(VIF の逆数)
result <- data.frame(tolerance, VIF) # 結果をデータフレームにする
return(result)
}
使用例
x <- matrix(c( # 5ケース,3変数のデータ行列例(ファイルから読んでも良い)
1, 2, 4,
3, 2, 5,
4, 3, 7,
2, 1, 3,
5, 4, 7
), byrow=TRUE, ncol=3)
tolerance(x)
出力結果例
> x # 独立変数のみのデータ
[,1] [,2] [,3]
[1,] 1 2 4
[2,] 3 2 5
[3,] 4 3 7
[4,] 2 1 3
[5,] 5 4 7
> tolerance(x)
tolerance VIF
Var1 0.2181818 4.583333
Var2 0.1318681 7.583333
Var3 0.0937500 10.666667
> library(DAAG) # DAAG ライブラリを使う
Loading required package: leaps
Loading required package: oz
> y <- rnorm(5) # DAAG ライブラリの vif は,lm の結果を引数とするので
> result <- lm(y ~ x) # この例では従属変数は何でもいいので y は正規乱数とした
> vif(result, digits=8)
x1 x2 x3
4.583333 7.583333 10.666667
解説ページ
直前のページへ戻る
E-mail to Shigenobu AOKI