为什么 R 绘制残差与杠杆而不是残差与因子水平(ANOVA 测试和模型 'aov')

Why R plots Residuals vs Leverage instead of Residuals vs Factor Levels (ANOVA test & model with 'aov')

我正在分析一个数据集,其中包含新生儿的体重和有关他们母亲的一些信息,包括分类变量 'smoke' - 母亲是否吸烟。

我做了一个 aov 测试,想在它的帮助下绘制方差分析模型的诊断图。我希望得到四个地块,包括一个 'Residuals vs Factor Levels' 地块。相反,我得到了一个 'Residuals vs Leverage' 图,好像我的分类变量是一个数字变量。

您可以在此处找到数据集:https://drive.google.com/file/d/1VwiAHdYZF2BrGZZ875GGdkyamKMgxmGU/view?usp=sharing

其中变量 'smoke' 的值为 0(非吸烟者)和 1(吸烟者)。我使用 mutate 将其更改为适当的因子(除其他外,如奇偶校验),然后进行 aov 测试本身并尝试绘制结果,以验证假设。您可以在下面找到我的代码:

babies <- read.csv("babies.csv")
babies <- babies %>% 
mutate(parity = factor(parity, 
                     levels = c(0, 1), 
                     labels = c("not firstborn", "firstborn"))) %>% 
mutate(smoke = factor(smoke, 
                    levels = c(0, 1), 
                    labels = c("non smoker", "smoker")))

model6 <- aov(babies$bwt ~ babies$smoke)
par(mfrow = c(2,2))
plot(aov(babies$bwt ~ babies$smoke))

我在第四个情节中得到的结果是这样的:

我试图检查 'smoke' 是否是我想要的一个因素,就像那样:

> head(babies$smoke)
[1] non smoker non smoker smoker     non smoker smoker     non smoker
Levels: non smoker smoker

既然 'smoke' 是一个因素(据我所知)和一个分类变量,为什么每个数字变量都有杠杆作用?如何解决这个问题并获得正确的情节?

提前感谢您的帮助!

没有plot.aov方法,所以你得到了plot.lm方法(因为aov(babies$bwt ~ babies$smoke)的class会是c("aov", "lm"))。

如果您想为 "aov" 对象绘制其他内容,请编写一个函数 plot.aov 来完成。例如,

plot.aov <- function(x, which = 1:3, ...) {
  NextMethod(x, which = which, ...)
  for (f in names(x$xlevels)) {
    xvar <- x$model[, f]
    plot(xvar, residuals(x), xlab = f, ylab = "Residuals")
  }
}

然后

plot(aov(babies$bwt ~ babies$smoke))

将绘制前 3 个 plot.lm 图,然后根据模型中的因子绘制残差图。 (如果还有其他因素,它会处理每个因素。)我得到

或者,您可以使用 termplot 函数,例如

termplot(aov(babies$bwt ~ babies$smoke), partial.resid=TRUE)

给出了这个情节: