多重共線性の話 〜その2 一般的な問題点 [データサイエンス、統計モデル]
回帰係数は、シミュレーション結果と異なるが、予測結果は問題ない。
多重共線性が起こっているx1, x2において、係数の標準誤差が大きくなっている(t値が小さくなる)ことが確認できる。
x1とx2間に強い線形の関係が見られる。
x1, x2, x3のいくつかの変数を使ったモデルを作成し、R2やAICの比較を行った。
多重共線性が起こっているx1, x2において、係数の標準誤差が大きくなっている(t値が小さくなる)ことが確認できる。
x1とx2間に強い線形の関係が見られる。
x1, x2, x3のいくつかの変数を使ったモデルを作成し、R2やAICの比較を行った。
> vif(res_123)
x1 x2 x3
6.453802 6.462609 1.003874
> vif(res_12)
x1 x2
6.450832 6.450832
> vif(res_13)
x1 x3
1.002045 1.002045
> vif(res_23)
x2 x3
1.003412 1.003412
実験2: 多重共線性のあるデータを300レコード発生させ、回帰分析を行う
# 多重共線性が起こっているデータ
set.seed(123)
x1 <- rnorm(N)
x2 <- x1 + 0.4*rnorm(N)
x3 <- rnorm(N)
e <- rnorm(N)
y <- 1000 + 100*x1 + 80*x2 + 60*x3 + 100*e
df.2 <- data.frame(x1, x2, x3, e, y)
# lm model
model_lm2 <- lm(y~x1+x2+x3, data=df.2)
summary(model_lm2)
## 予測値と実測値プロット
plot(df.2$y, predict(model_lm2), xlab="Actual", ylab="Predict", xlim=c(200,1800), ylim=c(200,1800))
abline(0, 1, col="red")
## 残差プロット
plot(predict(model_lm2), resid(model_lm2), xlab="Predict", ylab="Residual")
abline(0, 0, col="red")
> summary(model_lm2)
Call:
lm(formula = y ~ x1 + x2 + x3, data = df.2)
Residuals:
Min 1Q Median 3Q Max
-256.535 -71.289 0.933 56.108 311.957
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 1002.441 5.874 170.650 < 2e-16 ***
x1 73.000 15.791 4.623 5.66e-06 ***
x2 109.728 14.904 7.363 1.80e-12 ***
x3 64.558 5.700 11.327 < 2e-16 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 101.7 on 296 degrees of freedom
Multiple R-squared: 0.7688, Adjusted R-squared: 0.7665
F-statistic: 328.1 on 3 and 296 DF, p-value: < 2.2e-16
コメント 0