Finden von Wendepunkten in R aus geglätteten Daten


13

Ich habe einige Daten, die ich glatt benutze loess. Ich möchte die Wendepunkte der geglätteten Linie finden. Ist das möglich? Ich bin mir sicher, dass jemand eine ausgefallene Methode entwickelt hat, um dieses Problem zu lösen. Ich meine, schließlich ist es R!

Ich kann die Glättungsfunktion, die ich verwende, problemlos ändern. Ich habe es nur benutzt, loessweil es das ist, was ich in der Vergangenheit benutzt habe. Aber jede Glättungsfunktion ist in Ordnung. Mir ist klar, dass die Wendepunkte von der von mir verwendeten Glättungsfunktion abhängen. Ich bin damit einverstanden. Ich möchte damit beginnen, nur eine Glättungsfunktion zu haben, die dabei hilft, die Wendepunkte auszuspucken.

Hier ist der Code, den ich benutze:

x = seq(1,15)
y = c(4,5,6,5,5,6,7,8,7,7,6,6,7,8,9)
plot(x,y,type="l",ylim=c(3,10))
lo <- loess(y~x)
xl <- seq(min(x),max(x), (max(x) - min(x))/1000)
out = predict(lo,xl)
lines(xl, out, col='red', lwd=2)

Bildbeschreibung hier eingeben


3
Vielleicht möchten Sie einen Blick auf die Change-Point-Analyse werfen .
Nico

Ich habe diese Codezeile als sehr nützlich empfunden: infl <- c (FALSE, diff (diff (out)> 0)! = 0) Aber dieser Code findet alle Wendepunkte, unabhängig davon, ob sie nach oben oder unten zeigen. Wie kann ich erkennen, welche Punkte sich in einer Zeitreihe nach oben und welche nach unten biegen? Zeichnen und färben Sie beispielsweise den Aufwärtswendepunkt grün und den Abwärtswendepunkt rot.
user3511894

Antworten:


13

Aus der Perspektive der Verwendung von R zum Ermitteln der Flexionen in der geglätteten Kurve müssen Sie nur die Stellen in den geglätteten y-Werten finden, an denen die Änderung in y das Vorzeichen wechselt.

infl <- c(FALSE, diff(diff(out)>0)!=0)

Anschließend können Sie dem Diagramm Punkte hinzufügen, an denen diese Beugungen auftreten.

points(xl[infl ], out[infl ], col="blue")

Unter dem Gesichtspunkt der Suche nach statistisch aussagekräftigen Wendepunkten stimme ich @nico zu, dass Sie sich mit der Analyse von Änderungspunkten befassen sollten, die manchmal auch als segmentierte Regression bezeichnet wird.


Dies scheint die Arbeit etwas gut zu machen. Ich verstehe, dass es nicht ideal ist und das Ergebnis ist sicherlich nicht ideal. Vielen Dank für den Beitrag. Es deckt die meisten Fälle mit Ausnahme von Dingen wie einer geraden Linie ab.
user164846

3
Ich bin mir nicht sicher, ob ich das verstehe, @ user164846. Eine gerade Linie hat keine Wendepunkte.
Jean V. Adams

Vielleicht möchten Sie auch einen Blick auf Glätter werfen, die sofort Ableitungen liefern, z. B. Savitzky-Golay-Filter. Die Wahl des Glätters sollte jedoch immer von Ihren Daten und Ihrer Anwendung abhängen, nicht umgekehrt!
cbeleites unterstützt Monica am

4

Hier gibt es Probleme auf mehreren Ebenen.

Zuallererst ist Löss nur ein Glatter und es gibt viele, viele zur Auswahl. Optimisten argumentieren, dass nahezu jeder vernünftige Glätter ein echtes Muster findet und dass nahezu alle vernünftigen Glätter sich auf echte Muster einigen. Pessimisten argumentieren, dass dies das Problem ist und dass "vernünftige Glätter" und "echte Muster" hier in Bezug aufeinander definiert werden. Warum Löss und warum ist das Ihrer Meinung nach eine gute Wahl? Die Wahl ist nicht nur eine einzige Glättung oder eine einzige Implementierung einer Glättung (nicht alles, was unter dem Namen Löss oder Niedrig steht, ist softwarebezogen identisch), sondern auch ein einziger Glättungsgrad (selbst wenn dies von der Software gewählt wird) Routine für Sie). Sie erwähnen diesen Punkt, aber das spricht ihn nicht an.

Genauer gesagt, wie Ihr Spielzeugbeispiel zeigt, können grundlegende Merkmale wie Wendepunkte von Löss leicht nicht bewahrt werden (auch nicht, um Löss herauszustellen). Ihr erstes lokales Minimum verschwindet und Ihr zweites lokales Minimum wird durch die von Ihnen gezeigte bestimmte Glättung verschoben. Es ist zu erwarten, dass Flexionen, die durch Nullen der zweiten Ableitung anstatt der ersten definiert sind, noch launischer sind.


Ich habe mich für Löß entschieden, weil ich es aus dem Internet geholt habe. Ich bin sehr erfahren im Glätten im Allgemeinen, deshalb habe ich einfach Code online geholt. Hast du einen besseren Vorschlag?
user164846

Entschuldigung, aber ich verstehe Ihren Kommentar nicht. Wenn Sie sehr erfahren in der Glättung sind, sollten Sie Argumente haben, mit denen Glätter die Beugung am besten bewahren und gleichzeitig das Rauschen unterdrücken. Das scheint mir ein widersprüchliches Ziel zu sein, aber ich würde mich über technische Argumente freuen, warum ich mich irre.
Nick Cox

Sorry, ich meine nicht "unerfahren" haha
user164846

1
Aha. Das Leben ist kurz und man kann nicht jede mögliche Methode ausprobieren. Wir können Ihre realen Daten nicht sehen, aber Ihr Spielzeugbeispiel unterstreicht, dass durch Glätten identifizierbare Strukturen entfernt werden können.
Nick Cox

2

Es gibt eine Reihe großartiger Ansätze für dieses Problem. Einige schließen ein. (1) - changepoint-package (2) - segmented-package. Sie müssen jedoch die Anzahl der Änderungspunkte auswählen. (3) MARS wie im -Erd- Paket implementiert

Abhängig von Ihrem Bias / Varianz-Kompromiss erhalten Sie von allen etwas unterschiedliche Informationen. -segmentiert- ist einen Blick wert. Unterschiedliche Anzahl von Wechselpunktmodellen kann mit AIC / BIC verglichen werden


1

Sie könnten vielleicht die FDA-Bibliothek verwenden, und sobald Sie eine geeignete kontinuierliche Funktion geschätzt haben, können Sie leicht die Stellen finden, an denen die zweite Ableitung Null ist.

FDA-KRAN

FDA Intro


Nullen der ersten Ableitung definieren Minima und Maxima. Ich denke du meinst die zweite. Was ist "leicht"? Es gibt mehr als eine Möglichkeit, numerisch zu differenzieren.
Nick Cox

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.