【问题标题】:autoplot() in R for lm: why do I get a "Constant Leverage: Residuals vs Factor Levels" instead of a "Residuals vs Leverage" plot?R for lm 中的 autoplot():为什么我得到“恒定杠杆:残差与因子水平”而不是“残差与杠杆”图?
【发布时间】:2020-11-10 00:51:07
【问题描述】:

我在 R 中使用一个连续变量 (DENSITY) 和一个因子 (SEASON) 进行 ANCOVA。当我检查模型假设时,我得到一个名为:“恒定杠杆:残差与因子水平”的图,而不是“残差与杠杆”图。

limp.mod <- lm(EGGS~DENSITY*SEASON, data=limp)
autoplot(limp.mod,smooth.colour = NA, which=5)

Image:What I get

Image:What I want

如何获得“残差 vs 杠杆”图?为什么我教科书中完全相同的代码给出了另一个 autoplot() 输出?

提前感谢您的帮助!

【问题讨论】:

  • autoplot 可以在什么包中找到?使用非基本 R 函数时,请通过调用 library(&lt;pkgname&gt;) 开始您的脚本。
  • library(ggplot2) library(dplyr) library(GGally) library(ggfortify) library(readr) 这些是我为这个脚本加载的所有库。我认为 autoplot() 可以在 ggplot2 包中找到。
  • 其实是在包ggfortify.

标签: r r-markdown lm ancova


【解决方案1】:

没有可复现的例子,我先根据内置数据集iris创建模型。

df1 <- iris[1:100, 3:5]
df1$Species <- droplevels(df1$Species)
str(df1)
#'data.frame':   100 obs. of  3 variables:
# $ Petal.Length: num  1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
# $ Petal.Width : num  0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
# $ Species     : Factor w/ 2 levels "setosa","versicolor": 1 1 1 1 1 1 1 1 1 1 ...

fit <- lm(Petal.Length ~ Petal.Width*Species, df1)

至于情节,autoplot 是一个通用函数。包ggfortify 包括"lm" 类对象的方法等。

来自help("autoplot.lm")

which 如果需要图的子集,请指定数字 1:6 的子集。

默认为which = c(1, 2, 3, 5)。尝试参数的所有 6 个值,我们看到想要的图不是其中之一。所以需要构建一个自定义图表。

残差和杠杆值可以分别从stats::residstats::hatvalues获得。

library(ggplot2)

dflev <- data.frame(Leverage = hatvalues(fit), y = resid(fit))

ggplot(dflev, aes(Leverage, y)) +
  geom_point() +
  geom_hline(yintercept = 0, linetype = "dashed") +
  ggtitle("Residuals vs Leverage") +
  lims(y = c(-1, 1)) +
  ylab("") +
  theme(plot.title = element_text(hjust = 0.5, face = "bold"))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-18
    • 2018-02-27
    • 2018-04-15
    • 2018-02-28
    • 2015-08-08
    • 2020-10-22
    • 2021-04-11
    • 1970-01-01
    相关资源
    最近更新 更多