对于R中的重复测量方差分析,为什么lme和aov返回不同的结果?


24

我正在尝试从使用ez软件包过渡到lme重复测量方差分析(因为我希望能够在上使用自定义对比lme)。

遵循此博客文章的建议,我能够同时使用和设置相同的模型aovez当需要时也是如此)lme。然而,尽管在给出的例子中那个帖子˚F -值不完美之间同意aovlme(我检查,他们这样做),这是不是我的数据的情况。尽管F值相似,但它们并不相同。

aov返回1.3399的f值,lme返回1.36264。我愿意接受aov结果为“正确” 的结果,因为这也是SPSS返回的结果(这对我的字段/主管很重要)。

问题:

  1. 如果有人能解释为什么存在这种差异以及如何使用我lme来提供可靠的结果,那就太好了。(如果它给出“正确的”结果,我也愿意使用lmer而不是lme用于这种类型的东西。但是,到目前为止,我还没有使用它。)

  2. 解决此问题后,我想进行对比分析。尤其是我对合并因子的前两个级别(即c("MP", "MT"))并将其与因子的第三个级别(即)进行对比的兴趣"AC"。此外,测试因子的第三级与第四级(即"AC"vs "DA")。

数据:

tau.base <- structure(list(id = structure(c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 
9L, 10L, 11L, 12L, 13L, 14L, 15L, 16L, 17L, 18L, 19L, 20L, 21L, 
22L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 
14L, 15L, 16L, 17L, 18L, 19L, 20L, 21L, 22L, 1L, 2L, 3L, 4L, 
5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 15L, 16L, 17L, 18L, 
19L, 20L, 21L, 22L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 
11L, 12L, 13L, 14L, 15L, 16L, 17L, 18L, 19L, 20L, 21L, 22L), .Label = c("A18K", 
"D21C", "F25E", "G25D", "H05M", "H07A", "H08H", "H25C", "H28E", 
"H30D", "J10G", "J22J", "K20U", "M09M", "P20E", "P26G", "P28G", 
"R03C", "U21S", "W08A", "W15V", "W18R"), class = "factor"), factor = structure(c(1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 
4L, 4L, 4L, 4L, 4L, 4L, 4L), .Label = c("MP", "MT", "AC", "DA"
), class = "factor"), value = c(0.9648092876, 0.2128662077, 1, 
0.0607615485, 0.9912814024, 3.22e-08, 0.8073856412, 0.1465590332, 
0.9981672618, 1, 1, 1, 0.9794401938, 0.6102546108, 0.428651501, 
1, 0.1710644881, 1, 0.7639763913, 1, 0.5298989196, 1, 1, 0.7162733447, 
0.7871177434, 1, 1, 1, 0.8560509327, 0.3096989662, 1, 8.51e-08, 
0.3278862311, 0.0953598576, 1, 1.38e-08, 1.07e-08, 0.545290432, 
0.1305621416, 2.61e-08, 1, 0.9834051136, 0.8044114935, 0.7938839461, 
0.9910112678, 2.58e-08, 0.5762677121, 0.4750002288, 1e-08, 0.8584252623, 
1, 1, 0.6020385797, 8.51e-08, 0.7964935271, 0.2238374288, 0.263377904, 
1, 1.07e-08, 0.3160751898, 5.8e-08, 0.3460325565, 0.6842217296, 
1.01e-08, 0.9438301877, 0.5578367224, 2.18e-08, 1, 0.9161424562, 
0.2924856039, 1e-08, 0.8672987992, 0.9266688748, 0.8356425464, 
0.9988463913, 0.2960361777, 0.0285680426, 0.0969063841, 0.6947998266, 
0.0138254805, 1, 0.3494775301, 1, 2.61e-08, 1.52e-08, 0.5393467752, 
1, 0.9069223275)), .Names = c("id", "factor", "value"), class = "data.frame", row.names = c(1L, 
6L, 10L, 13L, 16L, 17L, 18L, 22L, 23L, 24L, 27L, 29L, 31L, 33L, 
42L, 43L, 44L, 45L, 54L, 56L, 58L, 61L, 64L, 69L, 73L, 76L, 79L, 
80L, 81L, 85L, 86L, 87L, 90L, 92L, 94L, 96L, 105L, 106L, 107L, 
108L, 117L, 119L, 121L, 124L, 127L, 132L, 136L, 139L, 142L, 143L, 
144L, 148L, 149L, 150L, 153L, 155L, 157L, 159L, 168L, 169L, 170L, 
171L, 180L, 182L, 184L, 187L, 190L, 195L, 199L, 202L, 205L, 206L, 
207L, 211L, 212L, 213L, 216L, 218L, 220L, 222L, 231L, 232L, 233L, 
234L, 243L, 245L, 247L, 250L))

