簡體   English   中英

lines()無法正確顯示二次擬合

[英]lines() not properly displaying quadratic fit

我只是試圖顯示我使用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()一起使用。

謝謝您的幫助。

因為您忘了先按年齡排序點,所以這些行將隨機出現。 線性回歸也是如此。 他之所以適用於直線,是因為沿着直線上的任何點集行駛……停留在直線上!

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)

在此處輸入圖片說明

只是為了在繪制模型預測時添加另一個更通用的技巧:

經常使用的策略是創建一個新數據集(例如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)

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM