通过效果包对lmer对象的置信区间的可信度如何?


36

Effects提供了一种非常快速和方便的方式来绘制通过lme4获得的线性混合效应模型结果。该effect函数可以非常快速地计算置信区间(CI),但是这些置信区间的可信度如何?

例如:

library(lme4)
library(effects)
library(ggplot)

data(Pastes)

fm1  <- lmer(strength ~ batch + (1 | cask), Pastes)
effs <- as.data.frame(effect(c("batch"), fm1))
ggplot(effs, aes(x = batch, y = fit, ymin = lower, ymax = upper)) + 
  geom_rect(xmax = Inf, xmin = -Inf, ymin = effs[effs$batch == "A", "lower"],
        ymax = effs[effs$batch == "A", "upper"], alpha = 0.5, fill = "grey") +
  geom_errorbar(width = 0.2) + geom_point() + theme_bw()

在此处输入图片说明

根据使用effects包装计算的配置项,批次“ E”与批次“ A”不重叠。

如果我尝试使用confint.merMod函数和默认方法相同:

a <- fixef(fm1)
b <- confint(fm1)
# Computing profile confidence intervals ...
# There were 26 warnings (use warnings() to see them)

b <- data.frame(b)
b <- b[-1:-2,]

b1 <- b[[1]]
b2 <- b[[2]]

dt <- data.frame(fit   = c(a[1],  a[1] + a[2:length(a)]), 
                 lower = c(b1[1],  b1[1] + b1[2:length(b1)]), 
                 upper = c(b2[1],  b2[1] + b2[2:length(b2)]) )
dt$batch <- LETTERS[1:nrow(dt)]

ggplot(dt, aes(x = batch, y = fit, ymin = lower, ymax = upper)) +
  geom_rect(xmax = Inf, xmin = -Inf, ymin = dt[dt$batch == "A", "lower"], 
        ymax = dt[dt$batch == "A", "upper"], alpha = 0.5, fill = "grey") + 
  geom_errorbar(width = 0.2) + geom_point() + theme_bw()

在此处输入图片说明

我看到所有配置项重叠。我还收到警告,表明该函数无法计算可信赖的配置项。这个示例以及我的实际数据集,使我怀疑effects包在CI计算中采用了一些捷径,而这些捷径可能并未完全被统计学家所认可。函数从对象返回的配置项的可信度如何?effecteffectslmer

我尝试了什么:在源代码中,我注意到effect函数依赖于Effect.merMod函数,而函数又直接指向Effect.mer函数,如下所示:

effects:::Effect.mer
function (focal.predictors, mod, ...) 
{
    result <- Effect(focal.predictors, mer.to.glm(mod), ...)
    result$formula <- as.formula(formula(mod))
    result
}
<environment: namespace:effects>

mer.to.glm函数似乎从lmer对象计算方差-协变量矩阵:

effects:::mer.to.glm

function (mod) 
{
...
mod2$vcov <- as.matrix(vcov(mod))
...
mod2
}

反过来,这可能在Effect.default函数中用于计算CI(我可能对这部分有误解):

effects:::Effect.default
...
     z <- qnorm(1 - (1 - confidence.level)/2)
        V <- vcov.(mod)
        eff.vcov <- mod.matrix %*% V %*% t(mod.matrix)
        rownames(eff.vcov) <- colnames(eff.vcov) <- NULL
        var <- diag(eff.vcov)
        result$vcov <- eff.vcov
        result$se <- sqrt(var)
        result$lower <- effect - z * result$se
        result$upper <- effect + z * result$se
...

我对LMM知之甚少,无法判断这是否是正确的方法,但是考虑到有关LMM的置信区间计算的讨论,这种方法似乎很简单。


1
当您的代码行很长时,如果将它们分成多行,我将不胜感激,因此我们无需滚动即可查看全部内容。
rvl

1
@rvl该代码现在应该更具可读性。
2014年

Answers:


52

所有结果基本上都是相同的(对于此特定示例)。理论上的一些差异是:

  • 正如@rvl所指出的那样,在不考虑参数之间的协方差的情况下重构CI就是错误的(抱歉)
  • 为参数的置信区间可以基于沃尔德置信区间(假设二次数似然面): ,,lsmeans ; 除了,这些方法都忽略了有限大小的效果(“自由度”),但是在这种情况下,它几乎没有任何区别(实际上与无穷大没有区别)。effectsconfint(.,method="Wald")lsmeansdf=40df
  • ...或在轮廓置信区间上(默认方法;忽略有限大小的效果,但允许非二次曲面)
  • ...或参数引导时(黄金标准-假设模型正确[响应为正态,随机效应为正态分布,数据为条件独立,等等],但其他假设很少)

我认为所有这些方法都是合理的(有些方法比其他方法更近似),但是在这种情况下,使用哪种方法几乎没有什么区别。如果您担心的话,请尝试对数据或类似于您自己的模拟数据使用几种对比方法,然后看看会发生什么...

(PS:我不会对A和的置信区间E不重叠的事实给予过多的重视。您必须执行适当的成对比较过程,才能可靠地推断出这对特定估计对之间的差异。 ..)

95%CI:

在此处输入图片说明

比较代码:

