混合線形モデルで多重共線性をテストして回避する方法は?


25

現在、いくつかの混合効果線形モデルを実行しています。

Rでパッケージ「lme4」を使用しています。

私のモデルの形式は次のとおりです。

model <- lmer(response ~ predictor1 + predictor2 + (1 | random effect))

モデルを実行する前に、予測子間の可能な多重共線性をチェックしました。

私はこれをしました:

予測子のデータフレームを作成します

dummy_df <- data.frame(predictor1, predictor2)

「cor」関数を使用して、予測子間のピアソン相関を計算します。

correl_dummy_df <- round(cor(dummy_df, use = "pair"), 2) 

「correl_dummy_df」が0.80より大きい場合、predictor1とpredictor2の相関が高すぎるため、モデルに含まれていないと判断しました。

読書を行うと、多重共線性をチェックするより客観的な方法が現れます。

誰にもこれに関するアドバイスはありますか?

「Variance Inflation Factor(VIF)」は、1つの有効な方法のようです。

VEDは、AEDパッケージ(非クラン)の関数「corvif」を使用して計算できます。パッケージはhttp://www.highstat.com/book2.htmにあります。このパッケージは、次の書籍をサポートしています。

Zuur、AF、Ieno、EN、Walker、N.、Saveliev、AA&Smith、GM2009。混合効果モデルとエコロジーの拡張、R、第1版。スプリンガー、ニューヨーク。

一般的な経験則のように見えますが、VIFが5より大きい場合、予測子間の多重共線性は高くなります。

VIFの使用は、単純なピアソン相関よりも堅牢ですか?

更新

興味深いブログを見つけました:

http://hlplab.wordpress.com/2011/02/24/diagnosing-collinearity-in-lme4/

ブロガーは、lme4パッケージのモデルのVIFを計算するための便利なコードを提供します。

コードをテストしましたが、うまく機能します。その後の分析で、モデルの多重共線性は問題ではないことがわかりました(すべてのVIF値<3)。これは、以前にいくつかの予測子間の高いピアソン相関関係を発見したことを考えると、興味深いものでした。


6
(1)AEDパッケージは廃止されました。代わりに、機能のsource("http://www.highstat.com/Book2/HighstatLibV6.R")ためだけ にcorvif。(2)本当の答えを提供したいが、(a)VIFは多重共線性を考慮に入れていると思う)および(b)共線性の用語を削除することの知恵について、私は強い遠慮があります。グラハム参照エコロジー 2003、DOI:10.1890 / 02から3114
ベンBolker

ありがとう、ベン。上記の投稿を更新して、提案を含めました。
mjburns 14年

@BenBolker、共線性用語の削除に反対する理由を簡単に説明できますか?私はリファレンスに感謝しますが、Cliff Notesバージョンも好きかもしれません。ありがとう!
バイチュ

ベンの応答の修正.. URLはhttp://highstat.com/Books/BGS/GAMM/RCodeP2/HighstatLibV6.R
マノジクマール

回答:


10

VIF計算では、usdmをパッケージにすることもできます(「usdm」をインストールする必要があります)

library(usdm)
df = # Data Frame
vif(df)

VIF> 4.0の場合、一般的に多重共線性はモデルに適合する前にそれらのすべての予測変数を削除すると仮定します


あなたは、フィルタ変数にthresold使用することができますビットの補遺は、上記のすべてがショーの相関除外する好きな.4ようにvifcor(vardata,th=0.4)。同様にvifstep(vardata,th=10)、10を超えるすべてを破棄するために使用できます。
SIslam17年

HLMでは動作しません
Mox

7

更新。この質問は便利だと感じましたが、コメントを追加できません。

Zuur のコード(2009)は、ジャーナル「Methods in Ecology and Evolution」でのそれらの出版物(および非常に有用な)の補足資料を介して入手することもできます。

論文- 一般的な統計上の問題を回避するためのデータ探索のプロトコル -は、VIFしきい値を正当化するための有用なアドバイスと非常に必要なリファレンスを提供します(3のしきい値を推奨)。論文はこちら:http : //onlinelibrary.wiley.com/doi/10.1111/j.2041-210X.2009.00001.x/fullで、Rコードは補足資料タブ(.zipダウンロード)にあります。

クイックガイド:分散インフレーション係数(VIF)を抽出するには、HighStatLib.rコードを実行し、関数を使用しますcorvif。この関数には、予測子のみのデータフレームが必要です(たとえば、df = data.frame(Dataset[,2:4])データが列2〜4の予測子とともにデータセットに格納されている場合


1

多分qr()機能するでしょう。場合はX、あなたのデータフレームまたは行列では、使用することができますqr(X)$pivot。たとえばqr(X)$pivot= c(1, 2, 4, 5, 7, 8, 3, 6)、、列3および6は多重共線型変数です。


1

dredge関数(MuMInパッケージ)の実行時に予測子間の多重共線性を評価するには、次のmax.r関数を「追加」引数として含めます。

max.r <- function(x){
  corm <- cov2cor(vcov(x))
  corm <- as.matrix(corm)
  if (length(corm)==1){
    corm <- 0
    max(abs(corm))
  } else if (length(corm)==4){
  cormf <- corm[2:nrow(corm),2:ncol(corm)]
  cormf <- 0
  max(abs(cormf))
  } else {
    cormf <- corm[2:nrow(corm),2:ncol(corm)]
    diag(cormf) <- 0
    max(abs(cormf))
  }
}

次に、予測変数の数を指定し、max.r関数を含むdredgeを実行します。

options(na.action = na.fail)
Allmodels <- dredge(Fullmodel, rank = "AIC", m.lim=c(0, 3), extra= max.r) 
Allmodels[Allmodels$max.r<=0.6, ] ##Subset models with max.r <=0.6 (not collinear)
NCM <- get.models(Allmodels, subset = max.r<=0.6) ##Retrieve models with max.r <=0.6 (not collinear)
model.sel(NCM) ##Final model selection table

これはlme4モデルで機能します。nlmeモデルについては、https//github.com/rojaff/dredge_mcを参照してください


1

VIF(分散インフレーション係数)は、以下によって簡単に測定できます。

 library(car)
 vif(yourmodel) #this should work for lme4:lmer mixed models.
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.