[英]Post-hoc test for glmer
我正在使用广义线性混合模型(glmer,lme4-package)用R分析我的二项式数据集。 我想使用Tukey的事后测试(glht,multcomp-package)对某个固定效果(“声音”)进行成对比较。
它的大部分工作正常,但是我的一个固定效果变量(“ SoundC”)根本没有方差(“ 1”是96倍,“ 0”是0倍),看来Tukey的测试无法处理。 使用此“ SoundC”的所有成对比较得出的p值均为1.000,而有些显然很重要。
作为验证,我将96个“ 1”中的一个更改为“ 0”,此后,我又得到了正常的p值,并且在我期望的位置有明显的差异,而在手动更改后,差异实际上变小了。
有人有解决方案吗? 如果不是,可以使用修改后的数据集的结果并报告我的手动更改吗?
可重现的示例:
Response <- c(1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,1,1,0,
0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,
1,1,0,1,1,0,1,1,1,1,0,0,1,1,0,1,1,0,1,1,0,1,1,0,1)
Data <- data.frame(Sound=rep(paste0('Sound',c('A','B','C')),22),
Response,
Individual=rep(rep(c('A','B'),2),rep(c(18,15),2)))
# Visual
boxplot(Response ~ Sound,Data)
# Mixed model
library (lme4)
model10 <- glmer(Response~Sound + (1|Individual), Data, family=binomial)
# Post-hoc analysis
library (multcomp)
summary(glht(model10, mcp(Sound="Tukey")))
这是一个交叉验证问题。 您肯定会看到完全分离 ,其中您的响应可以完美地划分为0对1的结果。 这导致(1)参数的无限值(由于计算不完善,它们仅被列为非无限值),以及(2)Wald标准错误的疯狂/无用值和相应的$ p $值(这就是您所需要的)在这里看到)。 这里 , 这里和这里都给出了讨论和解决方案,但是我将在下面进行更多说明。
暂时让您感到不满意:无论如何,您真的不应该尝试只设置3个级别的随机效果(请参见例如http://glmm.wikidot.com/faq )...
出生校正的逻辑回归:
library(logistf)
L1 <- logistf(Response~Sound*Individual,data=Data,
contrasts.arg=list(Sound="contr.treatment",
Individual="contr.sum"))
coef se(coef) p
(Intercept) 3.218876e+00 1.501111 2.051613e-04
SoundSoundB -4.653960e+00 1.670282 1.736123e-05
SoundSoundC -1.753527e-15 2.122891 1.000000e+00
IndividualB -1.995100e+00 1.680103 1.516838e-01
SoundSoundB:IndividualB 3.856625e-01 2.379919 8.657348e-01
SoundSoundC:IndividualB 1.820747e+00 2.716770 4.824847e-01
现在,标准误差和p值是合理的(A与C比较的p值为1,因为实际上没有差异...)
先验条件弱的混合贝叶斯模型:
library(blme)
model20 <- bglmer(Response~Sound + (1|Individual), Data, family=binomial,
fixef.prior = normal(cov = diag(9,3)))
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 1.711485 2.233667 0.7662221 4.435441e-01
## SoundSoundB -5.088002 1.248969 -4.0737620 4.625976e-05
## SoundSoundC 2.453988 1.701674 1.4421024 1.492735e-01
固定效果方差-协方差矩阵的规格diag(9,3)
产生
$$ \\ left(\\ begin {array} {ccc} 9&0&0 \\ 0&9&0 \\ 0&0&9 \\ end {array} \\ right)$$
换句话说,3表示矩阵的维数(等于固定效果参数的数量),9表示方差-这对应于标准偏差3或大约$ \\ pm的95%范围6 $,对于logit缩放的响应来说是很大/弱/没有信息。
这些大致一致(模型有很大不同)
library(multcomp)
summary(glht(model20, mcp(Sound="Tukey")))
## Estimate Std. Error z value Pr(>|z|)
## SoundB - SoundA == 0 -5.088 1.249 -4.074 0.000124 ***
## SoundC - SoundA == 0 2.454 1.702 1.442 0.309216
## SoundC - SoundB == 0 7.542 1.997 3.776 0.000397 ***
就像我上面说的,在这种情况下,我不建议使用混合模型...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.