Wie misst man die Glätte einer Zeitreihe in R?

25

Gibt es eine gute Möglichkeit, die Glätte einer Zeitreihe in R zu messen? Beispielsweise,

-1, -0.8, -0.6, -0.4, -0.2, 0, 0.2, 0.4, 0.6, 0.8, 1.0

ist viel glatter als

-1, 0.8, -0.6, 0.4, -0.2, 0, 0.2, -0.4, 0.6, -0.8, 1.0

obwohl sie den gleichen Mittelwert und die gleiche Standardabweichung haben. Es wäre cool, wenn es eine Funktion gäbe, mit der ich über eine Zeitreihe hinweg einen reibungslosen Score erzielen könnte.

agmao
quelle
4
Glätte hat in der Theorie der stochastischen Prozesse eine genau definierte Bedeutung. ("Ein Variogramm ist eine statistisch basierte, quantitative Beschreibung der Rauheit einer Oberfläche": goldensoftware.com/variogramTutorial.pdf , S. 16.) Die Glätte bezieht sich auf die Extrapolation des Variogramms auf den Abstand Null. (Die SD von aufeinanderfolgenden Differenzen und die Autokorrelation um eins sind schnelle und schmutzige Versionen davon). Die wesentlichen Informationen sind in den Koeffizienten der Taylor-Reihe bei 0 enthalten. Beispielsweise ist eine Nicht-Null-Konstante in der Tat grob; Eine Null höherer Ordnung bei 0 zeigt eine sehr glatte Reihe an.
Whuber
Ich habe auch von Hurst- Exponenten gehört.
Taylor
Wie lustig, ich habe mich genau das selbe gefragt. Danke fürs Schreiben!
Chris Beeley
@whuber: das ist eine antwort, kein kommentar.
Naught101
@ naught101 Ich möchte demütig darüber streiten: Mein Kommentar bezieht sich auf eine verwandte Situation und nur auf den theoretischen Prozess zur Modellierung von räumlichen Daten, nicht darauf, wie man diese Glätte tatsächlich einschätzen würde . Es gibt eine Kunst zu dieser Schätzung, mit der ich in mehreren Dimensionen vertraut bin, aber nicht in einer, die speziell ist (aufgrund der Richtung des Zeitpfeils). Ich zögere daher zu behaupten, dass die Anwendung der mehrdimensionalen Prozeduren auf Zeitreihen überhaupt ist konventioneller oder sogar ein guter Ansatz.
Whuber

Antworten:

22

Die Standardabweichung der Differenzen gibt Ihnen eine grobe Schätzung der Glätte:

x <- c(-1, -0.8, -0.6, -0.4, -0.2, 0, 0.2, 0.4, 0.6, 0.8, 1.0)
y <- c(-1, 0.8, -0.6, 0.4, -0.2, 0, 0.2, -0.4, 0.6, -0.8, 1.0)
sd(diff(x))
sd(diff(y))

Update: Wie Cyan hervorhebt, erhalten Sie ein maßstabsabhängiges Maß. Ein ähnliches skalenunabhängiges Maß würde den Variationskoeffizienten anstelle der Standardabweichung verwenden:

sd(diff(x))/abs(mean(diff(x)))
sd(diff(y))/abs(mean(diff(y)))

In beiden Fällen entsprechen kleine Werte glatteren Reihen.

Rob Hyndman
quelle
1
Diese Punktzahl ist nicht skalierungsinvariant. Dies kann je nach Anwendung sinnvoll sein oder auch nicht. (Und mein Vorschlag ist skaleninvariant, daher gilt das gleiche Problem.) Außerdem sollte darauf hingewiesen werden, dass kleinere Werte für die obige Bewertung glattere Zeitreihen anzeigen.
Cyan
1
Vielen Dank, @Cyan. Ich habe jetzt auch eine maßstabsunabhängige Version hinzugefügt.
Rob Hyndman
2
Haben Sie wirklich vor, diffin die Nenner zu kommen? Die Werte würden sich algebraisch reduzieren, (x[n]-x[1])/(n-1)was ein (grobes) Maß für den Trend ist, und müssten in vielen Fällen extrem nahe bei Null liegen, was zu einer instabilen und nicht fürchterlich aussagekräftigen Statistik führen würde. Ich bin verwirrt, aber vielleicht übersehen ich etwas Offensichtliches ...
whuber
1
Früher habe ich die diffAnnahme der Stationarität vermieden. Wenn es mit dem Nenner definiert wurde, abs(mean(x))würde die Skalierung nur funktionieren, wenn xes stationär war. Diffs zu nehmen bedeutet, dass es auch für stationäre Prozesse mit Differenzen funktioniert. Natürlich können Unterschiede nicht xstationär sein und dann gibt es immer noch Probleme. Das Skalieren von Zeitreihen ist aus diesem Grund schwierig. Aber ich nehme Ihren Standpunkt zur Stabilität an. Ich denke, um etwas besser zu machen, müsste man etwas wesentlich raffinierteres tun - zum Beispiel mit einem nichtparametrischen Glätter.
Rob Hyndman
1
Ich hätte gedacht, ein konstanter Trend sollte perfekt glatt sein, also sollte die Antwort 0 sein.
Rob Hyndman
13

Die Autokorrelation nach eins dient als Punktzahl und ist auch statistisch relativ einfach zu interpretieren.

cor(x[-length(x)],x[-1])

Partiturinterpretation:

  • Scores in der Nähe von 1 bedeuten eine gleichmäßig variierende Serie
  • Scores nahe 0 bedeuten, dass es keine lineare Beziehung zwischen einem Datenpunkt und dem folgenden gibt (dh, Plot (x [-Länge (x)], x [-1]) ergibt kein Streudiagramm mit irgendeiner offensichtlichen Linearität).
  • Werte nahe -1 deuten darauf hin, dass die Serie auf bestimmte Weise gezackt ist: Wenn ein Punkt über dem Mittelwert liegt, liegt der nächste wahrscheinlich ungefähr um den gleichen Betrag unter dem Mittelwert und umgekehrt.
Cyan
quelle
0

Sie könnten einfach die Korrelation mit der Zeitschrittzahl vergleichen. Dies wäre gleichbedeutend mit der Annahme des R² einer einfachen linearen Regression für die Zeitreihen. Beachten Sie jedoch, dass dies zwei sehr unterschiedliche Zeitreihen sind, sodass ich nicht weiß, wie gut das als Vergleich funktioniert.

naught101
quelle
4
Das wäre ein Maß für die Linearität mit der Zeit, aber nicht für die Glätte.
Rob Hyndman