2013-03-31 49 views
0

我正在尋找一種方法來繪製數據集上的非線性迴歸線,其中向量y中的每個值都被多次存儲,所以我嘗試使用類似:使用線條()'多個x條目'

x <- c(1,2,3,4,5,6,7,8,9,10) 
y <- c(1,4,9,15,25,9,36,25,36,25) 
reg4 <- lm(x ~ y + I(y^2)) 
plot(x ~ y) 
lines(y, predict(reg4), type="l", col="red", lwd=1) 

這給http://i.imgur.com/qSEVNdT.png enter image description here

所以我的問題是,是有辦法,比方說,使用某種平均值爲每個Y入境?或者,把它做成一個「連續」的行,而不是將多個分支分成多行/在有多個「條目」的位置返回一個較低的y值。

回答

0

問題並非來自數據中的關係: 對於給定值y,只有一個預測。 問題在於點沒有排序, 因此,當你加入它們時,最終會出現一連串的線條。 您可以使用order重新排序點。

plot(
    x ~ y, 
    xlab = "y", ylab = "x" # Confusing... 
) 
i <- order(y) 
lines(y[i], predict(reg4)[i]) 
1

在這種情況下,最好是predict從模型在協變量的範圍。你可以這樣做,例如在x範圍內等間距的50或100個位置。增加或減少的位置的數量在需要預測 - 更復雜的反應將需要更多的位置等。這樣做也解決了麪條情節問題,因爲供應將在x

x <- c(1,2,3,4,5,6,7,8,9,10) 
y <- c(1,4,9,15,25,9,36,25,36,25) 
reg4 <- lm(x ~ y + I(y^2)) 
## predictions 
pred <- data.frame(y = seq(min(y), max(y), length = 100)) 
pred <- transform(pred, x = predict(reg4, newdata = pred)) 
## plot 
plot(x ~ y) 
lines(x ~ y, data = pred, type = "l", col = "red", lwd = 1) 

enter image description here

順序 newdata