[英]How to get coefficients and their confidence intervals in mixed effects models?
在lm
和glm
模型中,我使用函数coef
和confint
来实现目标:
m = lm(resp ~ 0 + var1 + var1:var2) # var1 categorical, var2 continuous
coef(m)
confint(m)
现在我向模型添加了随机效应 - 使用混合效应模型使用 lme4 包中的lmer
函数。 但是,函数coef
和confint
对我来说不再起作用了!
> mix1 = lmer(resp ~ 0 + var1 + var1:var2 + (1|var3))
# var1, var3 categorical, var2 continuous
> coef(mix1)
Error in coef(mix1) : unable to align random and fixed effects
> confint(mix1)
Error: $ operator not defined for this S4 class
我试图用谷歌搜索并使用文档,但没有结果。 请指出正确的方向。
编辑:我也在考虑这个问题是否更适合https://stats.stackexchange.com/但我认为它比统计更技术,所以我得出结论它最适合这里(SO)......你怎么看?
不确定它是什么时候添加的,但现在 confint() 是在 lme4 中实现的。 例如,以下示例有效:
library(lme4)
m = lmer(Reaction ~ Days + (Days | Subject), sleepstudy)
confint(m)
有两个新包lmerTest和lsmeans ,它们可以计算lmer
和glmer
输出的 95% 置信限度。 也许你可以看看那些? 和coefplot2 ,我认为也可以做到这一点(尽管正如 Ben 在下面指出的那样,以一种不太复杂的方式,来自 Wald 统计数据的标准错误,而不是lmerTest
和lsmeans
中使用的 Kenward-Roger 和/或 Satterthwaite df 近似值)...遗憾的是,包lsmeans
中仍然没有内置绘图工具(因为包effects()
中有,顺便说一下,它还返回lmer
和glmer
对象的 95% 置信限度,但是通过重新拟合模型来实现,没有任何的随机因素,这显然是不正确的)。
我建议你使用旧的 lme(在包 nlme 中)。 它有confint,如果你需要对比的confint,有一系列的选择(gmodels中estimable,contrasts中contrast,multcomp中glht)。
为什么 lmer 中不存在 p 值和 confint:请参阅http://finzi.psych.upenn.edu/R/Rhelp02a/archive/76742.html 。
假设固定效应的正态近似(confint 也会这样做),我们可以通过以下方式获得 95% 的置信区间
估计 + 1.96* 标准误差。
以下内容不适用于方差分量/随机效应。
library("lme4")
mylm <- lmer(Reaction ~ Days + (Days|Subject), data =sleepstudy)
# standard error of coefficient
days_se <- sqrt(diag(vcov(mylm)))[2]
# estimated coefficient
days_coef <- fixef(mylm)[2]
upperCI <- days_coef + 1.96*days_se
lowerCI <- days_coef - 1.96*days_se
我要在这里补充一点。 如果m
是拟合的(g)lmer
模型(其中大部分也适用于lme
):
fixef(m)
是从混合模型中提取系数的规范方法(该约定从nlme
开始并延续到lme4
)coef(summary(m))
获得完整的系数表; 如果您在拟合模型之前加载lmerTest
,或在拟合后通过coef(summary(as(m,"merModLmerTest")))
转换模型(然后加载lmerTest
),则系数表将包含 p 值。 (系数表是一个矩阵;您可以通过例如ctab[,"Estimate"]
, ctab[,"Pr(>|t|)"]
提取列,或将矩阵转换为数据框并使用$
-indexing .)confint(m)
获得似然概况置信区间; 这些可能是计算密集型的。 如果您使用confint(m, method="Wald")
,您将获得标准的 +/- 1.96SE 置信区间。 ( lme
使用intervals(m)
而不是confint()
。) 如果你更喜欢使用broom.mixed
:
tidy(m,effects="fixed")
为您提供一个包含估计值、标准误差等的表格。tidy(as(m,"merModLmerTest"), effects="fixed")
(或首先与lmerTest
配合)包括 p 值conf.int=TRUE
给出 (Wald) CIconf.method="profile"
(连同conf.int=TRUE
)给出似然配置文件 CI 您还可以通过参数引导程序 ( method="boot"
) 获得置信区间,这种方法速度相当慢,但在某些情况下更准确。
要找到系数,您可以简单地使用 lme4 的汇总功能
m = lm(resp ~ 0 + var1 + var1:var2) # var1 categorical, var2 continuous
m_summary <- summary(m)
拥有所有系数:
m_summary$coefficient
如果您想要置信区间,请将标准误差乘以 1.96:
CI <- m_summary$coefficient[,"Std. Error"]*1.96
print(CI)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.