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

时间:2012-06-17 15:36:04

标签: r lme4 random-effects mixed-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)......您怎么看?

7 个答案:

答案 0 :(得分:12)

有两个新软件包lmerTestlsmeans可以计算lmerglmer输出的95%置信区间限制。也许你可以看看那些?而coefplot2,我认为也可以这样做(尽管Ben在下面以不太复杂的方式指出Wald统计数据的标准误差,而不是使用Kenward-Roger和/或Satterthwaite df近似值在lmerTestlsmeans)中......遗憾的是,在lsmeans包中仍然没有内置的绘图工具(正如包effects()中一样,btw也会返回对lmerglmer个对象的95%置信限制,但是通过重新设置没有任何随机因素的模型来实现这一点,这显然是不正确的。)

答案 1 :(得分:8)

我建议你使用好的老lme(包nlme)。它有一些特权,如果你需要对比,那么就有一系列的选择(在gmodels中可以估算,对比中的对比,在multcomp中的glht)。

为什么lmer中缺少p值和confint:请参阅http://finzi.psych.upenn.edu/R/Rhelp02a/archive/76742.html

答案 2 :(得分:7)

假设固定效应的正常近似值(也可以进行配置),我们可以通过

获得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

答案 3 :(得分:6)

不确定何时添加,但现在confint()在lme4中实现。 例如,以下示例有效:

library(lme4)
m = lmer(Reaction ~ Days + (Days | Subject), sleepstudy)
confint(m)

答案 4 :(得分:3)

我要在这里补充一点。如果 m 是拟合的 (g)lmer 模型(其中大部分也适用于 lme):

  • fixef(m) 是从混合模型中提取系数的规范方法(此约定从 nlme 开始,并延续到 lme4
  • 你可以用coef(summary(m))得到完整的系数表;如果您在拟合模型之前加载了 lmerTest,或者在拟合后通过 lmerTest 转换模型(然后加载 coef(summary(as(m,"merModLmerTest")))),则系数表将包含 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") 获得置信区间,这种方法速度较慢,但​​在某些情况下更准确。

答案 5 :(得分:1)

要查找系数,您只需使用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)

答案 6 :(得分:1)

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

对于来自同一包装的plot_model()更具视觉倾斜度的人也可能会派上用场。

替代解决方案是使用parameters package通过model_parameters() function