我在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
我想获得anova表,所以我尝试了这个:
model_all <- aov(meanTR ~ E*O*P+ Error(Sujet/E*O*P), data = df)
之后,我想提取模型的残差来绘制它们
所以我尝试了这个:
res <- residuals(model_all)
返回NULL
所以我发现人们在网上建议这个解决方案:
model_all.pr <- proj(model_all)
res <- model_all.pr[[3]][, "Residuals"]
但这会使下标超出范围
res <- model_all.pr[[3]]["Residuals"]
但这会返回NA
我不知道自己做错了什么。我真的很困惑
任何帮助都将不胜感激。
主要目标是能够运行:
plot(res)
qqnorm(res)
答案 0 :(得分:1)
使用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" ...
但是在您使用的更复杂的模型规范中(即使用显式/自定义错误术语),每个顶级属性中都有单独的残差值:
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" ...
## ...
## ...
我没有考虑到足以说明原因的数据,但我确信这是合理的。
希望有所帮助!