多重共線性とは
マルチコ、などと言うときもある。多重共線性Multicollinearityとは、一般重回帰モデルにおいて、説明変数の中で相関関係が高いものが含まれることを言う。結果として、予測エラーがインフレーションを起こし、真の関連がマスクされてしまうという問題がある。可能であれば、予め説明変数の中から多重共線性のある組みの片方を除くべきである。例えば、あるアウトカムの回帰分析で、体重とBMIの両方を説明変数に用いようとすると、それは多重共線性の問題があると言えるだろう。
多重共線性の例
ここではStataとRを用いて、多重共線性の例を作成してみる。
Stataでの例
データセットはStataに付属しているnlsw88.dtaを用いる。
sysuse nlsw88.dta, clear
これに対して、以下のように”hours”とほとんど同様の変数を\(2\)つ作り、多重共線性を見てみる。
gen hoursmodified = hours + rnormal(0, 1)
gen hourssimilar = hours + rnormal(0, 0.01)
この上で以下のコマンドを実行してみる。
reg wage hours
reg wage hours hoursmodified
reg wage hours hoursmodified hourssimilar
どうだろうか。多重共線性により、crudeモデルで有意であったhoursが下\(2\)つのモデルでは有意でなくなっている。
Rでの例
上と同じデータを用いる。
library(dplyr)
nlsw88 <- read.csv("https://raw.githubusercontent.com/denovo2021/stata/main/nlsw88.csv", header = TRUE)
以下で変数を生成する。
nlsw88 <- nlsw88 %>%
mutate(hoursmodified = hours + rnorm(2246, 0, 1))
#平均0, 標準偏差1の正規分布乱数を150個生成
fit = lm (formula = wage ~ hours, data = nlsw88)
summary(fit)
fit = lm (formula = wage ~ hours + hoursmodified, data = nlsw88)
summary(fit)
ここでもStataと同様の結果を得る(当然)。Model 2は省略するので各自行ってみると良い。
対処方法
多重共線性を確認するには分散拡大係数(Variance Inflation Factor; vif)を調べると良い。要するに、ある一つの変数の、他のすべての変数の回帰分析に対するR-squared(R-squared: Explained variation/Total variation)だと考えれば良い。
Stataでのvif
回帰を実行した後に、
vif
とするだけで良い。
Rでのvif
carパッケージが必要。
require(car)
vif(fit)
結果はもちろん上と同じになる。
VIFの解釈について
一般的に、\(VIFs > 4\)は要注意、\(VIFs > 10\)は何らかの重大な多重共線性が存在し、修正を要する。また、上の解析において、標準偏差がどれだけ大きくなっているかを注意して見てほしい。これがvifのVariance inflationということである。ただし、解析の必要上あるいは理論上変数を削除したくないときには、VIFが\(5\)でも\(6\)でも変数を残す事はありうるだろう。
コメント