如何从R中的重复测量ANOVA模型中获得残差

如何从R中的重复测量ANOVA模型中获得残差,r,anova,R,Anova,通常从aov()使用summary()函数后,可以获得残差 但是,当我使用重复测量方差分析和公式不同时,如何得到残差呢 ## as a test, not particularly sensible statistically npk.aovE <- aov(yield ~ N*P*K + Error(block), npk) npk.aovE summary(npk.aovE) Error: block Df Sum Sq Mean Sq F value Pr(&g

通常从
aov()
使用
summary()
函数后,可以获得残差

但是,当我使用重复测量方差分析和公式不同时,如何得到残差呢

## as a test, not particularly sensible statistically
npk.aovE <- aov(yield ~  N*P*K + Error(block), npk)
npk.aovE
summary(npk.aovE)
Error: block
          Df Sum Sq Mean Sq F value Pr(>F)
N:P:K      1   37.0   37.00   0.483  0.525
Residuals  4  306.3   76.57               

Error: Within
          Df Sum Sq Mean Sq F value  Pr(>F)   
N          1 189.28  189.28  12.259 0.00437 **
P          1   8.40    8.40   0.544 0.47490   
K          1  95.20   95.20   6.166 0.02880 * 
N:P        1  21.28   21.28   1.378 0.26317   
N:K        1  33.14   33.14   2.146 0.16865   
P:K        1   0.48    0.48   0.031 0.86275   
Residuals 12 185.29   15.44                   
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
###作为一种测试,在统计上并不特别合理
npk.aovE(F)
N:P:K137.037.000.4830.525
残差4306.3 76.57
错误:在
Df和Sq平均Sq F值Pr(>F)
N 1 189.28 189.28 12.259 0.00437**
P 1 8.40 8.40 0.544 0.47490
K 1 95.20 95.20 6.166 0.02880*
N:P121.2821.281.3780.26317
N:K133.1433.142.146 0.16865
P:K10.480.480.0310.86275
残差12 185.29 15.44
---
签名。代码:0'***'0.001'***'0.01'*'0.05'.'0.1''1
直观的
summary(npk.aovE)$residuals
返回
NULL
。。 有人能帮我吗?

看看

> names(npk.aovE)
试一试

> npk.aovE$residuals 

编辑:很抱歉,我读你的例子太快了。我的建议不适用于带有aov()的多级模型。请尝试以下操作:

> npk.pr <- proj(npk.aovE) 
> npk.pr[[3]][, "Residuals"]
>npk.pr npk.pr[[3]][,“残差”]
这里有一个简单的复制品,如果遇到同样的问题,任何人都可以乱来:

x1 <- gl(8, 4)                                                                 
block <- gl(2, 16)                                                             
y <- as.numeric(x1) + rnorm(length(x1))                                        
d <- data.frame(block, x1, y)                                                  

m <- aov(y ~ x1 + Error(block), d)                                             
m.pr <- proj(m)                                                                  
m.pr[[3]][, "Residuals"]

x1另一个选项是lme:

require(MASS) ## for oats data set
require(nlme) ## for lme()
require(multcomp) ## for multiple comparison stuff

Aov.mod <- aov(Y ~ N * V + Error(B/V), data = oats)
the_residuals <- aov.out.pr[[3]][, "Residuals"]

Lme.mod <- lme(Y ~ N * V, random = ~1 | B/V, data = oats)
the_residuals <- residuals(Lme.mod)
2-重复测量方差分析的Tukey测试(3小时寻找这个!!)。当存在交互时,它确实会发出警告(
*
而不是
+
),但这样做似乎是安全的。请注意,
V
N
是公式中的因子

summary(Lme.mod)
summary(glht(Lme.mod, linfct=mcp(V="Tukey")))
summary(glht(Lme.mod, linfct=mcp(N="Tukey")))
3-正态性和均方差图

par(mfrow=c(1,2)) #add room for the rotated labels
aov.out.pr <- proj(aov.mod)                                            
#oats$resi <- aov.out.pr[[3]][, "Residuals"]
oats$resi <- residuals(Lme.mod)
qqnorm(oats$resi, main="Normal Q-Q") # A quantile normal plot - good for checking normality
qqline(oats$resi)
boxplot(resi ~ interaction(N,V), main="Homoscedasticity", 
        xlab = "Code Categories", ylab = "Residuals", border = "white", 
        data=oats)
points(resi ~ interaction(N,V), pch = 1, 
       main="Homoscedasticity",  data=oats)
par(mfrow=c(1,2))#为旋转标签增加空间

aov.out.pr难道你不能从你的估计中减去你的观察值吗?对于地层模型,它不起作用,正如我上面所写的。谢谢!不知道
proj()
函数。您可以使用
m.pr[['in']][,'Residuals']]
(而不是索引
[3]
),以获得更一般的方法。似乎索引可能会根据
aov
中的模型而变化。
par(mfrow=c(1,2)) #add room for the rotated labels
aov.out.pr <- proj(aov.mod)                                            
#oats$resi <- aov.out.pr[[3]][, "Residuals"]
oats$resi <- residuals(Lme.mod)
qqnorm(oats$resi, main="Normal Q-Q") # A quantile normal plot - good for checking normality
qqline(oats$resi)
boxplot(resi ~ interaction(N,V), main="Homoscedasticity", 
        xlab = "Code Categories", ylab = "Residuals", border = "white", 
        data=oats)
points(resi ~ interaction(N,V), pch = 1, 
       main="Homoscedasticity",  data=oats)