Ich habe eine Streudiagramm. Wie kann ich eine nichtlineare Trendlinie hinzufügen?
r
data-visualization
nonlinear-regression
trend
Karina Khusainova
quelle
quelle
Antworten:
Lassen Sie uns einige Daten erstellen.
Im Folgenden wird gezeigt, wie Sie eine Lösslinie oder die Anpassung einer nichtlinearen Regression anpassen können.
quelle
Wenn Sie verwenden
ggplot2
(das dritte Zeichnungssystem in R nach Basis R und Gitter), wird dies zu:Sie können festlegen, wie die Daten geglättet werden sollen:
?stat_smooth
Einzelheiten und Beispiele finden Sie unter.quelle
stat_smooth
zugegriffen haben, indem Sie?stat_smooth
wie von Vincent angegeben tippten. :-)Ohne genau zu wissen, wonach Sie suchen, können Sie mit dem
lattice
Paket ganz einfach eine Lösskurve hinzufügentype="smooth"
. z.B,Siehe
help("panel.loess")
Argumente, die an die Löß-Anpassungsroutine übergeben werden können, um beispielsweise den Grad des zu verwendenden Polynoms zu ändern.Aktualisieren
Um die Farbe der Lösskurve zu ändern, können Sie eine kleine Funktion schreiben und als
panel
Parameter übergeben anxyplot
:quelle
Ihre Frage ist ein bisschen vage, deshalb werde ich einige Annahmen darüber machen, was Ihr Problem ist. Es wäre sehr hilfreich, wenn Sie ein Streudiagramm erstellen und die Daten ein wenig beschreiben könnten. Wenn ich schlechte Annahmen mache, ignoriere bitte meine Antwort.
Erstens ist es möglich, dass Ihre Daten einen Prozess beschreiben, den Sie vernünftigerweise für nicht linear halten. Wenn Sie beispielsweise versuchen, die Entfernung zu verringern, in der ein Auto mit plötzlichem Bremsen anhält, und dies im Verhältnis zur Geschwindigkeit des Autos, sagt uns die Physik, dass die Energie des Fahrzeugs proportional zum Quadrat der Geschwindigkeit ist - nicht zur Geschwindigkeit selbst. Vielleicht möchten Sie in diesem Fall die polynomiale Regression ausprobieren, und (in R) können Sie so etwas tun
model <- lm(d ~ poly(v,2),data=dataset)
. Es gibt eine Menge Dokumentation darüber, wie verschiedene Nichtlinearitäten in das Regressionsmodell aufgenommen werden können.Auf der anderen Seite, wenn Sie eine Linie haben, die "wackelig" ist und Sie nicht wissen, warum sie wackelig ist, dann wäre ein guter Ausgangspunkt wahrscheinlich eine lokal gewichtete Regression oder
loess
in R. Dies führt eine lineare Regression auf einer kleinen Linie durch Region, im Gegensatz zum gesamten Datensatz. Es ist am einfachsten, sich eine "k am nächsten Nachbarn" -Version vorzustellen, bei der Sie den Wert der Kurve an einem beliebigen Punkt berechnen, die k Punkte finden, die dem interessierenden Punkt am nächsten liegen, und sie mitteln. Löss ist einfach so, verwendet aber eine Regression anstelle eines geraden Durchschnitts. Verwenden Sie dazumodel <- loess(y ~ x, data=dataset, span=...)
, wobei diespan
Variable den Grad der Glättung steuert.Auf der dritten Hand (aus den Händen laufen) - sprechen Sie über Trends? Ist das ein zeitliches Problem? Wenn dies der Fall ist, seien Sie vorsichtig, wenn Sie die Trendlinien und die statistische Signifikanz überschätzen. Trends in Zeitreihen können in "autoregressiven" Prozessen auftreten, und für diese Prozesse kann die Zufälligkeit des Prozesses gelegentlich Trends aus zufälligem Rauschen konstruieren, und der falsche statistische Signifikanztest kann Ihnen sagen, dass er signifikant ist, wenn er nicht signifikant ist!
quelle
Beispielpunkte für Streudiagramme und glatte Kurve in dasselbe Diagramm einfügen:
quelle