[Statistics][Stata][Multi-collinearity]多重共線性マルチコリニアリティとは何か?

assorted color umbrellas R
Photo by Engin Akyurt on Pexels.com

多重共線性とは

マルチコ、などと言うときもある。多重共線性Multicollinearityとは、一般重回帰モデルにおいて、説明変数の中で相関関係が高いものが含まれることを言う。結果として、予測エラーがインフレーションを起こし、真の関連がマスクされてしまうという問題がある。可能であれば、予め説明変数の中から多重共線性のある組みの片方を除くべきである。例えば、あるアウトカムの回帰分析で、体重とBMIの両方を説明変数に用いようとすると、それは多重共線性の問題があると言えるだろう。

多重共線性の例

ここではStataRを用いて、多重共線性の例を作成してみる。

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
crude model.
reg wage hours hoursmodified
model 1.
reg wage hours hoursmodified hourssimilar
model 2.

どうだろうか。多重共線性により、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)
Crude model.
fit = lm (formula = wage ~ hours + hoursmodified, data = nlsw88)
summary(fit)
Model 1.

ここでも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\)でも変数を残す事はありうるだろう。

関連記事

共変量と交絡因子
交互作用項、interaction termについて
Rの基本的なコマンド一覧

コメント

タイトルとURLをコピーしました