【问题标题】:How to get residuals from Repeated measures ANOVA model in R如何从R中的重复测量ANOVA模型中获取残差
【发布时间】:2014-11-27 22:24:48
【问题描述】:

通常在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

直觉summary(npk.aovE)$residuals返回NULL.. 谁能帮我解决这个问题?

【问题讨论】:

  • 你不能从你的估计中减去你的观察吗?

标签: r anova


【解决方案1】:

另一种选择是使用 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)

原始示例没有交互(Lme.mod &lt;- lme(Y ~ N * V, random = ~1 | B/V, data = oats)),但它似乎正在使用它(并产生不同的结果,所以它正在做某事)。

就是这样……

...但为了完整性:

1 - 模型摘要

summary(Aov.mod)
anova(Lme.mod)

2 - 重复测量 anova 的 Tukey 测试(3 小时寻找这个!!)。当有交互时它确实会发出警告(* 而不是+),但ignore it 似乎是安全的。请注意,VN 是公式中的因子。

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)

【讨论】:

    【解决方案2】:

    看一下

    的输出
    > names(npk.aovE)
    

    试试看

    > npk.aovE$residuals 
    

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

    > npk.pr <- proj(npk.aovE) 
    > npk.pr[[3]][, "Residuals"]
    

    如果遇到同样的问题,任何人都可以解决以下问题:

    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"]
    

    【讨论】:

    • 对于分层模型它不起作用,正如我在上面写的那样。
    • 谢谢!不知道proj() 功能。
    • 您可以使用m.pr[['Within']][,'Residuals'](而不是索引[3])作为更通用的方法。似乎索引可能会根据aov 中的模型而改变。
    猜你喜欢
    • 1970-01-01
    • 2017-03-17
    • 1970-01-01
    • 2011-03-22
    • 1970-01-01
    • 2015-04-07
    • 1970-01-01
    • 1970-01-01
    • 2013-02-06
    相关资源
    最近更新 更多