为什么 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)
给出了这个情节:
我正在分析一个数据集,其中包含新生儿的体重和有关他们母亲的一些信息,包括分类变量 '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)
给出了这个情节: