多変量解析とVIF

多重共線性(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

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

コメント

コメント一覧 (1件)

医療従事者に必要な統計学と疫学〜目次サイト〜|シェアする挑戦者 〜 MD × MPH 〜 へ返信する コメントをキャンセル

英語のコメントは『問い合わせ』からお願いします。

目次