繁体   English   中英

如何在混合效应模型中获得系数及其置信区间?

[英]How to get coefficients and their confidence intervals in mixed effects models?

lmglm模型中,我使用函数coefconfint来实现目标:

m = lm(resp ~ 0 + var1 + var1:var2) # var1 categorical, var2 continuous
coef(m)
confint(m)

现在我向模型添加了随机效应 - 使用混合效应模型使用 lme4 包中的lmer函数。 但是,函数coefconfint对我来说不再起作用了!

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

有两个新包lmerTestlsmeans ,它们可以计算lmerglmer输出的 95% 置信限度。 也许你可以看看那些? coefplot2 ,我认为也可以做到这一点(尽管正如 Ben 在下面指出的那样,以一种不太复杂的方式,来自 Wald 统计数据的标准错误,而不是lmerTestlsmeans中使用的 Kenward-Roger 和/或 Satterthwaite df 近似值)...遗憾的是,包lsmeans中仍然没有内置绘图工具(因为包effects()中有,顺便说一下,它还返回lmerglmer对象的 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) CI
  • 添加conf.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)

我建议使用sjPlot包中的tab_model()函数作为替代。 干净且可读的输出准备降价。 此处参考和 此处示例。

对于那些更倾向于视觉的plot_model()来自同一个包的人也可能会派上用场。

替代解决方案是使用model_parameters() 函数通过parameters

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM