見出し画像

ロジスティック回帰分析でのVIF計算(Stataでの解決方法)

多重共線性についてVIFで評価したい。

多重共線性を評価したいときに、いくつか方法が提案されていますが、VIF(分散拡大要因, Variance Inflation Factor)を計算したいという場合は、それなりにある自体だと思います。

線形回帰分析に対しては、多くのソフトでVIFを計算することが可能(なんなら、頼まなくても計算してくれる)ですが、ロジスティック回帰分析では、なかなかそうはいかないという自体があるようです。

線形回帰分析でVIFを計算する。

StataでのVIF計算は、下記のコードで実行可能です。なお、webuseで呼び出している「lbwデータ」は、妊娠中の喫煙と低出生体重の関連を検証するためのサンプルデータです。

出生児体重をアウトカムとし、喫煙の有無と人種と母親の年齢が説明変数です。

webuse lbw
regress bwt smoke i.race age
estat vif

このコードを実行すると、下記のように算出されます。

Variable |       VIF       1/VIF  
-------------+----------------------
smoke    |      1.14    0.874114
race     |
2        |      1.15    0.870364
3        |      1.29    0.777204
age      |      1.06    0.944894
-------------+----------------------
Mean VIF |      1.16

VIFはいずれも10より小さく、多重共線性はないと評価されます。

ロジスティック回帰分析では計算できない。

これをロジスティック回帰モデルで同じようにやってみます。アウトカムは二値変数である「low」を用います。low=1(bwt<2500)で、low=0(bwt>=2500)という二値変数です。

logistic low smoke i.race age
estat vif

実行すると、「estat vif not valid」というエラーメッセージが表示されます。ロジスティック回帰分析のpost estimationとしてVIF計算が想定されていません。残念…!

そもそも、VIFが最小二乗回帰に基づいている指標なので、最尤推定を行っているロジスティック回帰モデルでは、適応されないのは道理にかなっています。

それでもVIFが知りたい時は、どうするのか?

そんな場合があるのかどうかさておき、VIFについて重要な点を確認したいと思います。

VIFは説明変数間の関係を記述したものです。Wikipediaによる説明英語版)ですが算出過程にはアウトカム変数がでてきません。

つまり、VIFは説明変数間の関係性だけで計算されるので、アウトカム変数はなんであってもVIFの計算結果に影響しません。

試しに、対象者IDをアウトカム変数として、VIFを計算してみます。

regress id smoke i.race age
estat vif

この場合でも、結果は下記の通りで「bwt」をアウトカム変数としたちゃんとした解析結果と同一です。

Variable |       VIF       1/VIF  
-------------+----------------------
smoke    |      1.14    0.874114
race     |
2        |      1.15    0.870364
3        |      1.29    0.777204
age      |      1.06    0.944894
-------------+----------------------
Mean VIF |      1.16

なので、アウトカムを適当において、線形回帰モデルを当てはめて計算してしまえば良いのでは…?(良いのかな?)



いいなと思ったら応援しよう!