多重共線性のチェック(トレランスと 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

Made with Macintosh