ねこすたっと

ねこの気持ちと統計について悩む筆者の備忘録的ページ。

回帰モデルの診断・評価(3):多重共線性

この記事では回帰モデルにおける「多重共線性」について学んでみるつもりです。回帰モデルの満たすべき仮定の概要については以下の記事を参考にしてください。

necostat.hatenablog.jp

necostat.hatenablog.jp

多重共線性とは

回帰モデルの説明変数同士に相関があることを「多重共線性(multicollinearity)」と言います。

説明変数  X_1, X_2 が完全に独立であれば、単回帰モデル  Y = \alpha_0 + \alpha_1 X_1 で推定される係数  \alpha_1 と、変数  X_2 を加えたモデル  Y = \beta_0 + \beta_1 X_1 + \beta_2 X_2 で推定される係数  \beta_1 は等しくなります。

逆に、説明変数  X_1, X_2 が完全相関(相関係数 r=1)のとき、つまり  X1 = cX_2 と書けるときは、

 
\begin{aligned}
Y &=  \beta_0 + \beta_1 X_1 + \beta_2 X_2\\
&= \beta_0 + (c \beta_1 + \beta_2) X_2 
\end{aligned}

となり、変数  X_2 の係数になる値を与える  \beta_1,  \beta_2の組み合わせが無限に存在することになり、解が得られません。

現実世界は上記の両極端な場合の中間にありますが、相関が強く、後者に近いケースでは係数βの推定誤差がものすごく大きくなるなど、色々問題が起こってきます。

多重共線性を疑う状況

次のような状況では多重共線性が存在する可能性を考えます(もちろん未測定交絡など他の問題が原因かもしれませんが)。

  • 変数を加えたり除いたりしたときに係数βの推定値が大きく変化する
  • 1つの対象者を加えたり除いたりしたときに係数βの推定値が大きく変化する
  • 重要な変数の係数について有意差がない or 信頼区間が非常に広い
  • 先行研究や理論的に考えられる効果の方向と逆の結果になる
  • 2つの変数間の相関係数が非常に高い

分散拡大要因(Variance Inflation Factor, VIF)

変数を下のように変換(correlation transformation)して、線形回帰モデル*1に当てはめて求めた係数を標準化回帰係数と言います。

 
\begin{aligned}
X_{ik} &= \frac{1}{\sqrt{n-1}}\left( \frac{X_{ik} - \bar{X_k}}{s_{X_k}} \right) \\
Y_i &= \frac{1}{\sqrt{n-1}}\left( \frac{Y_i - \bar{Y}}{s_Y} \right)
\end{aligned}

標準化回帰係数の分散が、変換前のデータで推定される回帰係数の分散と比べてどれくらい増大したかを示すのがVIFです。 簡単に言うと、「説明変数間の相関によって、回帰係数の分散がどれくらい増大するか」を示した指標です。

ただ、この説明は何回読んでも頭に残りません。下のように、決定係数*2(= 他の説明変数でどれくらい説明されるか) R2 を使ったVIFの定義の方が分かりやすいです。

 
\begin{aligned}
(VIF)_k &= \frac{1}{1-R_k^2}
\end{aligned}

相関関係がないとき(R2 = 0)は、VIF = 1となり、相関関係が強くなるとVIFは大きくなっていきます。 「多重共線性がある」と判断する目安は VIF > 10と言われています(他にも>5とか>2とか言われたりします)。

変数が2つしかなければ、決定係数は相関係数  r の2乗で計算できるので、下のようになります。

  • r = 0.9 → VIF ≒ 5.3
  • r = 0.95 → VIF ≒ 10.3
  • r = 0.99 → VIF ≒ 50.3

変数が3つ以上になると手計算では難しくなりますので統計ソフトを使いましょう。

vif( )を使ってVIFを計算する

まずmitcarsデータで下のようにモデルを当てはめます。

fit <- lm(mpg ~ disp + hp + drat, data = mtcars)

carパッケージのvif( )に当てはめたモデルを渡します。

library(car)
vif(fit)
    disp       hp     drat 
4.621988 2.868264 2.166843 

一般的に目安とされるVIF>10となっている変数はないので、問題となる多重共線性はないと判断していいと思います。

ロジスティック回帰モデルのように、アウトカムが連続変数ではなく線形回帰モデルが当てはめられない場合はどう計算したらいいでしょうか。VIFは説明変数の相関だけで計算されるので、アウトカム変数の型は関係ありません。 なので、アウトカムを適当において、lm( )で線形回帰モデルを当てはめて、vif( )でVIFを計算すればOKです。

対処法

同じようなものを測っている変数がモデルに含まれる場合はVIFが大きくなる可能性があります。

最も簡単な対処法としては、相関の強い変数のどちらかを除外したり、統合して1つにまとめたりする方法でしょう。 変数選択アルゴリズム(Ridge法, LASSO法)を使って変数を減らす方法を紹介しているのも見かけますが、個人的には予測因子の候補も多すぎるケース以外ではあまり選択肢として考えていません。 そもそも予測が目的の回帰モデルであれば、少しでも予測に役に立つ変数は加えたらいいのでVIFを問題にすることはないです。

臨床研究では、一見似たような変数に思えても異なった側面を測定していることが多く、多少の多重共線性があっても問題になることはないと言う人もいます。実際、相関係数が0.9を超えていない場合や、係数の信頼区間が解釈に影響するほど広くないなら、VIFを見るまでしなくていいかもしれません。また、調整目的で入れた変数のVIFが高かったとしても、興味ある要因のVIFが高くないなら気にしなくて良いという意見もあります。

おわりに

  • 「気にしなくて良い」という意見をみかけると、ついついそちらになびいてしまう悪いクセがあります。

参考資料

statisticalhorizons.com

www.statalist.org

*1:ただし切片項は含まない

*2:寄与率ともいいます