多重共線性とは

重回帰分析において、説明変数をやみくもに増やすと多重共線性という問題が生じることがあります。これは、説明変数間に相関がある場合に起こり、多重共線性が生じると回帰式の係数が不安定になります。重回帰分析を行うときには、これに気を配る必要があります。

多重共線性の発生する例

まず、乱数を使って仮想的なデータを生成します。以下の例では、もちろんx1〜x3とyの間に線形の関係がありますが、さらにx1とx3の間にも相関があるデータを作成していることに注意してください。

x1 <- rnorm(100, 10, 1)
x2 <- rnorm(100, 10, 2)
x3 <- x1 * 2 + rnorm(100, 10, 0.01)
y <-  x1 + 2 * x2 + 3 * x3 + rnorm(100, 0, 1)

ここで散布図行列を書きます。x1とx3の間に相関があるのがわかります。

data <- data.frame(y,x1,x2,x3)
pairs(data)
plot

lm関数で回帰を行い、summary関数で回帰の結果の概要を見ます。

result <- lm(formula = y ~ x1 + x2 + x3)
summary(result)

以下のように出力されます。


Call:
lm(formula = y ~ x1 + x2 + x3)

Residuals:
     Min       1Q   Median       3Q      Max 
-2.33112 -0.82727 -0.06202  0.88366  2.30364 

Coefficients:
              Estimate Std. Error t value Pr(>|t|)    
(Intercept) -124.64723  119.91432  -1.039    0.301    
x1           -23.70632   23.94031  -0.990    0.325    
x2             1.96392    0.05202  37.757   <2e-16 ***
x3            15.40270   11.97863   1.286    0.202    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.07 on 96 degrees of freedom
Multiple R-squared:  0.9842,	Adjusted R-squared:  0.9837 
F-statistic:  1993 on 3 and 96 DF,  p-value: < 2.2e-16

仮想的なデータを作った方法によれば、回帰式は y = x1 + 2 * x2 + 3 * x3 に近いものとなるはずですが、全く異なる係数が得られてしまっています。これが多重共線性の影響です。各係数の有意確率も小さくなく、回帰がうまくいっていないことが示唆されます。

VIF値による多重共線性の判別

説明変数の中で多重共線性を生じている可能性がある場合には、VIF(Variance Inflation factor:分散拡大係数)を計算します。10を越えると多重共線性の目安になります。まず、デフォルトのRではVIFは計算できませんので、パッケージをインストールします。

install.packages("fmsb")
library(fmsb)

インストールしたら、以下のようにコマンドを入力すればVIFが計算できます。

VIF(lm(x1~x2+x3))
VIF(lm(x2~x1+x3))
VIF(lm(x3~x1+x2))

以下のような出力が得られます。


[1] 44614.76
[1] 1.03132
[1] 44621.33

x1とx3のVIFが10を超えているのは多重共線性の生じていることを示しています。