多项式回归图和 'newdata' 误差

Polynomial Regression Plot and 'newdata' Error

我试图更好地理解为什么 stat smooth 不会绘制我的多项式回归线,除非我的 x 变量(自变量)首先被分配为绘图之外的值(例如 x <- dataset$Salary)

数据集

dataset <- tibble(Level = 1:10,
                  Salary = c(45000, 50000, 60000, 80000, 110000, 150000, 200000, 300000, 500000, 1000000))

初始剧情returns错误

错误:'newdata' 有 80 行,但找到的变量有 10 行

ggplot(data = dataset, aes(x = Level, y = Salary)) +
  geom_point(color = "red") +
  stat_smooth(method = "lm", se = FALSE, formula = dataset$Salary ~
      poly(dataset$Level, 3)) +
  ggtitle("Truth or Bluff (Linear Regression)") +
  xlab("Level ") +
  ylab("Salary") +
  theme(plot.title = element_text(hjust = 0.5))

有效的解决方案

x <- dataset$Level

ggplot(data = dataset, aes(x = Level, y = Salary)) +
  geom_point(color = "red") +
  stat_smooth(method = "lm", se = FALSE, formula = dataset$Salary ~ 
      poly(x, 3)) +
  ggtitle("Truth or Bluff (Linear Regression)") +
  xlab("Level ") +
  ylab("Salary") +
  theme(plot.title = element_text(hjust = 0.5))

据我了解

x <- dataset$Salary 与 dataset$Salary 没有区别,只是包含在一个值中。我唯一的想法是它与 poly() 如何看待 x(一个数字向量)以及它如何将 dataset$Salary 视为提取的向量有关。我

除此之外,我希望得到相同的结果,但事实并非如此。

我也试过将 x 重命名为 t,它的作用与第一张图完全相同,所以我不明白为什么 x 只是值的名称那么重要。

t <- dataset$Level

ggplot(data = dataset, aes(x = Level, y = Salary)) +
  geom_point(color = "red") +
  stat_smooth(method = "lm", se = FALSE, formula = dataset$Salary ~ 
      poly(t, 3)) +
  ggtitle("Truth or Bluff (Linear Regression)") +
  xlab("Level ") +
  ylab("Salary") +
  theme(plot.title = element_text(hjust = 0.5))

formulastat_smooth 使用映射美学,即 xy(正如您映射的 x=Level, y=Salary)。如果您映射了 colour=SomeVariable,则还必须使用 colour 而不是 SomeVariable

所以

stat_smooth(..., formula=y ~ poly(x, 3))

您收到警告的原因

In addition: Warning message:
'newdata' had 80 rows but variables found have 10 rows 

是你的数据dataset有10行。但是 stat_smooth 正在获取超过 80 个 X 点的模型的拟合 Y 值以获得平滑的外观线,因此这些长度不匹配。

在公式中使用 poly(x, 3) 没有 出现错误的原因是因为此 x 解析为 x ggplot 的构造数据框,而不是您定义的全局 x

同样,你 do 得到 poly(t, 3) 错误的原因是因为 t 不在 ggplot 的构造数据框中,所以下一个 t在搜索路径上是全局 t.