如何评估装有lme4(> 1.0)的二项式GLMM的拟合度?


19

我有一个具有二项式分布和logit链接函数的GLMM,并且我觉得模型中没有很好地表示数据的重要方面。

为了测试这一点,我想知道数据是否通过对数刻度上的线性函数很好地描述了。因此,我想知道残差是否良好。但是,我无法确定要在哪个残差图上绘制以及如何解释该图。

请注意,我正在使用lme4的新版本(来自GitHub的开发版本):

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

我的问题是:如何使用logit链接函数检查和解释二项式广义线性混合模型的残差?

以下数据仅代表我实际数据的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")plot.merMod,或者移动到ggplot,如果你想置信区间)是,它看起来像有一个小而显著模式,你也许可以通过采用其他链接功能来修复。到此为止...
Ben Bolker

@BenBolker谢谢。而且,您是否可以不只是发布此内容以及指向freakonomics的链接来回答问题?然后至少您将获得150分。
亨里克

3
我发现这个CV线程stats.stackexchange.com/questions/63566/…非常有用。帖子说明了如何在R中创建装箱残差图
Nova

@Henrik您能否解释一下该模型如何true ~ distance*(consequent+direction+dist)^2 + (direction+dist|V1)工作?威尔之间的互动模式给予估计distance*consequentdistance*directiondistance*dist和斜率direction,并dist 与不定V1?正方形(consequent+direction+dist)^2表示什么?
美国广播公司

@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)。为什么呢
美国广播公司

Answers:


18

简短的回答,因为我没有时间做得更好:这是一个充满挑战的问题;二进制数据几乎总是需要某种合并或平滑处理才能评估拟合优度。结合使用fortify.lmerMod(来自lme4实验)ggplot2,特别geom_smooth()是画出与您上面具有的相同的残差拟合图,但有置信区间(我也缩小了y界限以放大( -5,5)区域)。这表明可以通过调整链接功能来改善一些系统的变化。(我还尝试过针对其他预测变量绘制残差,但这并不是很有用。)

我尝试将模型与所有3向相互作用进行拟合,但无论是在偏差还是在平滑残差曲线的形状上,都没有太大的改善。

后勤Xλλ

## 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

这是生物统计学/流行病学课程中非常常见的主题,并且由于模型的本质,目前还没有很好的解决方案。通常的解决方案是避免使用残差进行详细的诊断。

Ben已经写道,诊断通常需要合并或平滑。R包臂中有(或曾经有)残差分箱,请参见此线程。另外,有些工作使用了预测的概率。一种可能性是本主题前面讨论的分离图。这些可能会或可能不会直接对您的情况有所帮助,但可能会有助于解释。


-1

您可以使用AIC代替残差图来检查模型的拟合度。R中的命令:AIC(model1),它将为您提供一个数字...因此,您需要将此与另一个模型(例如,具有更多预测变量的)进行比较-AIC(model2),它将产生另一个数字。比较两个输出,您将需要具有较低AIC值的模型。

顺便说一句,当您获得glmer模型的摘要时,已经列出了诸如AIC和对数似然比之类的信息,并且两者都将为您提供有关模型拟合的有用信息。您希望对数似然比有一个较大的负数以拒绝原假设。


3
如果OP试图比较竞争模型,这将更加有用,但是这似乎并不是他们正在试图做的事情,并且AIC不能用于评估绝对模型拟合。
Patrick Coulombe

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.