0
1

多重共線性って,そんなに単純なものじゃない

Posted at

多重共線性って,そんなに単純なものじゃない

「独立変数間の相関係数に 0.8 を超えるものがあると多重共線性が生じる」というのは誤り

例1

相関係数の高いものばかりが含まれるデータで,重回帰分析を行う。

この記事では R による分析例を示すが,生データも書いておくので,各自常用の言語,パッケージで解析することもできよう。
サンプルサイズは,各自大きくしたり小さくしたり,自由に。

使用するデータは以下の通り。

# install.packages("MASS")
library(MASS)
set.seed(123)
n <- 20
r <- matrix(runif(16, 0.8, 0.9), 4, 4)
r <- (r+t(r))/2
diag(r) <- 1
d3 <- data.frame(matrix(mvrnorm(n, mu=rep(0, 4), Sigma=r, empirical=TRUE), n))
colnames(d3) <- c("y", "x1", "x2", "x3")
d3
A data.frame: 20 × 4
y x1 x2 x3
<dbl> <dbl> <dbl> <dbl>
0.24152986 0.1854138 1.09801413 0.44562475
-1.70064629 -1.6065555 -1.26849517 -0.80832842
-0.38424687 -0.3328059 -0.65521817 -1.03108541
1.49096538 1.5364718 0.70189981 0.55469928
-1.16413391 -1.1880668 -1.09971270 -1.01307712
-0.59137327 0.5902655 -0.14799097 -0.31125523
0.21926504 0.4992306 -0.18259741 0.39057030
-2.04857497 -1.4414423 -1.22440642 -2.22134547
0.29697801 -0.6306919 -0.89631508 -0.38353204
1.25180225 2.0644996 1.44783824 1.90761241
-0.08223516 -0.3935205 -0.09738636 -0.60527762
0.49245136 0.4906709 0.60713542 0.46425254
0.74447075 0.8205551 1.10849439 0.97363820
0.25951883 -0.2605998 0.05020793 0.09203959
1.56644642 1.0228624 1.43988937 1.32080174
-1.06160259 -0.9369158 -1.63791262 -0.28235486
0.03160193 -0.1332552 -0.76061651 0.24399015
1.06027006 0.9957936 1.59730171 1.49777128
-0.70075739 -1.0113302 -0.26520287 -1.03764900
0.07827055 -0.2705792 0.18507329 -0.19709507

このデータにおいて,相関係数行列は以下のようになる。
相関係数は 0.8 以上のものばかりである。

cor.d3 <- cor(d3)
colnames(cor.d3) <- rownames(cor.d3) <- c("$y$", "$x_1$", "$x_2$", "$x_3$")
cor.d3
A matrix: 4 × 4 of type dbl
$y$ $x_1$ $x_2$ $x_3$
$y$ 1.0000000 0.8864386 0.8480206 0.8780294
$x_1$ 0.8864386 1.0000000 0.8492360 0.8732526
$x_2$ 0.8480206 0.8492360 1.0000000 0.8278129
$x_3$ 0.8780294 0.8732526 0.8278129 1.0000000

重回帰分析の結果は,以下のようになる。回帰係数の符号,大きさも特に問題はない。

ans = lm(y~., d3)
summary(ans)
Call:
lm(formula = y ~ ., data = d3)

Residuals:
     Min       1Q   Median       3Q      Max 
-0.67161 -0.22903 -0.03286  0.27028  0.88072 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)
(Intercept) 2.347e-17  9.605e-02   0.000    1.000
x1          3.805e-01  2.281e-01   1.669    0.115
x2          2.323e-01  1.981e-01   1.173    0.258
x3          3.535e-01  2.146e-01   1.647    0.119

Residual standard error: 0.4295 on 16 degrees of freedom
Multiple R-squared:  0.8446,	Adjusted R-squared:  0.8155 
F-statistic: 28.99 on 3 and 16 DF,  p-value: 1.052e-06

VIF はやや大きいとはいえ,通常のクライテリアである 10 以下なので,問題はない。

cbind(diag(solve(cor(d3[2:4]))))
A matrix: 3 × 1 of type dbl
x1 5.355946
x2 4.040539
x3 4.744538

例2

次に示すデータは,独立変数間で一組だけ相関の高いものがある例である。

set.seed(1423)
n <- 20
r <- matrix(runif(16, 0.5, 0.59), 4, 4)
r <- (r+t(r))/2
r[2,3] <- r[3,2] <- 0.95
diag(r) <- 1
d4 <- data.frame(matrix(mvrnorm(n, mu=rep(0, 4), Sigma=r, empirical=TRUE), n))
colnames(d4) <- c("y", "x1", "x2", "x3")
d4
A data.frame: 20 × 4
y x1 x2 x3
<dbl> <dbl> <dbl> <dbl>
-0.04417034 -0.05110081 -0.07778910 -0.611334549
-0.36938932 -0.34734935 0.08725501 0.968410637
-1.65051133 -1.63201389 -1.53973371 -1.339277828
-0.83279846 0.48069002 0.40686139 -0.636926474
-0.16670322 -0.46021522 -0.31228385 -0.248167050
0.38356948 1.19951521 1.15267954 1.436098744
1.01133688 0.92044682 1.07041272 1.062552908
1.11297614 -0.37441684 0.02080774 0.150847475
-0.16072762 -0.59408086 -0.71035126 -0.856467559
2.54408585 0.67598672 0.83318513 2.289325197
0.21255632 -0.33400810 -0.16829297 -1.836658272
-1.40031829 0.87759090 0.78562350 -0.103083820
-0.86499677 -1.36952499 -1.88246868 0.004228016
-0.18685383 1.22315678 0.66978445 0.422698040
0.04680101 -0.79276816 -1.29405246 -1.126643140
0.33649025 0.74073761 1.23176473 0.536696498
1.20031722 1.84228121 1.33264003 -0.184979306
-1.24677544 -0.90958645 -0.92813270 0.054627418
-0.51315616 -1.61594569 -1.33445271 -0.726316946
0.58826762 0.52060510 0.65654321 0.744370011

相関係数行列以下のようになるが,0.8 以上の相関係数は一対しかない。

cor.d4 <- cor(d4)
colnames(cor.d4) <- rownames(cor.d4) <- c("$y$", "$x_1$", "$x_2$", "$x_3$")
cor.d4
A matrix: 4 × 4 of type dbl
$y$ $x_1$ $x_2$ $x_3$
$y$ 1.0000000 0.5073331 0.5556027 0.5540237
$x_1$ 0.5073331 1.0000000 0.9500000 0.5202550
$x_2$ 0.5556027 0.9500000 1.0000000 0.5845927
$x_3$ 0.5540237 0.5202550 0.5845927 1.0000000

重回帰分析の結果は,以下のようになる。
3 個の独立変数はすべて,従属変数と正の相関関係なのに,$x_1$ の偏回帰係数は負で,その絶対値も他より小さい。
要するに,多重共線性の疑いがあるということだ。

ans = lm(y~., d4)
summary(ans)
Call:
lm(formula = y ~ ., data = d4)

Residuals:
     Min       1Q   Median       3Q      Max 
-1.63223 -0.55392  0.05295  0.50464  1.45189 

Coefficients:
              Estimate Std. Error t value Pr(>|t|)
(Intercept) -9.458e-18  1.904e-01   0.000    1.000
x1          -8.642e-02  6.318e-01  -0.137    0.893
x2           4.368e-01  6.651e-01   0.657    0.521
x3           3.436e-01  2.432e-01   1.413    0.177

Residual standard error: 0.8516 on 16 degrees of freedom
Multiple R-squared:  0.3892,	Adjusted R-squared:  0.2747 
F-statistic: 3.399 on 3 and 16 DF,  p-value: 0.04362
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1