lmer 模型使用哪种多重比较方法:lsmeans 还是 glht?

机器算法验证 r 重复测量 多重比较 事后 lsmeans
2022-02-05 21:42:38

我正在使用具有一个固定效应(条件)和两个随机效应(参与者由于主题设计和配对)的混合效应模型分析数据集。该模型是使用lme4包生成的:exp.model<-lmer(outcome~condition+(1|participant)+(1|pair),data=exp).

接下来,我对没有固定效应(条件)的模型进行了该模型的似然比检验,并有显着差异。我的数据集中有 3 个条件,所以我想进行多重比较,但我不确定使用哪种方法我在 CrossValidated 和其他论坛上发现了许多类似的问题,但我仍然很困惑。

据我所见,人们建议使用

1.lsmeans-lsmeans(exp.model,pairwise~condition)它给了我以下输出:

condition     lsmean         SE    df  lower.CL  upper.CL
 Condition1 0.6538060 0.03272705 47.98 0.5880030 0.7196089
 Condition2 0.7027413 0.03272705 47.98 0.6369384 0.7685443
 Condition3 0.7580522 0.03272705 47.98 0.6922493 0.8238552

Confidence level used: 0.95 

$contrasts
 contrast                   estimate         SE    df t.ratio p.value
 Condition1 - Condition2 -0.04893538 0.03813262 62.07  -1.283  0.4099
 Condition1 - Condition3 -0.10424628 0.03813262 62.07  -2.734  0.0219
 Condition2 - Condition3 -0.05531090 0.03813262 62.07  -1.450  0.3217

P value adjustment: tukey method for comparing a family of 3 estimates 

2.包的multcomp两种不同方式——使用mcp glht(exp.model,mcp(condition="Tukey"))导致

     Simultaneous Tests for General Linear Hypotheses

Multiple Comparisons of Means: Tukey Contrasts


Fit: lmer(formula = outcome ~ condition + (1 | participant) + (1 | pair), 
    data = exp, REML = FALSE)

Linear Hypotheses:
                             Estimate Std. Error z value Pr(>|z|)  
Condition2 - Condition1 == 0  0.04894    0.03749   1.305    0.392  
Condition3 - Condition1 == 0  0.10425    0.03749   2.781    0.015 *
Condition3 - Condition2 == 0  0.05531    0.03749   1.475    0.303  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Adjusted p values reported -- single-step method)

并使用lsm glht(exp.model,lsm(pairwise~condition))导致

Note: df set to 62

     Simultaneous Tests for General Linear Hypotheses

Fit: lmer(formula = outcome ~ condition + (1 | participant) + (1 | pair), 
    data = exp, REML = FALSE)

Linear Hypotheses:
                             Estimate Std. Error t value Pr(>|t|)  
Condition1 - Condition2 == 0 -0.04894    0.03749  -1.305   0.3977  
Condition1 - Condition3 == 0 -0.10425    0.03749  -2.781   0.0195 *
Condition2 - Condition3 == 0 -0.05531    0.03749  -1.475   0.3098  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Adjusted p values reported -- single-step method)

如您所见,这些方法给出了不同的结果。这是我第一次使用 R 和 stats,所以可能出了点问题,但我不知道在哪里。我的问题是:

提出的方法之间有什么区别?我在一个相关问题的答案中读到它是关于自由度(lsmeansvs. glht)的。 是否有一些规则或建议何时使用哪一种,即方法 1 适合这种类型的数据集/模型等? 我应该报告哪个结果?在不知道更好的情况下,我可能只是去报告我得到的最高 p 值以确保安全,但如果有更好的理由会很好。谢谢

2个回答

不是一个完整的答案...

与其他两种方法的区别在于glht(myfit, mcp(myfactor="Tukey")),这种方法使用“z”统计量(正态分布),而其他方法使用“t”统计量(学生分布)。“z”统计量与具有无限自由度的“t”统计量相同。这种方法是一种渐近方法,它提供的 p 值和置信区间比其他方法更小。如果数据集很小,p 值可能太小,置信区间可能太短。

当我运行时lsmeans(myfit, pairwise~myfactor)出现以下消息:

Loading required namespace: pbkrtest

这意味着lsmeans(对于lmer模型)使用pbkrtest实现 Kenward & Rogers 方法的包来获取“t”统计量的自由度。这种方法旨在提供比渐近方法更好的 p 值和置信区间(自由度很大时没有区别)。

现在,关于 和 之间的区别lsmeans(myfit, pairwise~myfactor)$contrastsglht(myfit, lsm(pairwise~factor)我刚刚做了一些测试,我的观察结果如下:

  • lsmlsmeans包和multcomp包之间的接口(参见?lsm

  • 对于平衡的设计,结果之间没有区别

  • 对于不平衡的设计,我观察到结果之间的微小差异(标准误差和 t 比率)

不幸的是,我不知道这些差异的原因是什么。看起来lsm调用lsmeans只是为了得到线性假设矩阵和自由度,但lsmeans使用不同的方法来计算标准误差。

(这个答案突出了上面@RussLenth 的一条评论中已经存在的一些信息)

在“z”与“t”统计量的差异可以忽略不计的情况下(即在无限数量的观察范围内),调用lsmeansmultcomp使用多重比较的默认处理也会给出不同的结果,因为默认情况下它们使用不同的方法(tukey 与单步)。要消除这种差异lsmeans并且multcomp需要使用相同的多重比较方法(例如无)调用:lsmeans(exp.model,pairwise~condition, adjust='none')summary(glht(exp.model,mcp(condition="Tukey")),test=adjusted(type="none"))