如何将Afex或汽车ANOVA模型转换为lmer?观察到的变量

时间:2016-05-08 16:22:19

标签: r lme4 anova xtable

afex包中,我们可以找到这个ANOVA分析的例子:

data(obk.long, package = "afex")
# estimate mixed ANOVA on the full design:
# can be written in any of these ways: 

aov_car(value ~ treatment * gender + Error(id/(phase*hour)), data = obk.long,
        observed = "gender")

aov_4(value ~ treatment * gender + (phase*hour|id), data = obk.long,
        observed = "gender")

aov_ez("id", "value", obk.long, between = c("treatment", "gender"), 
       within = c("phase", "hour"), observed = "gender")

我的问题是,如何在lme4中编写相同的模型? 特别是,我不知道如何包括“观察”一词?

如果我只是写

lmer(value ~ treatment * gender + (phase*hour|id), data = obk.long,
     observed = "gender")

我收到错误,告知被观察不是有效选项。

此外,如果我只删除观察到的选项lmer会产生错误:

  

错误:观察次数(= 240)< =期间随机效应数(= 240)(阶段*小时| id);随机效应参数和残差方差(或尺度参数)可能无法识别。

在lmer语法中,我指定“between”或“within”变量?据我所知,你只需在左侧编写因变量,在右侧编写所有其他变量,将误差项写为(1 | id)。

包“car”使用idata作为主题内变量。

2 个答案:

答案 0 :(得分:3)

正如Ben Bolker所说,只需离开observed即可。

此外,我不建议你做你想做的事。在每个参与者的每个设计单元格内使用混合模型进行数据集而不进行复制有点值得怀疑,因为如何指定随机效果结构并不是很清楚。重要的是,Barr等人。 "保持最大的格言"你意识到这里不起作用。问题是模型过度参数化(因此来自lmer的错误)。

我建议使用ANOVA。关于这个问题的更多讨论可以在Ben和我discussed this more thoroughly的交叉验证线程中找到。

答案 1 :(得分:2)

我可能不太了解经典的ANOVA理论来完全回答这个问题,但我会采取一个裂缝。首先,有几点:

  • observed参数只显示与效果大小的计算相关。
  

观察:'字符'向量表明哪个变量是             观察(即测量)与实验相比             操纵。报告默认效果大小(一般化             eta-squared)需要正确规范所谓的[sic]             (与被操纵的变量相反)。

...所以我认为你可以安全地离开它。

  • 如果您想覆盖错误,可以使用
  control=lmerControl(check.nobs.vs.nRE="ignore")

......但这可能不是正确的前进方向。

认为,但我不确定这是正确的方法:

m1 <- lmer(value ~ treatment * gender + (1|id/phase:hour), data = obk.long,
    control=lmerControl(check.nobs.vs.nRE="ignore",
                            check.nobs.vs.nlev="ignore"),
    contrasts=list(treatment=contr.sum,gender=contr.sum))

这指定phasehour的互动在id内变化。剩余方差和(id内的小时)方差混淆(这就是我们需要覆盖lmerControl()规范的原因),因此不要相信那些特定的方差估计。但是,治疗和性别的主要影响应该处理相同。如果您加载lmerTest而不是lmer并运行summary(m1)anova(m1),则会为您提供与固定(性别和治疗)效果相同的自由度(10)由afex计算。

lme给出了可比较的答案,但需要预先构建逐个小时的交互:

library(nlme)
obk.long$ph <- with(obk.long,interaction(phase,hour))
m2 <- lme(value ~ treatment * gender,
             random=~1|id/ph, data = obk.long,
    contrasts=list(treatment=contr.sum,gender=contr.sum))
anova(m2,type="marginal")

我不知道如何重建afex对随机效应的测试。