多重共線性のチェック(トレランスと 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.21818  4.5833
Var2   0.13187  7.5833
Var3   0.09375 10.6670

> library(DAAG)  # DAAG ライブラリを使う
Loading required package: leaps 
Loading required package: oz 
> y <- rnorm(5)  # DAAG ライブラリの vif は,lm の結果を引数とするので
> result <- lm(y ~ x)  # この例では従属変数は何でもいいので y は正規乱数とした
> result  # 結果を保存しておく

Call:
lm(formula = y ~ x)

Coefficients:
(Intercept)           x1           x2           x3  
    -1.1617       1.5511      -1.2398      -0.1396  

> vif(result)  # これが本来ほしかった結果 VIF
     x1      x2      x3 
 4.5833  7.5833 10.6670 

・ 解説ページ


・ 直前のページへ戻る  ・ E-mail to Shigenobu AOKI

Made with Macintosh