2013-03-11 17 views
18

Mam zestaw danych z pewnymi punktami i chcę dopasować do niego linię. Próbowałem go z funkcją loess. Niestety dostaję bardzo dziwne wyniki. Zobacz wykres poniżej. Spodziewam się linii, która przechodzi przez punkty i całą spisek. Jak mogę to osiągnąć? plotDopasuj linię z wartością LOESS w R

Jak go odtworzyć:

Pobierz zestaw danych z https://www.dropbox.com/s/ud32tbptyvjsnp4/data.R?dl=1 (tylko dwa kb) i użyć tego kodu:

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) 

Każda pomoc jest mile widziana. Dzięki!

+0

Próbowałem pobrać dane plik. Pobrano, ale nie mogłem go odczytać. W jakim formacie? Czy możesz przesłać plik tekstowy ASCII DOS? Może robię coś złego. Może muszę zainstalować DropBox na moim komputerze, aby odczytać pobrany plik? Dzięki. –

Odpowiedz

47

Sporządziłeś wykres wartości dopasowanych przeciwko y zamiast z x. Musisz również zamówić wartości x przed wykreśleniem linii. Spróbuj tego:

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

Przepraszamy. nie ...... –

1

Niestety dane te nie są już dostępne, ale jest łatwiejszy sposób, jak dopasować nieparametrycznego linię (Lokalnie ważona Scatterplot Wygładzanie czy tylko lessowe jeśli chcesz) jest użyć poniższy kod:

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

pamiętać, że można grać z parametrami span i degree uzyskać dowolny gładkość.

+0

Dane wróciły, dzięki za podpowiedź. Prawdopodobnie możesz odpowiednio zmienić swoją odpowiedź. – leo

1

Może być za późno, ale masz opcje z ggplot (i dplyr). Po pierwsze, jeśli chcesz tylko wykreślić linię lessowe nad punktami, można spróbować:

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()

inny sposób, jest predict() funkcji przy użyciu lessowe dopasowanie. Na przykład kiedyś dplyr funkcje, aby dodać prognoz do nowej kolumny o nazwie "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()

Aktualizacja: Dodano wiersz kodu, aby załadować dane przykładowe przewidziane

Powiązane problemy