对于两个主体内因素,在 R 中使用 lme/lmer 重复测量 ANOVA

机器算法验证 r 方差分析 混合模式 重复测量 lme4-nlme
2022-01-22 20:27:51

我正在尝试使用lme包中的重复测量方差分析nlme来复制结果。aov我已经为一个单因素重复测量实验和一个具有一个主体间因素和一个主体内因素的双因素实验做了这个,但是对于一个有两个内部因素的双因素实验,我很难做到这一点——主体因素。

一个例子如下所示。是固定效应因子,A随机效应因子。Bsubject

set.seed(1)
d <- data.frame(
    Y = rnorm(48),
    subject = factor(rep(1:12, 4)),
    A = factor(rep(1:2, each=24)),
    B = factor(rep(rep(1:2, each=12), 2)))

summary(aov(Y ~ A*B + Error(subject/(A*B)), data=d))  # Standard repeated measures ANOVA

library(nlme)
# Attempts:
anova(lme(Y ~ A*B, data=d, random = ~ 1 | subject))  # not same as above
anova(lme(Y ~ A*B, data=d, random = ~ 1 | subject/(A+B)))  # gives error

我在皮涅罗和贝茨的书中没有看到对此的解释,但我可能忽略了它。

2个回答

你正在拟合的东西aov称为条形图,它很难拟合,lme因为subject:Asubject:B随机效应是交叉的。

您的第一次尝试相当于aov(Y ~ A*B + Error(subject), data=d),其中不包括所有随机效应;您的第二次尝试是正确的想法,但是使用 lme 交叉随机效果的语法非常棘手。

lme从包中使用nlme,代码将是

lme(Y ~ A*B, random=list(subject=pdBlocked(list(~1, pdIdent(~A-1), pdIdent(~B-1)))), data=d)

lmer从包中使用lme4,代码将类似于

lmer(Y ~ A*B + (1|subject) + (1|A:subject) + (1|B:subject), data=d)    

来自 R-help 的这些线程可能会有所帮助(并且值得称赞的是,这就是我从中获得nlme代码的地方)。

http://www.biostat.wustl.edu/archives/html/s-news/2005-01/msg00091.html

http://permalink.gmane.org/gmane.comp.lang.r.lme4.devel/3328

http://www.mail-archive.com/r-help@stat.math.ethz.ch/msg10843.html

最后一个链接指的是 Pinheiro/Bates 的第 165 页;这也可能有帮助。

编辑:另请注意,在您拥有的数据集中,一些方差分量是负数,这是不允许使用 lme 的随机效应的,因此结果不同。可以使用种子 8 创建具有所有正方差分量的数据集。然后结果一致。有关详细信息,请参阅此答案

另请注意,lmefromnlme不会正确计算分母的自由度,因此 F 统计量一致但 p 值不一致,并且lmerfromlme4也不会尝试,因为在存在不平衡交叉随机效应的情况下它非常棘手,并且可能不会甚至是明智之举。但这比我想进入这里的要多。

如果这就是您想要做的所有事情,那么您的第一次尝试就是正确的答案。nlme() 计算出组件之间和内部,您无需指定它们。

您遇到的问题不是因为您不知道如何指定模型,而是因为重复测量方差分析和混合效应不是一回事。有时,方差分析和混合效应模型的结果会匹配。当您像 ANOVA 那样汇总数据并从中计算两者时尤其如此。但一般来说,如果做得正确,虽然结论可能相似,但结果几乎永远不会相同。您的示例数据不像真正的重复测量,您经常在 S 中复制每个测量。当您进行方差分析时,通常您会汇总这些复制以估计每个主题的效果。在混合效果建模中,您不会做这样的事情。您使用原始数据。当你这样做时,你'

[顺便说一句,使用 lmer() (来自 lme4 包)而不是 lme() 给我的 SS 和 MS 值与您的示例中的效果的 ANOVA 完全匹配,只是 F 不同]