library(lme4)
fm2 <- lmer(strength ~ batch - 1 + (1 | cask), Pastes)
c0 <- confint(fm2,method="Wald")
c1 <- confint(fm2)
c2 <- confint(fm2,method="boot")
library(effects)
library(lsmeans)
c3 <- with(effect("batch",fm2),cbind(lower,upper))
c4 <- with(summary(lsmeans(fm2,spec="batch")),cbind(lower.CL,upper.CL))
tmpf <- function(method,val) {
    data.frame(method=method,
               v=LETTERS[1:10],
               setNames(as.data.frame(tail(val,10)),
                        c("lwr","upr")))
}
library(ggplot2); theme_set(theme_bw())
allCI <- rbind(tmpf("lme4_wald",c0),
      tmpf("lme4_prof",c1),
      tmpf("lme4_boot",c2),
      tmpf("effects",c3),
               tmpf("lsmeans",c4))
ggplot(allCI,aes(v,ymin=lwr,ymax=upr,colour=method))+
    geom_linerange(position=position_dodge(width=0.8))

ggsave("pastes_confint.png",width=10)

2
我接受这个答案,因为它很正确,并且可以对不同方法进行很好的比较。但是,请查看rlv的出色答案以获取更多信息。
Mikko 2014年

感谢您的出色回答。我是否正确理解,一个人不能使用配置项来比较组/批次,但是可以比较效果。假设我有两种治疗方法,几个人,一个人内有几次测量。我将个体用作随机效应,因为每个个体都包含x个测量值。然后,我想知道这两种治疗是否产生了不同的反应。effects在这种情况下,我可以使用包和CI重叠吗?
Mikko 2014年

5
这是一个更普遍的问题,与任何基于标准模型的方法有关。可能值得一个单独的问题。(1)通常,回答有关处理之间差异的问题的方法是建立模型,以使焦点处理之间的差异为模型中的对比度(即估计参数),然后计算p值或检查特定alpha级别的置信区间是否包括零。(续)
Ben Bolker 2014年

4
(2)重叠的配置项充其量是参数之间差异的保守且近似的标准(关于此主题有几篇已发表的论文)。(3)成对比较存在一个单独的/正交的问题,即必须适当地控制比较的多重性和非独立性(例如,可以通过multcomp包装中的方法来完成,但是至少需要一个一点点护理)
Ben Bolker 2014年

1
为了什么?您可能想问一个新问题。
本·博克

20

看来您在第二种方法中所做的工作是为回归系数计算了置信区间,然后对其进行了变换以获得预测的CI。这忽略了回归系数之间的协方差。

尝试在没有截距的情况下拟合模型,以使batch效果实际上是预测,并confint返回您需要的间隔。

附录1

我完全按照我上面的建议做了:

> fm2 <- lmer(strength ~ batch - 1 + (1 | cask), Pastes)
> confint(fm2)
Computing profile confidence intervals ...
           2.5 %    97.5 %
.sig01  0.000000  1.637468
.sigma  2.086385  3.007380
batchA 60.234772 64.298581
batchB 57.268105 61.331915
batchC 60.018105 64.081915
batchD 57.668105 61.731915
batchE 53.868105 57.931915
batchF 59.001439 63.065248
batchG 57.868105 61.931915
batchH 61.084772 65.148581
batchI 56.651439 60.715248
batchJ 56.551439 60.615248

这些间隔似乎与的结果一致effects

附录2

另一个选择是lsmeans软件包。它从pbkrtest包中获得自由度和调整后的协方差矩阵。

> library("lsmeans")
> lsmeans(fm1, "batch")
Loading required namespace: pbkrtest
 batch   lsmean       SE    df lower.CL upper.CL
 A     62.26667 1.125709 40.45 59.99232 64.54101
 B     59.30000 1.125709 40.45 57.02565 61.57435
 C     62.05000 1.125709 40.45 59.77565 64.32435
 D     59.70000 1.125709 40.45 57.42565 61.97435
 E     55.90000 1.125709 40.45 53.62565 58.17435
 F     61.03333 1.125709 40.45 58.75899 63.30768
 G     59.90000 1.125709 40.45 57.62565 62.17435
 H     63.11667 1.125709 40.45 60.84232 65.39101
 I     58.68333 1.125709 40.45 56.40899 60.95768
 J     58.58333 1.125709 40.45 56.30899 60.85768

Confidence level used: 0.95 

effecteffectconfint±1.96×se

的结果effectlsmeans相似,但在多因素不平衡的情况下,lsmeans默认情况下对权重相等的未使用因素进行平均,而effect权重由观察到的频率(可作为中的选项lsmeans)提供。


谢谢您的解决方案。时间间隔现在更加相似,尽管不完全相同。您的答案仍然无法回答对象是否effects可以信任包中的配置项lmer。我正在考虑在出版物中使用结果,并希望确保使用批准的LMM方法来计算CI。
2014年

请问:在附录1的前两个参数中.sig01.sigma由产生的confint那些是方差的置信区间吗?还是标准差的置信区间 ?
美国广播公司

对于模型中以这种方式标记的任何参数,它们都是CI。您应该查看文档以lmer获取明确的答案。但是,人们通常使用符号sigma来表示标准偏差sigma.squaresigma^2表示方差。
rvl 2015年

使用lmertest,lsmeans还是mertools更好?
skan,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.