2013-03-11 9 views
18

Ich habe einen Datensatz mit einigen Punkten und möchte eine Zeile passen. Ich habe es mit der loess Funktion versucht. Leider bekomme ich sehr seltsame Ergebnisse. Sehen Sie die Handlung unten. Ich erwarte eine Linie, die mehr durch die Punkte und über das ganze Grundstück verläuft. Wie kann ich das erreichen? plotPassen Sie eine Linie mit LOESS in R

Wie es reproduzieren:

den Datensatz aus https://www.dropbox.com/s/ud32tbptyvjsnp4/data.R?dl=1 (nur zwei kb) herunterladen und verwenden Sie diesen Code:

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) 

Jede Hilfe wird sehr geschätzt. Vielen Dank!

+0

ich die Daten herunterzuladen versucht zu laden Datei. Es wurde heruntergeladen, aber ich konnte es nicht lesen. In welchem ​​Format ist es? Könnten Sie eine ASCII-DOS-Textdatei hochladen? Vielleicht mache ich etwas falsch. Vielleicht muss ich DropBox auf meinem Rechner installiert haben, um die heruntergeladene Datei zu lesen? Vielen Dank. –

Antwort

47

Sie haben angepasste Werte gegen y statt gegen x geplottet. Außerdem müssen Sie die X-Werte vor dem Zeichnen einer Linie bestellen. Versuchen Sie folgendes:

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

Entschuldigung. nein ...... –

1

Leider sind die Daten nicht mehr verfügbar sind, sondern ein einfacher Weg, wie eine nicht-parametrischer Linie passen (Lokal Weighted Scatterplot Glättung oder einfach nur einen LOESS wenn Sie möchten) ist zu verwenden Sie folgenden Code:

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

Beachten Sie, dass Sie mit den Parametern span und degree erhalten willkürliche Glätte spielen können.

+0

Die Daten sind zurück, danke für den Hinweis. Wahrscheinlich können Sie Ihre Antwort entsprechend ändern. – leo

1

Mai ist zu spät, aber Sie haben Optionen mit ggplot (und dplyr). Erstens, wenn Sie nur eine Löss Linie über Punkte darstellen möchten, können Sie versuchen:

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

Andere Art und Weise, durch predict() Funktion ist eine Löss-Anpassung. Zum Beispiel habe ich dplyr Funktionen Prognosen zu neuer Spalte "loess" genannt hinzuzufügen:

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

aktualisieren: Hinzugefügt Codezeile der Beispieldaten zur Verfügung gestellt

Verwandte Themen