和代码:

require(nlme)

summary(aov(value ~ factor+Error(id/factor), data = tau.base))

anova(lme(value ~ factor, data = tau.base, random = ~1|id))

看起来您刚刚在这里回答了关于对比的部分; 如果不是,请编辑此问题,以便我们知道仍然存在哪些困难。
亚伦-恢复莫妮卡

2
@Aaron,只要lme标准教科书ANOVA 的结果有所不同(由给出aov,这就是我所需要的),这对我来说不是一个选择。在我的论文中,我要报告方差分析,而不是方差分析。有趣的是,Venables&Ripley(2002,p。285)表明,两种方法都得出相同的估计值。但是F值的差异使我感到难受。此外,Anova()(from car)仅返回lme对象的Chi²值。因此,对我来说,我的第一个问题尚未得到解答。
亨里克

我了解(但不同意)您对的谨慎lme;但对比,glht适用于lm配合过,而不仅仅是lme千篇一律。(另外,lme结果也是标准教科书的结果。)
亚伦-恢复莫妮卡

不幸的是,您无法指定lm重复测量分析。只有aov可以处理重复的措施,但是会返回一个类的对象,aovlist不幸的是它没有处理glht
亨里克

3
lm使用剩余误差作为所有效果的误差项;当某些效果应使用不同的误差项aov时(或使用来自的结果lm手动计算F统计量)是必要的。在您的示例中,的误差项factorid:factor交互作用,它是加法模型中的残留误差项。将您的结果与进行比较anova(lm(value~factor+id))
亚伦-恢复莫妮卡

Answers:


28

它们是不同的,因为lme模型强制的方差分量id大于零。查看所有术语的原始方差分析表,我们看到id的均方误差小于残差的均方误差。

> anova(lm1 <- lm(value~ factor+id, data=tau.base))

          Df  Sum Sq Mean Sq F value Pr(>F)
factor     3  0.6484 0.21614  1.3399 0.2694
id        21  3.1609 0.15052  0.9331 0.5526
Residuals 63 10.1628 0.16131   

当我们计算方差成分时,这意味着由于id引起的方差为负。我对预期均方根记忆的记忆犹豫不决,但计算方法如下

(0.15052-0.16131)/3 = -0.003597.

这听起来很奇怪,但可能会发生。这意味着给定模型中的残差变化量,每个id的平均值彼此之间的距离比彼此之间的期望值更接近。

相反,使用lme强制此方差大于零。

> summary(lme1 <- lme(value ~ factor, data = tau.base, random = ~1|id))
...
Random effects:
 Formula: ~1 | id
        (Intercept)  Residual
StdDev: 3.09076e-05 0.3982667

这将报告标准偏差,并平方以得到9.553e-10id方差和0.1586164残差方差的方差收益。

现在,您应该知道,aov仅当您认为所有重复测量对之间的相关性都相同时,才适用于重复测量。这称为复合对称。(从技术上讲,需要球形度,但现在已经足够了。)使用lme过度的原因之一aov是它可以处理不同类型的相关结构。

在这个特定的数据集中,这种相关性的估计为负。这有助于说明id的均方误差如何小于残差均方误差。负相关性意味着,如果一个人的第一次测量值低于平均水平,那么他们的第二次测量值将高于平均水平,这使得该个体的总平均值的可变性小于我们所期望的零相关性或正相关性。

lme具有随机效应的使用等效于拟合一个复合对称模型,其中该相关性被迫为非负;我们可以使用以下方法拟合模型,使相关性为负gls

