多重共線性(multi-collinearity)を評価するための指標として、tolerance(トレランス)やVariance Inflation Factor(VIF)を使うことがあります。みなさんも、多変量解析を行なった際「VIFが高い場合にその変数をmodelから除きなさい」と教えてもらったことがあるのではないでしょうか。
しかし、
- ToleranceやVIFとは、一体なんなのか
- なぜVIFが高いとダメなのか
- VIFのみを共線性の指標にして良いのか
など、しっかり理解できていますか?今回は、toleranceやVIFの意味と、それらを用いることの注意点を解説したいと思います。
まずは、toleranceやVIFを使う目的である、共線性(collinearity)について復習しましょう。
復習:Collinearity(共線性)
X1(暴露因子)がY(outcome)に与える影響を調べたい場合、ある変数X2がX1と関係があり、Yとは関係が無い場合、X2のことを”collinear covariate”と呼びます。
このようなcollinear covariateがmodelにあると、X1を表すmodel(図の青四角)のr-squared(図の赤丸)が増加し、結果的にX1の係数であるβ1のstandard errorが大きくなます。β1のstandard errorの上昇は検出力の低下(p-valueの上昇)に繋がってしまうため、collinearityを持つ変数はmodelから除外する必要があります。
以上のことをもっと知りたければ、こちらを参照してください。
Tolerance(トレランス)
Collinearity (共線性)を表す指標の一つとして、toleranceがあります。Toleranceは、
Tolerance = 1 – r2X1|X2,X3,…,Xp
と定義されます。上の赤丸で示したように、「r2X1|X2,X3,…,Xp」はX1を表すmodelのr-squaredですので、X1との関連が大きければ大きいほど、このr-squaredは大きくなり、toleranceは小さくなります。
r-squaredのとりうる値が0~1ですので、toleranceは0が最も悪く(collinearityあり)、1が最も良い(collinearityなし)となります。
Variance Inflation Factor (VIF)
VIFは、上記のtoleranceの逆数です。
Variance Inflation Factor = 1 / Tolerance
従って、VIF =1が最も良く(collinearityなし)、collinearityが大きくなるに従ってVIFも増加します。
ToleranceとVIFの注意点
これらtoleranceやVIFを用いることで、それぞれの変数に対するcollinearityの程度(=β1のstandard errorへの影響)を知ることができるというメリットがありますが、以下のような注意点があります。
注意点① :標準的な閾値は存在しない
巷では、「VIF =10が共線性のカットオフ」などといった意見も聞かれますが、このような標準的な閾値というのは存在しません。
注意点② :どの因子がcollinearityを持っているか不明
上記の計算式から分かるように、X2~Xpのどの変数がX1とcollinearityを持っているか、toleranceやVIFからは判断できません。
注意点③ :collinearityとconfoundingの鑑別不可
ConfounderはX1とYの両方に関係している因子ですが、collinear covariateはX1のみと関係している因子です。概念的には、両者は重なりません。
そして、confounderであればmodelに入れなければなりませんが、collinear covariateであれば、modelから除外することが望ましいことになります。
しかし、toleranceやVIFのみを診断に使ってしまうと、confounderとの区別をつけることができません。
注意点④ :collinearityとsignificant predictorの鑑別不可
上記と同様に、仮にtoleranceが低く(VIFが高く)、collinearityの存在が示唆されたとしても、その変数がsignificant predictorである可能性もあります。
Significant predictorであれば、β1のstandard errorを小さくし、検出力を上げてくれるため、modelに入れる方が望ましいことになってしまします。
ToleranceやVIFのみを診断に使ってしまうと、このsignificant predictorと区別をつけることができません。
注意点⑤ :その他のregressionでは使用できない
このtoleranceやVIFは、logistic regressionなど他のregression modelでは使用できません。
R code
Rでは、olsrr
というpackageのold_vif_tol
というfunctionを使えば、toleranceとVIFの両方を求めることができます。
library(olsrr) model<-lm(bwt~smoke+low+ lwt+ race+ ptl+ ui, data=df_bw) ols_vif_tol(model)
## Variables Tolerance VIF ## <chr> <dbl> <dbl> ## 1 smoke1 0.813 1.23 ## 2 low1 0.828 1.21 ## 3 lwt 0.864 1.16 ## 4 race2 0.849 1.18 ## 5 race3 0.743 1.35 ## 6 ptl1 0.888 1.13 ## 7 ptl2 0.965 1.04 ## 8 ptl3 0.944 1.06 ## 9 ui1 0.908 1.10
まとめ
Regression modelに入れるべき変数を決める上で、大切となるcollinearityを確かめる一つの手段としての、toleranceとVIFを解説しました。Modelをつくる上では、他にも考慮しなければならないことが幾つかあります。興味のある方は、こちらも読んでください。
多変量解析
Reference
John Orav. BST 213: Applied Regression for Clinical Research. Harvard T.H. Chan School of Public Health
コメント
コメント一覧 (1件)
[…] 多変量解析とVIF:多変量解析の変数選びでしばしば用いられるVIFやトレランス、しっかり理解できていますか? […]