目的 重回帰分析における多重共線性のチェックを行う 独立変数のみのデータ行列を引数として与えると,各変数のトレランスと 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 解説ページ