lines()没有正确显示二次拟合

时间:2014-03-29 19:55:41

标签: r plot lines

我只是试图显示我使用lm()生成的拟合,但是line函数给了我一个奇怪的结果,其中有一条点来自一个点。

这是我的代码:

library(ISLR)
data(Wage)
lm.mod<-lm(wage~poly(age, 4), data=Wage)
Wage$lm.fit<-predict(lm.mod, Wage)

plot(Wage$age, Wage$wage)
lines(Wage$age, Wage$lm.fit, col="blue")

我尝试用dev.off()重置我的情节,但我没有运气。我正在使用rStudio。 FWIW,如果我只使回归变为线性,那么这条线就会显得非常精细,但只要我将其设为二次或更高(使用I(年龄^ 2)或poly()),我就得到一个奇怪的图形。此外,points()函数适用于poly()。

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

因为您忘记按年龄排序积分,所以这些行会随机变化。这也发生在线性回归中;他认为它适用于线条是因为沿着一条线沿着任何一组点行进......停留在线上!

plot(Wage$age, Wage$wage)
lines(sort(Wage$age), Wage$lm.fit[order(Wage$age)], col = 'blue')

enter image description here

考虑增加线宽以获得更好的视图:

lines(sort(Wage$age), Wage$lm.fit[order(Wage$age)], col = 'blue', lwd = 3)

enter image description here

答案 1 :(得分:0)

在绘制模型预测时添加另一个更一般的提示:

常用的策略是创建一个新数据集(例如newdat),其中包含一系列可能值的预测变量值序列。然后使用此数据显示您的预测值。在此数据集中,您具有良好的预测变量值范围,但情况可能并非总是如此。使用新数据集,您可以确保您的线代表变量范围内均匀分布的值:

实施例

newdat <- data.frame(age=seq(min(Wage$age), max(Wage$age),length=1000))
newdat$pred <- predict(lm.mod, newdata=newdat)
plot(Wage$age, Wage$wage, col=8, ylab="Wage", xlab="Age")
lines(newdat$age, newdat$pred, col="blue", lwd=2)

enter image description here