> anova(gls1 <- gls(value ~ factor, correlation=corCompSymm(form=~1|id),
                    data=tau.base))
Denom. DF: 84 
            numDF   F-value p-value
(Intercept)     1 199.55223  <.0001
factor          3   1.33985   0.267

该方差分析表与aov拟合和lm拟合均符合该表。

好那怎么了 好吧,如果您认为id观察值的方差和相互之间的相关性应该为非负值,则lme拟合实际上比使用aov或拟合更合适,lm因为它对残差的估计更好。但是,如果你相信观测之间的相关性可能是负的,aovlmgls更好。

您可能还对进一步研究相关结构感兴趣。要查看一般的相关结构,您需要执行以下操作

gls2 <- gls(value ~ factor, correlation=corSymm(form=~unclass(factor)|id),
data=tau.base)

在这里,我仅将输出限制为相关结构。值1到4代表四个级别factor; 我们看到因子1和因子4具有相当强的负相关性:

> summary(gls2)
...
Correlation Structure: General
 Formula: ~unclass(factor) | id 
 Parameter estimate(s):
 Correlation: 
  1      2      3     
2  0.049              
3 -0.127  0.208       
4 -0.400  0.146 -0.024

在这些模型之间进行选择的一种方法是似然比检验。这表明随机效应模型和一般相关结构模型在统计学上没有显着差异。当发生这种情况时,通常首选较简单的模型。

> anova(lme1, gls2)
     Model df      AIC      BIC    logLik   Test  L.Ratio p-value
lme1     1  6 108.0794 122.6643 -48.03972                        
gls2     2 11 111.9787 138.7177 -44.98936 1 vs 2 6.100725  0.2965

2
实际上,可以使用复合对称性lme获得与相同的结果aov(从而启用lme所有方差分析),即在以下情况的调用中使用相关参数lmeanova(lme(value ~ factor, data = tau.base, random = ~1|id, correlation = corCompSymm(form = ~1|id)))
Henrik

1
好发现。但是没有合适的额外参数吗?它具有三个方差参数;id,残差和相关性的方差,而gls仅具有残差和相关性。
亚伦-恢复莫妮卡

1
您的论点听起来很合理,但是结果并不相同。所有方差分析表(aovlme不具有复合对称性,并且lme具有复合对称性)具有完全相同的dfs数。
亨里克

1
您必须说服我,这三个参数实际上是前两个参数的过度参数化。您知道它们之间的关系了吗?
亚伦-恢复莫妮卡

1
不,我相信的输出anova.lme()。从您的回答中,我可以得出方差分析和混合模型之间的关系在于它们的相关结构。然后,我读到,采用复杂的对称相关结构会导致两种方法之间的相等。因此,我强加了它。我不知道这是否会吃掉另一个df。但是,输出与此解释不一致。
亨里克(Henrik)

2

aov()通过lm()使用最小二乘法拟合模型,lme通过最大似然拟合。估计线性模型参数的方式上的差异可能是f值(很小)差异的原因。

在实践中(例如用于假设检验),这些估计值是相同的,因此我看不出如何认为一个比另一个更“可信”。它们来自不同的模型拟合范例。

为了进行对比,您需要为您的因素设置一个对比矩阵。Venebles和Ripley在第4版的第143页,第146页和第293-294页上说明了如何执行此操作。


嗯,但是为什么有时会有差异,有时结果却完全相等?那么,使用Furthemrore似乎是不可能的,lme或者使用lmerANOVA计算(严格地说)是因为它使用的是相似但不相同的方法。那么,有没有办法为R中的重复测量方差分析计算对比度?
亨里克

如果您的系统是真正的线性模型,那么最小二乘法和ML应该给出相同的f统计量。只有当数据中存在其他结构时,这两种方法才会给出不同的结果。Pinheiro和Bates在其混合效果模型书中对此进行了介绍。同样,它们可能并不“完全”相等,如果您要达到足够的信号位数,我相信您会发现一些区别。但是出于所有实际目的,它们是相同的。
克里斯(Chris)
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.