重回帰分析を行ったときに多重共線性がありそうかどうかを確認するときにVIFに加え、条件指数(Condition Index)と分散の比率(Variance Propotions)を参照して多重共線性を確認する手法がある。
SPSSだと重回帰分析をするときにオプションから共線性の診断(Collinearity
Diagnostics)にチェックを入れると計算してくる模様(手元に資金がSPSSがないのでわからない)。条件指数と分散の比率を参照するとどの独立変数が多重共線性が疑われるのかわかる(本稿では見方については触れない)。
RでこのSPSSの共線性の診断と同じ(だと思う、手元にSPSSが無いのでわからない)結果を得るためパッケージを使用して簡単に求める方法をメモしておく。
{olsrr}
パッケージのols_coll_diag()
を使って求める。
{olsrr}
パッケージのols_coll_diag()
を使う。多分olsrrはOrdinary Least
Squares regression、ols_coll_diagはols collinearity
diagnosticsの略だと思う。覚えやすい。
CRANからインストールできる。
install.packages("olsrr")
パッケージのvignettesにあった例で実行してみる。
mtcars
データのmpg
(燃費)を従属変数として、独立変数をdisp
(エンジンの排気量)、hp
(馬力)、wt
(重量)、qsec
(1/4マイルの時間)とした重回帰分析のモデルで確認してみる。
とりあえず上記の重回帰分析のモデルをmodel
として求めて中身を見てみる。
model <- lm(mpg ~ disp + hp + wt + qsec, data = mtcars) summary(model)
##
## Call:
## lm(formula = mpg ~ disp + hp + wt + qsec, data = mtcars)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.8664 -1.5819 -0.3788 1.1712 5.6468
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 27.329638 8.639032 3.164 0.00383 **
## disp 0.002666 0.010738 0.248 0.80576
## hp -0.018666 0.015613 -1.196 0.24227
## wt -4.609123 1.265851 -3.641 0.00113 **
## qsec 0.544160 0.466493 1.166 0.25362
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2.622 on 27 degrees of freedom
## Multiple R-squared: 0.8351, Adjusted R-squared: 0.8107
## F-statistic: 34.19 on 4 and 27 DF, p-value: 3.311e-10
ということで、重回帰分析ができた。ここでこのモデルの共線性の診断の結果を{olsrr}
パッケージのols_coll_diag()
を使って求める。
olsrr::ols_coll_diag(model)
## Tolerance and Variance Inflation Factor
## ---------------------------------------
## Variables Tolerance VIF
## 1 disp 0.1252279 7.985439
## 2 hp 0.1935450 5.166758
## 3 wt 0.1445726 6.916942
## 4 qsec 0.3191708 3.133119
##
##
## Eigenvalue and Condition Index
## ------------------------------
## Eigenvalue Condition Index intercept disp hp wt
## 1 4.721487187 1.000000 0.000123237 0.001132468 0.001413094 0.0005253393
## 2 0.216562203 4.669260 0.002617424 0.036811051 0.027751289 0.0002096014
## 3 0.050416837 9.677242 0.001656551 0.120881424 0.392366164 0.0377028008
## 4 0.010104757 21.616057 0.025805998 0.777260487 0.059594623 0.7017528428
## 5 0.001429017 57.480524 0.969796790 0.063914571 0.518874831 0.2598094157
## qsec
## 1 0.0001277169
## 2 0.0046789491
## 3 0.0001952599
## 4 0.0024577686
## 5 0.9925403056
Eigenvalue and Condition IndexがSPSSで求められる条件指数(Condition Index)と分散の比率(Variance Propotions)にあたるもよう。VIF(Variance Inflation Factor)も一緒に求められる。SPSSが手元にないので確認できない(しつこい)が、諸サイトを見るかぎりSPSSの表示と似たようになるように調整されている様子。
一応、VIFを確認する(個人的に)定番(だと思っている){car}
パッケージのvif()
の結果も見てみる。
car::vif(model)
## disp hp wt qsec
## 7.985439 5.166758 6.916942 3.133119
VIF同じ(当たり前)。
雑感
共線性の診断って入力しにくい。google 日本語入力では多重共線性は変換できるが、共線性は一発で変換できない。
SPSSでもCollinearity Diagnosticsってなっており、これの訳で共線性の診断になっているのだと思う。Multicollinearity Diagnosisじゃないんだ、と思った。多重じゃない(単回帰分析とか?)の場合でもいいようにしているのだろうか?勉強不足でちょっとわからない。