lme4(> 1.0)に適合した二項GLMMの適合を評価する方法は?


19

私は二項分布とロジットリンク関数を備えたGLMMを所有しており、データの重要な側面がモデルで十分に表現されていないように感じています。

これをテストするために、データがロジットスケールの線形関数で適切に記述されているかどうかを知りたいと思います。したがって、残差が適切に動作するかどうかを知りたいです。ただし、どの残差プロットでプロットするか、プロットをどのように解釈するかはわかりません。

新しいバージョンのlme4(GitHubの開発バージョン)を使用していることに注意してください。

packageVersion("lme4")
## [1] ‘1.1.0’

私の質問は次のとおりです。ロジットリンク関数を使用して、二項一般化線形混合モデルの残差を検査および解釈するにどうすればよいですか。

次のデータは、実際のデータの17%しか表していませんが、フィッティングは既に私のマシンで約30秒かかるため、次のようにします。

require(lme4)
options(contrasts=c('contr.sum', 'contr.poly'))

dat <- read.table("http://pastebin.com/raw.php?i=vRy66Bif")
dat$V1 <- factor(dat$V1)

m1 <- glmer(true ~ distance*(consequent+direction+dist)^2 + (direction+dist|V1), dat, family = binomial)

最も単純なプロット(?plot.merMod)は以下を生成します。

plot(m1)

ここに画像の説明を入力してください

これはすでに何か教えてくれますか?


1
これに戻ってクラックを取る時間を見つけるかもしれませんが、一般的な答えは、バイナリモデルからの残差を多く処理することは難しいと思います。これまでの私の主な発見は、上記のプロットを少し拡大して、平滑化された線を追加することです(type=c("p","smooth")in を使用するplot.merModか、ggplot信頼区間が必要な場合に移動します)。別のリンク機能を採用することで修正できる場合があります。それは...これまでのところ、それをだ
ベンBolker

@BenBolkerありがとう。そして、質問への回答として、これとフリーコノミクスへのリンクを投稿することはできませんか?そうすれば、少なくとも150ポイントを獲得できます。
ヘンリック

3
このCVスレッドstats.stackexchange.com/questions/63566/…が非常に役立つことがわかりました。この投稿では、Rでビン化残差プロットを作成する方法について説明します。
Nova 14

@Henrikモデルの仕組みを教えてくださいtrue ~ distance*(consequent+direction+dist)^2 + (direction+dist|V1)。モデルの所与の間の相互作用の推定ウィルdistance*consequentdistance*directiondistance*distとの傾きdirectiondist に応じて変化しますかV1?の四角は何を(consequent+direction+dist)^2示していますか?
ABC

@Henrik私はあなたのコードを実行し、それが表示されWarning message: In checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv, : Model failed to converge with max|grad| = 0.123941 (tol = 0.001, component 1)ます。どうして ?
ABC

回答:


18

より良い時間がないので、短い答え:これは挑戦的な問題です。バイナリデータは、ほとんどの場合、適合度を評価するために何らかのビニングまたはスムージングが必要です。使用する幾分有用だったfortify.lmerMod(からlme4に関連して実験的)ggplot2、特にgeom_smooth()(本質的に上記の持っている同じ残留VS-フィットプロットを描くことが、信頼区間で(私はまた、Yが上にズームするビットを制限狭め-5,5)地域)。これは、リンク機能を調整することで改善できるいくつかの体系的なバリエーションを示唆しています。(他の予測子に対して残差をプロットしようとしましたが、あまり有用ではありませんでした。)

モデルをすべての3方向の相互作用で近似しようとしましたが、逸脱や平滑化された残差曲線の形状の改善はあまりありませんでした。

ロジスティックバツλλ

## uses (fragile) internal C calls for speed; could use plogis(),
##  qlogis() for readability and stability instead
logitpower <- function(lambda) {
    L <- list(linkfun=function(mu)
              .Call(stats:::C_logit_link,mu^(1/lambda),PACKAGE="stats"),
              linkinv=function(eta)
              .Call(stats:::C_logit_linkinv,eta,PACKAGE="stats")^lambda,
              mu.eta=function(eta) {
                  mu <-  .Call(stats:::C_logit_linkinv,eta,PACKAGE="stats")
                  mu.eta <-  .Call(stats:::C_logit_mu_eta,eta,PACKAGE="stats")
                  lambda*mu^(lambda-1)*mu.eta
              },
              valideta = function(eta) TRUE ,
              name=paste0("logit-power(",lambda,")"))
    class(L) <- "link-glm"
    L
}

λ

参照:http : //freakonometrics.hypotheses.org/8210


3

これは生物統計学/疫学コースでは非常に一般的なテーマであり、基本的にモデルの性質上、それに対する非常に良い解決策はありません。多くの場合、解決策は、残差を使用した詳細な診断を回避することです。

ベンはすでに、診断にはしばしばビニングまたはスムージングが必要であると書いています。残差のビニングは、Rパッケージアームで利用可能です(または利用可能でした)。たとえば、このスレッドを参照してください。さらに、予測された確率を使用するいくつかの作業があります。1つの可能性はこのスレッドで以前に議論された分離プロットです。それらはあなたのケースでは直接助けになるかもしれませんが、解釈を助けるかもしれません。


-1

残差プロットの代わりにAICを使用して、モデルの適合性をチェックできます。Rのコマンド:AIC(model1)それはあなたに番号を与える...だから、これを別のモデルと比較する必要がある 2つの出力を比較すると、AIC値が低いモデルが必要になります。

ちなみに、AICや対数尤度比などは、glmerモデルの概要を取得するときに既にリストされており、どちらもモデルの適合に関する有用な情報を提供します。帰無仮説を棄却するために、対数尤度比に大きな負の数値が必要です。


3
OPが競合モデルを比較しようとしている場合、これはより便利ですが、それが彼らがやろうとしていることではないようで、AICを使用して絶対モデル適合を評価することはできません。
パトリッククーロン

-3

適合対残差プロットは、(明確な)パターンを表示しないはずです。このプロットは、モデルがデータでうまく機能しないことを示しています。http://www.r-bloggers.com/model-validation-interpreting-residual-plots/を参照してください


1
あなたは間違っていると思う、特定のパターンはリンク関数によって予測されます:stats.stackexchange.com/q/25068/442
Henrik

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.