2013-03-11 28 views
18

我有一個數據集,裏面有一些點,並且想要在它上面放一條線。我用loess函數試了一下。不幸的是我得到了很奇怪的結果看下面的情節。我期望通過點和整個情節更多的線。我怎樣才能做到這一點? plot在R中安裝一行與LOESS

如何重現它:

下載從https://www.dropbox.com/s/ud32tbptyvjsnp4/data.R?dl=1(只有兩個KB)的數據集,並使用此代碼:

load(url('https://www.dropbox.com/s/ud32tbptyvjsnp4/data.R?dl=1')) 
lw1 = loess(y ~ x,data=data) 
plot(y ~ x, data=data,pch=19,cex=0.1) 
lines(data$y,lw1$fitted,col="blue",lwd=3) 

任何幫助是極大的讚賞。謝謝!

+0

示例數據我試圖下載數據文件。它確實下載了,但我看不懂它。它的格式是什麼?你能上傳一個ASCII DOS文本文件嗎?也許我做錯了什麼。也許我需要在我的機器上安裝DropBox來讀取下載的文件?謝謝。 – 2015-07-07 08:04:50

回答

47

您已經繪製了針對y而非針對x的擬合值。此外,您需要在繪製一條線之前對x值進行排序。試試這個:

lw1 <- loess(y ~ x,data=data) 
plot(y ~ x, data=data,pch=19,cex=0.1) 
j <- order(data$x) 
lines(data$x[j],lw1$fitted[j],col="red",lwd=3) 

enter image description here

+0

對不起。沒有...... – 2017-05-14 23:53:33

1

不幸的是,數據不再可用,但一個簡單的方法如何適應非參數線(局部加權散點圖平滑或只是一抔黃土,如果你想)是使用下面的代碼:

scatter.smooth(y ~ x, span = 2/3, degree = 2) 

注意,您可以用參數spandegree發揮獲得任意平滑。

+0

數據又回來了,謝謝你的提示。可能你可以相應地改變你的答案。 – leo 2017-05-18 07:23:02

1

可能是晚了,但你有ggplot(和dplyr)的選項。首先,如果你只想要繪製了點黃土線,你可以嘗試:

library(ggplot2) 
load(url("https://www.dropbox.com/s/ud32tbptyvjsnp4/data.R?dl=1")) 
ggplot(data, aes(x, y)) + 
geom_point() + 
geom_smoth(method = "loess", se = FALSE) 

Loess line with ggplot::geom_smooth()

其他方式,是通過使用黃土適合predict()功能。比如我用dplyr功能預測添加到一個名爲"loess"新列:

library(dplyr) 
    data %>% 
    mutate(loess = predict(loess(y ~ x, data = data))) %>% 
    ggplot(aes(x, y)) + 
    geom_point(color = "grey50") + 
    geom_line(aes(y = loess)) 

Loess line with predict() and geom_line()

更新:添加一行代碼加載提供