34

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

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

lmer现在我在模型中添加了随机效应——使用lme4 包中的函数使用混合效应模型。但是,功能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)......你怎么看?

4

7 回答 7

16

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

library(lme4)
m = lmer(Reaction ~ Days + (Days | Subject), sleepstudy)
confint(m)
于 2017-03-10T20:16:46.627 回答
13

有两个新包lmerTestlsmeans可以计算lmerglmer输出的 95% 置信限。也许你可以看看那些?和coefplot2,我认为也可以做到(尽管正如 Ben 在下面指出的那样,从 Wald 统计数据的标准误差来看,与在和 中使用的 Kenward-Roger 和/或 Satterthwaite df 近似相比,以一种不太复杂的方式lmerTestlsmeans。 .. 遗憾的是 package 中仍然没有内置的绘图设施lsmeans(就像在 packageeffects()中一样,顺便说一句,它还返回 95% 的置信限lmerglmer对象,但是通过重新拟合没有任何随机因素的模型来做到这一点,这显然是不正确)。

于 2013-06-26T20:36:04.687 回答
8

我建议你使用好的旧 lme(在 nlme 包中)。它有 confint,如果你需要对比的 confint,有一系列的选择(在 gmodels 中估计,在对比中对比,在 multcomp 中 glht)。

为什么 lmer 中没有 p 值和限制:请参阅http://finzi.psych.upenn.edu/R/Rhelp02a/archive/76742.html

于 2012-06-17T16:24:29.860 回答
8

假设固定效应的正态近似值(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
于 2012-06-17T18:52:08.637 回答
4

我要在这里补充一点。如果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") 获得置信区间,这在某些情况下速度相当慢但更准确。

于 2021-03-19T23:03:54.693 回答
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)
于 2017-05-23T13:32:07.870 回答
1

我建议tab_model()使用包中的功能sjPlot作为替代方案。干净和可读的输出准备降价。参考这里和例子这里

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

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

于 2020-11-07T19:18:22.287 回答