使用 lme4 的混合效应模型中交互项的 P 值

机器算法验证 r 混合模式 p 值 lme4-nlme
2022-03-19 03:48:27

我正在使用lme4in分析一些行为数据R,主要遵循Bodo Winter 的优秀教程,但我不明白我是否正确处理交互。更糟糕的是,参与这项研究的其他人都没有使用混合模型,所以在确保事情正确时我有点飘忽不定。

与其只是发出呼救声,我认为我应该尽我最大的努力来解释问题,然后请求你们集体更正。其他一些方面是:

  • 在写作时,我发现了这个问题,表明nlme更直接地为交互项给出 p 值,但我认为询问与 的关系仍然有效lme4
  • Livius'这个问题的回答提供了很多额外阅读的链接,我将在接下来的几天内尝试完成这些阅读,所以我会对带来的任何进展发表评论。

在我的数据中,我有一个因变量dv,一个condition操作(0 = 控制,1 = 实验条件,这应该导致更高的dv),还有一个先决条件,标记为appropriate1为此编码的试验应该显示效果,但试验编码0可能不是,因为缺少一个关键因素。

我还包括了两个随机截距, forsubject和 for target,反映了dv每个受试者中的相关值,以及解决的 14 个问题中的每个问题(每个参与者解决了每个问题的控制版本和实验版本)。

library(lme4)
data = read.csv("data.csv")

null_model        = lmer(dv ~ (1 | subject) + (1 | target), data = data)
mainfx_model      = lmer(dv ~ condition + appropriate + (1 | subject) + (1 | target),
                         data = data)
interaction_model = lmer(dv ~ condition + appropriate + condition*appropriate +
                              (1 | subject) + (1 | target), data = data)
summary(interaction_model)

输出:

## Linear mixed model fit by REML ['lmerMod']
## ...excluded for brevity....
## Random effects:
##  Groups   Name        Variance Std.Dev.
##  subject  (Intercept) 0.006594 0.0812  
##  target   (Intercept) 0.000557 0.0236  
##  Residual             0.210172 0.4584  
## Number of obs: 690, groups: subject, 38; target, 14
## 
## Fixed effects:
##                                Estimate Std. Error t value
## (Intercept)                    0.2518     0.0501    5.03
## conditioncontrol               0.0579     0.0588    0.98
## appropriate                   -0.0358     0.0595   -0.60
## conditioncontrol:appropriate  -0.1553     0.0740   -2.10
## 
## Correlation of Fixed Effects:
## ...excluded for brevity.

然后,ANOVA 显示出interaction_model比 更好的拟合mainfx_model,据此我得出结论,存在显着的交互作用 (p = .035)。

anova(mainfx_model, interaction_model)

输出:

## ...excluded for brevity....
##                   Df AIC BIC logLik deviance Chisq Chi Df Pr(>Chisq)  
## mainfx_model       6 913 940   -450      901                          
## interaction_model  7 910 942   -448      896  4.44      1      0.035 *
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

从那里,我分离出appropriate满足要求的数据子集(即appropriate = 1是一个重要的预测指标。conditioncondition

good_data = data[data$appropriate == 1, ]
good_null_model   = lmer(dv ~ (1 | subject) + (1 | target), data = good_data)
good_mainfx_model = lmer(dv ~ condition + (1 | subject) + (1 | target), data = good_data)

anova(good_null_model, good_mainfx_model)

输出:

## Data: good_data
## models:
## good_null_model: dv ~ (1 | subject) + (1 | target)
## good_mainfx_model: dv ~ condition + (1 | subject) + (1 | target)
##                   Df AIC BIC logLik deviance Chisq Chi Df Pr(>Chisq)  
## good_null_model    4 491 507   -241      483                          
## good_mainfx_model  5 487 507   -238      477  5.55      1      0.018 *
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
2个回答

我看这里没有太多可说的。我认为你做得很好。

人们讨论了几种方法来测试效果并获得复杂混合效果模型的 p 值。这里有一个很好的概述最好的方法是使用计算密集型方法(自举或贝叶斯方法),但这对大多数人来说更先进。第二好的(也是最方便的)方法是使用似然比检验。这就是anova()(技术上?anova.merMod())正在做的事情。重要的是只使用与完全最大似然拟合的模型的似然比检验,而不是限制最大似然。(REML)。另一方面,对于您的最终模型和解释,您希望使用 REML。这让很多人感到困惑。在您的输出中,我们看到您使用 REML 拟合了您的模型(这是因为该选项TRUE默认设置为 in lmer()。这意味着您的测试无效,但是,因为这是一个常见的错误,anova.merMod()包含一个refit由默认设置为TRUE,您没有更改它。所以包开发人员的远见将您保存在那里。

关于您打开交互的策略,您所做的很好。请记住,交互使用所有数据进行测试。可能有显着的交互作用,但分层测试都不显着,这使一些人感到困惑。(不过,这似乎并没有发生在你身上。)

我自己是新手,并遵循 Zuur 等人的建议。我lmenlme包中使用,而不是lme4在需要向其他线性模型添加分层错误结构时使用。我的反应可能有点不对劲。

两条评论:

(1) 我不确定仅condition在子集中进行测试是否有意义appropriate==1如果你想获得主效应的 p 值,你可以使用Anova'car' 包:

require(car)
Anova(M,type="III")# type III Sum of Squares. M was fitted using method=REML

如果您想解决交互,您可以直接运行配对比较 (?) 或在两个子集上执行您所做的操作(即也与子集 where appropriate==0)。

(2) 你可能想先选择你的错误结构,而不是假设(1 | subject) + (1 | target)是最好的错误结构。从你写的内容来看,我认为这condition是一个主题内因素,而appropriate要么是一个主题间因素,要么是一个目标间因素。您可能希望为主体内和/或目标内因子添加斜率,例如:为主dv ~ condition + appropriate + (1+condition | subject) + (1 | target)体内因子添加随机斜率condition受试者/目标之间的因素不需要斜率。

干杯