多项式回归图和 '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))
formula
到 stat_smooth
使用映射美学,即 x
和 y
(正如您映射的 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
.
我试图更好地理解为什么 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))
formula
到 stat_smooth
使用映射美学,即 x
和 y
(正如您映射的 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
.