【问题标题】:lines() not properly displaying quadratic fit线()没有正确显示二次拟合
【发布时间】:2014-05-09 06:55:48
【问题描述】:

我只是想显示我使用 lm() 生成的拟合,但是 lines 函数给了我一个奇怪的结果,其中一个点出现了多条线。

这是我的代码:

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(age^2) 或 poly()),我就会得到一个奇怪的图表。此外,points() 函数可以很好地与 poly() 配合使用。

感谢您的帮助。

【问题讨论】:

    标签: r plot lines


    【解决方案1】:

    因为您忘记先按年龄对点进行排序,所以线条将随机年龄。这也发生在线性回归中;他之所以适用于线是因为沿着一条线沿着任何一组点行进......保持在线!

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

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

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

    【讨论】:

    • 顺便说一下,它适用于线的原因是因为沿着一条线沿着任何一组点行进...保持在线!
    • 那将是我的下一个问题,哈哈。感谢您的回答。
    【解决方案2】:

    只是添加另一个关于绘制模型预测的更一般的提示:

    一种常用的策略是创建一个新数据集(例如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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-02
      • 1970-01-01
      • 1970-01-01
      • 2010-12-09
      • 2017-08-03
      • 2015-03-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多