无法在 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
- Sujet : 从 1 到 12
- T、E、O、P:1 或 0
- meanTR : 数值
我想获取方差分析 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" ...
## ...
## ...
我还没有充分考虑背后的统计数据来说明这是为什么,但我确信这是合理的。
希望对您有所帮助!
我在 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
- Sujet : 从 1 到 12
- T、E、O、P:1 或 0
- meanTR : 数值
我想获取方差分析 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" ...
## ...
## ...
我还没有充分考虑背后的统计数据来说明这是为什么,但我确信这是合理的。
希望对您有所帮助!