MENU

R で多重共線性をチェックするために VIF を計算する方法

重回帰分析で、変数選択において、考慮しないといけないのが、多重共線性。

多重共線性のチェックは統計ソフトRでどうやるのか?

>>もう統計で悩むのは終わりにしませんか? 

↑期間・数量限定で無料プレゼント中!

目次

多重共線性とは何か?

生まれた西暦年と年齢は、どのくらい相関するだろうか?

全く一致するといっても言い。

生まれた月によって同じ年に生まれた人でも、尋ねた日によって年齢が1歳違うだけだ。

生まれた西暦年と年齢と病気との関係を同時に見ようとすると見られるだろうか?

答えは、見られない。

全く同じかものすごく相関が強い変数同士では、同時に関係性を見ることはできない。

なぜなら、どちらか一方で事足りるからだ。

同時に見ようとすると、同じ関係を持っているのに、真逆の結果が出たりする。

多変量モデル内で、バランスをとるためだ。

このように非常に高い相関があって、同時に同じ多変量モデルではぶつかりあって、間違った答えを導き出してしまうのが、多重共線性だ。

多重共線性のチェックはRでどうやるか?

分散拡大係数 Variance Inflation Factor (VIF)を計算する。

$$ VIF = \frac{1}{1 – R_j^2} $$

$ R_j^2 $ は、説明変数 j を目的変数とみなし、他のすべての説明変数で予測したときの決定係数である。

これが5より大きいと多重共線性が疑われる。

10より大きいと多重共線性が確定的だ。

対処は、VIFが大きい変数を多変量モデルからはずすこと。

>>もう統計で悩むのは終わりにしませんか? 

↑1万人以上の医療従事者が購読中

RにVIFを計算する関数

carパッケージにvif()という関数がある。

重回帰分析 lm() やロジスティック回帰分析 glm() の結果を投入するだけで、多重共線性のチェック結果を返してくれる。

vif()のすごいところは、連続量だけでなく、カテゴリも同時に扱えること。

Duncanというデータセットの、incomeとeducationのVIFは2超で、多重共線性の恐れはない。

library(car) #使うときに毎回
lm.res1 <- lm(prestige ~ income + education, data=Duncan)
vif(lm.res1)
1/(1-cor(Duncan[,2:3])^2)

連続変数2つだけの場合、決定係数は、相関係数の2乗と一致するので、1/(1-cor()2) で計算できる。

> vif(lm.res1)
income education
2.1049    2.1049
> 1/(1-cor(Duncan[,2:3])^2)
income education
income       Inf    2.1049
education 2.1049       Inf

typeというカテゴリ変数を入れるとどうなるか?

> summary(Duncan)
type        income        education         prestige
bc  :21   Min.   : 7.00   Min.   :  7.00   Min.   : 3.00
prof:18   1st Qu.:21.00   1st Qu.: 26.00   1st Qu.:16.00
wc  : 6   Median :42.00   Median : 45.00   Median :41.00
Mean   :41.87   Mean   : 52.56   Mean   :47.69
3rd Qu.:64.00   3rd Qu.: 84.00   3rd Qu.:81.00
Max.   :81.00   Max.   :100.00   Max.   :97.00

Generalized VIF (GVIF)が計算される。

lm.res2 <- lm(prestige ~ income + education + type, data=Duncan)
vif(lm.res2)

連続量は自由度1。

カテゴリはカテゴリ数に応じて自由度が決まる。typeは3カテゴリで、自由度2。

自由度で調整した GVIF^(1/(2*Df)) を見るべき。

> vif(lm.res2)
GVIF Df GVIF^(1/(2*Df))
income    2.209178  1        1.486330
education 5.297584  1        2.301648
type      5.098592  2        1.502666

VIFの基準の10はどのくらいの相関レベルか?

そもそもVIFが10の場合、相関係数だと、いくつになるか?

これを確認することで、VIFの基準がイメージしやすくなるはずだ。

10 = 1/(1-r2)

1/10 = 1-r2

r2 = 0.9

r ≒ ±0.95

0.95ということはほとんどぴったり一致している状態。

カテゴリとの相関の場合は、カテゴリごとに含まれる数字が全然違うような場合か。

例えば、カテゴリ

1,2,3,4,5が、
10代、20代、30代、40代、50代と、

ほぼ各年代に分かれてしまうような場合、不適切ということだろう。

それ以外なら、まず問題にならないと考えればいいと思う。

ちなみにVIF=5の場合は、r2 = 0.8 つまり r ≒ ±0.89 で、相関係数はだいたい0.9くらい。

VIF = 3の場合は、r2 = 0.67 つまり r ≒ ±0.82 で、相関係数はだいたい0.8くらい。

閾値(しきいち)候補として、3, 5, 10の相関係数のイメージをもっておけばいいのではないか。

まとめ

重回帰分析やロジスティック回帰分析で、多変量モデルを解析する場合、独立変数同士の相関が強すぎると、適切な結果が得られない。

独立変数同士の相関が強すぎる状態を多重共線性があると言う。

この多重共線性を避けるためにVIFのチェックが必要である。

VIFが5を超えた場合は、多重共線性を疑う必要がある。

10を超えた場合は、多重共線性が確定的と考えたほうが良い。

その場合は、モデルへの同時投入を諦めたほうが良い。

参考サイト

多重共線性 – Wikipedia

参考文献

Multicollinearity and misleading statistical results

多重共線性 – Wikipedia

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

リサーチクエスチョン探し?データ分析?論文投稿?、、、で、もう悩まない!

第1章臨床研究ではなぜ統計が必要なのか?計画することの重要性
  • 推定ってどんなことをしているの?
  • 臨床研究を計画するってどういうこと?
  • どうにかして標本平均を母平均に近づけられないか?
第2章:研究目的をどれだけ明確にできるのかが重要
  • データさえあれば解析でどうにかなる、という考え方は間違い
  • 何を明らかにしたいのか? という研究目的が重要
  • 研究目的は4種類に分けられる
  • 統計専門家に相談する上でも研究目的とPICOを明確化しておく
第3章:p値で結果が左右される時代は終わりました
  • アメリカ統計協会(ASA)のp値に関する声明で指摘されていること
  • そうは言っても、本当に有意差がなくてもいいの…?
  • なぜ統計専門家はp値を重要視していないのか
  • 有意差がない時に「有意な傾向があった」といってもいい?
  • 統計を放置してしまうと非常にまずい
第4章:多くの人が統計を苦手にする理由
  • 残念ながら、セミナー受講だけで統計は使えません。
  • インプットだけで統計が使えない理由
  • どうやったら統計の判断力が鍛えられるか?
  • 統計は手段なので正解がないため、最適解を判断する力が必要
第5章:統計を使えるようになるために今日から何をすれば良いか?
  • 論文を読んで統計が使えるようになるための5ステップ
第6章:統計を学ぶために重要な環境
  • 統計の3つの力をバランスよく構築する環境

以下のボタンをクリックして、画面に出てくる指示に従って、必要事項を記入してください。

この記事を書いた人

統計 ER ブログ執筆者

元疫学研究者

統計解析が趣味

コメント

コメント一覧 (3件)

コメントする

目次