无法在 R 中获取 AOV 的残差

Unable to get Residuals for AOV in R

我在 R 中有一个数据框。

这是DF的头部部分:

Sujet  T  E  O  P  meanTR

1      1  0  0  0  0.97
1      1  0  0  0  1.44
2      0  1  0  1  0.94  

我想获取方差分析 table,所以我尝试了这个:

model_all <- aov(meanTR ~ E*O*P+ Error(Sujet/E*O*P), data = df)

之后,我想提取模型的残差来绘制它们

所以我尝试了这个:

res <- residuals(model_all) returns NULL

所以我发现网上有人建议这个解决方案:

model_all.pr <- proj(model_all)      
res <- model_all.pr[[3]][, "Residuals"]

但是这个returns下标越界

res <- model_all.pr[[3]]["Residuals"]

但是这个returnsNA

我不知道我做错了什么。我真的很困惑

如有任何帮助,我们将不胜感激。

主要目标是能够运行这个:

plot(res)

qqnorm(res)

使用 aov(),您将获得顶级 $residuals 属性,但其他一些则不会。

例如像下面这样一个简单的模型,你可以直接访问残差(使用str()查看对象的结构,包括可以访问的属性):

fit1 <- aov(Sepal.Length ~ Sepal.Width, data=iris)

str(fit1$residuals)
## Named num [1:150] -0.644 -0.956 -1.111 -1.234 -0.722 ...
## - attr(*, "names")= chr [1:150] "1" "2" "3" "4" ...

但是在您使用的更复杂的模型规范中(即带有 explicit/custom 误差项),每个顶级属性中都有单独的残差值:

fit2 <- aov(Sepal.Length ~ Sepal.Width + Error(Species/Sepal.Length), data=iris)

fit2$residuals # NULL

names(fit2)
## [1] "(Intercept)"   "Species"   "Sepal.Length:Species"   "Within"

fit2$Species$residuals
## 2         3 
## -1.136219  5.179749 

str(fit2$Within$residuals)
## Named num [1:144] -1.83e-15 -2.49e-15 -1.90e-15 -2.55e-15 -2.89e-15 ...
## - attr(*, "names")= chr [1:144] "7" "8" "9" "10" ...
## ...
## ...

我还没有充分考虑背后的统计数据来说明这是为什么,但我确信这是合理的。

希望对您有所帮助!