测试重复测量方差分析的正态假设?(在R中)


11

因此,假设有必要测试方差分析的正态性假设(请参见12

如何在R中对其进行测试?

我希望做这样的事情:

## From Venables and Ripley (2002) p.165.
utils::data(npk, package="MASS")
npk.aovE <- aov(yield ~  N*P*K + Error(block), npk)
residuals(npk.aovE)
qqnorm(residuals(npk.aov))

这是行不通的,因为“残差”没有针对重复测量方差分析的方法(对此也无法预测)。

那么在这种情况下应该怎么做?

是否可以从没有误差项的情况下简单地从同一拟合模型中提取残差?我对文献还不够熟悉,无法知道这是否有效,在此先感谢您的任何建议。

Answers:


5

您可能无法获得简单的响应,residuals(npk.aovE)但这并不意味着该对象中没有残差。这样做str,可以看到在级别内仍然存在残差。我想您对“内”级别最感兴趣

> residuals(npk.aovE$Within)
          7           8           9          10          11          12 
 4.68058815  2.84725482  1.56432584 -5.46900749 -1.16900749 -3.90234083 
         13          14          15          16          17          18 
 5.08903669  1.28903669  0.35570336 -3.27762998 -4.19422371  1.80577629 
         19          20          21          22          23          24 
-3.12755705  0.03910962  2.60396981  1.13730314  2.77063648  4.63730314 

我自己的培训和实践不是使用正态性测试,而是使用QQ图和具有健壮方法的并行测试。


谢谢德温 我想知道应该探索哪些不同的残差(“内部”除外)。塔尔干杯
塔尔加利里

npk.aovE是三个元素的列表。前两个是参数估计,并且不假定它们具有正态性,因此,除了$ Within之外,测试任何东西似乎都不合适。names(npk.aovE)返回`[[1]“(Intercept)”“ block”“ Within”`
DWin 2011年

@Dwin,您可以检查trev发布的最新方法(最新答案)吗?它使用一种投影来计算残差。对于我来说,这是绘制组之间方差均一的图的最简单方法。
toto_tico 2015年

@Dwin,也qqplot似乎只接受lm,而不接受aov。
toto_tico 2015年

2

另一个选择是使用包的lme功能nlme(然后将获得的模型传递给anova)。您可以residuals在其输出上使用。


1

我认为可以在执行分析之前针对每个重复测量评估正态性假设。我将重塑数据框的形状,以使每一列对应一个重复的度量,然后对这些列中的每一列执行一次shapiro.test。

apply(cast(melt(npk,measure.vars="yield"), ...~N+P+K)[-c(1:2)],2,function(x) shapiro.test(x)$p.value)

谢谢gd047-问题是当我们遇到更复杂的aov(产量〜N P K +错误(block /(N + K)),npk)时,我们该怎么办?
Tal Galili

您是否足以解释这些场景之间的区别?不幸的是,我对模型中的错误术语的使用还不够熟悉(顺便说一句,您能建议一本好书吗?)。正如我所学到的,我刚刚提出的是SPSS检查正态性假设的方法。将此视为示例 goo.gl/p45Bx
George Dontas 2011年

嗨gd047。谢谢你的链接。我对这些模型的了解都可以从这里链接到:r-statistics.com/2010/04/… 如果您会了解其他资源-我很想知道它们。塔尔干杯
塔尔加利里

1

Venables和Ripley在他们的书(第284页)稍后的随机和混合效应部分中解释了如何对重复测量设计进行残留诊断。

为每个层的aov结果实现了残差函数(或resid):

从他们的例子: oats.aov <- aov(Y ~ N + V + Error(B/V), data=oats, qr=T)

要获得拟合值或残差:

“因此,fitted(oats.aov[[4]])resid(oats.aov[[4]])是长度为54的向量,表示最后层的拟合值和残差。”

重要的是,它们添加:

“不可能将它们与原始实验的图唯一地关联。”

对于诊断,他们使用投影:

plot(fitted(oats.aov[[4]]), studres(oats.aov[[4]]))
abline(h=0, lty=2)
oats.pr <- proj(oats.aov)
qqnorm(oats.pr[[4]][, "Residuals"], ylab = "Stratum 4 residuals")
qqline(oats.pr[[4]][, "Residuals"])

他们还显示,正如另一位用户所张贴的那样,可以使用lme完成该模型。


根据这个,应该是[[3]]而不是[[4]]。我测试了它,它只适用于[[3]]
toto_tico

1

这是aov和lme的两个选项(我认为首选2nd):

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 <- lme(Y ~ N * V, random = ~1 | B/V, data = oats)),但似乎正在使用它(并且产生了不同的结果,因此它正在执行某些操作)。

就是这样...

但为了完整性:

1-模型摘要

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

2-重复测量方差分析的Tukey测试(需要3个小时!)。

summary(Lme.mod)
summary(glht(Lme.mod, linfct=mcp(V="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)

在此处输入图片说明

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.