我已经使用该aov()函数运行了一个完全受试者内重复测量方差分析。我的因变量不是正态分布的,所以我对对我的分析进行假设测试非常感兴趣。似乎仅调用plot()输出对重复测量不起作用,因此我手动获取了感兴趣模型的残差和拟合值,并将它们相互绘制。我假设这就是我将如何测试同方差假设的方式。
该图带有 2 个垂直带(请参见下图)。事实证明,拟合值都以 2 个值为中心(尽管根据==它们并不完全相等),其中一个是另一个的负数。
我有两个问题:
1)这是手动测试假设同方差的正确方法吗?如果没有,我将如何从重复测量设计中解决它(因为只是调用plot()不起作用)?
2)如果它是正确的,这个情节告诉我什么?为什么拟合值如此聚集?我能从中得出什么结论?
非常感谢这里的任何输入。此外,如果您知道更好的方法来检查(最好是绘图)rm-ANOVA 中的假设,那也将是有用的信息。
我在这里包含了一些模拟数据来复制场景:
#Create mock data (there's probably a more efficient way to do this.. would also be nice to know! :) )
p <- sort(rep(1:20,8))
y <- rep(rep(1:2,4),20)
z <- rep(rep(c(1,1,2,2),2),20)
w <- rep(c(1,1,1,1,2,2,2,2),20)
x <- rnorm(160,10,2)
d <- data.frame(x,p=factor(p),y=factor(y),z=factor(z),w=factor(w))
#Run repeated-measures ANOVA
ex.aov <- aov(x ~ y*z*w + Error(p/(y*z*w)), d)
#Try to plot full object (doesn't work)
plot(ex.aov)
#Try to plot section of object (doesn't work)
plot(ex.aov[["p:y:z"]])
#Plot residuals against fitted (custom "skedasticity" plot - works)
plot(residuals(ex.aov[["p:y:z"]])~fitted(ex.aov[["p:y:z"]]))
开始编辑
根据@Stefan 提供的信息,我在下面添加了一些额外的细节,使用他提出的改进的数据结构:
# Set seed to make it reproducible
set.seed(12)
#New variable names and generation
subj <- sort(factor(rep(1:20,8)))
x1 <- rep(c('A','B'),80)
x2 <- rep(c('A','B'),20,each=2)
x3 <- rep(c('A','B'),10, each=4)
outcome <- rnorm(80,10,2)
d3 <- data.frame(outcome,subj,x1,x2,x3)
#Repeated measures ANOVA
ex.aov <- aov(outcome ~ x1*x2*x3 + Error(subj/(x1*x2*x3)), d3)
#proj function
ex.aov.proj <- proj(ex.aov)
# Check for normality by using last error stratum
qqnorm(ex.aov.proj[[9]][, "Residuals"])
# Check for heteroscedasticity by using last error stratum
plot(ex.aov.proj[[9]][, "Residuals"])
结果图如下:
谁能解释上面的图片(尤其是最后一张)?看起来有聚类和模式结构。它可以用来推断异方差的存在吗?





