ロジスティック回帰分析での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
なので、アウトカムを適当において、線形回帰モデルを当てはめて計算してしまえば良いのでは…?(良いのかな?)