R中的aov()错误术语:bw Error(id)和Error(id/timevar)规范有何区别? [英] aov() error term in R: what's the difference bw Error(id) and Error(id/timevar) specification?
问题描述
aov(depvar~timevar+Error(id))
和aov(depvar~timevar+Error(id/timevar))
公式规范之间有什么区别?这两种变体产生的结果略有不同.
What is the difference between the aov(depvar~timevar+Error(id))
and the aov(depvar~timevar+Error(id/timevar))
formula specifications? These two variants produce slightly different results.
The same question was once asked here: https://stats.stackexchange.com/questions/60108/how-to-write-the-error-term-in-repeated-measures-anova-in-r However, I'd like to repeat it with a more appropriate example.
这是我创建的一个示例:
Here is an example that I created:
var=rep(NA,180)
id=rep(1:20,each=180/20)
group=rep(rep(1:2,each=9),180/(9*2))
time1=rep(rep(1:3,each=3),180/(3*3))
time2=rep(c(8,15,20),180/3)
var[group==1&time1==1&time2==8]=runif(10,105,115)
var[group==2&time1==1&time2==8]=runif(10,105,115)
var[group==1&time1==1&time2==15]=runif(10,95,105)
var[group==2&time1==1&time2==15]=runif(10,95,105)
var[group==1&time1==1&time2==20]=runif(10,85,95)
var[group==2&time1==1&time2==20]=runif(10,85,95)
var[group==1&time1==2&time2==8]=runif(10,95,105)
var[group==2&time1==2&time2==8]=runif(10,95,105)
var[group==1&time1==2&time2==15]=runif(10,85,95)
var[group==2&time1==2&time2==15]=runif(10,75,85)
var[group==1&time1==2&time2==20]=runif(10,75,85)
var[group==2&time1==2&time2==20]=runif(10,65,75)
var[group==1&time1==3&time2==8]=runif(10,95,105)
var[group==2&time1==3&time2==8]=runif(10,95,105)
var[group==1&time1==3&time2==15]=runif(10,85,95)
var[group==2&time1==3&time2==15]=runif(10,75,85)
var[group==1&time1==3&time2==20]=runif(10,75,85)
var[group==2&time1==3&time2==20]=runif(10,65,75)
df=data.frame(id,var,group,time1,time2)
df$id=factor(df$id)
df$group=factor(df$group)
df$time1=factor(df$time1)
df$time2=factor(df$time2)
根据Error()术语规范,对此执行aov()会得到略有不同的结果:
Performing aov() on this gets slightly different results depending on Error() term specification:
只是一个期限:
> summary(aov(var~time1+Error(id),data=df))
Error: id
Df Sum Sq Mean Sq F value Pr(>F)
Residuals 19 958.4 50.44
Error: Within
Df Sum Sq Mean Sq F value Pr(>F)
time1 2 7538 3769 30.41 6.72e-12 ***
Residuals 158 19584 124
> summary(aov(var~time1+Error(id/time1),data=df))
Error: id
Df Sum Sq Mean Sq F value Pr(>F)
Residuals 19 958.4 50.44
Error: id:time1
Df Sum Sq Mean Sq F value Pr(>F)
time1 2 7538 3769 211.5 <2e-16 ***
Residuals 38 677 18
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Error: Within
Df Sum Sq Mean Sq F value Pr(>F)
Residuals 120 18907 157.6
或者对于两个时间项(为了节省空间,请不要在此处键入输出,您可以自己检查):
Or for both time terms (don't type output here for the sake of space, your may check it on your own):
summary(aov(var~group*time1*time2+Error(id/(group*time1*time2)),data=df))
summary(aov(var~group*time1*time2+Error(id),data=df))
为什么会发生?哪个变体是正确的?
Why does it happen? Which variant is correct?
推荐答案
这是一篇博客文章,可帮助您分解古典方差分析中的随机效应"部分中的含义.
Here's a blog post that'll help break down what each means under the "Random Effects in Classical ANOVA" section.
在博客中,这是Error
术语中除法"含义的摘要.
From the blog, here's a summary for what "dividing" in the Error
term means.
aov(Y ~ Error(A), data=d) # Lone random effect
aov(Y ~ B + Error(A/B), data=d) # A random, B fixed, B nested within A
aov(Y ~ (B*X) + Error(A/(B*X)), data=d) # B and X interact within levels of A
因此,从您的问题开始,
So from your question,
aov(depvar~timevar+Error(id/timevar))
表示您从id
获得随机效果,但随后将timevar
嵌套在id
和
means you have a random effect from id
but then fix timevar
with timevar
nested within id
levels versus
aov(depvar~timevar+Error(id))
这只是将id
作为随机效应,而对其他变量没有任何约束.
which is just taking id
as the random effects with no constraint on other variables.
来源: http://conjugateprior.org/2013/01/formulae -in-r-anova/
这可能也很有用,这是一些代码进行方差分析,对学习方差分析有一些建议.
This might prove useful as well, which is some code going over analysis of variance that has some recommendations on learning ANOVA.
这篇关于R中的aov()错误术语:bw Error(id)和Error(id/timevar)规范有何区别?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!