1

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

数据集

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

返回错误的初始图

错误:'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))
4

1 回答 1

0

formulatostat_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,为了获得平滑的线条,使模型的拟合 Y 值超过 80 X 点,因此这些长度不匹配。

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

同样,您确实收到错误的原因poly(t, 3)是因为t不在 ggplot 构造的数据框中,所以t搜索路径上的下一个是 global t

于 2019-01-18T01:01:52.573 回答