Warum gibt die STL-Funktion eine signifikante saisonale Variation mit zufälligen Daten?

11

Ich habe mit folgendem Code mit der Funktion stl (Seasonal Decomposition of Time Series by Loess) gezeichnet:

plot(stl(ts(rnorm(144), frequency=12), s.window="periodic"))

Es zeigt signifikante saisonale Schwankungen mit zufälligen Daten, die in den obigen Code eingegeben wurden (rnorm-Funktion). Jedes Mal, wenn dies ausgeführt wird, werden signifikante Abweichungen festgestellt, obwohl das Muster unterschiedlich ist. Zwei solche Muster sind unten gezeigt:

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

Wie können wir uns bei einigen Daten auf die STL-Funktion verlassen, wenn sie saisonale Schwankungen aufweist? Muss diese saisonale Variation im Hinblick auf einige andere Parameter gesehen werden? Vielen Dank für Ihren Einblick.

Der Code wurde von dieser Seite übernommen: Ist dies eine geeignete Methode, um saisonale Auswirkungen in Selbstmordzählungsdaten zu testen?

rnso
quelle
1
Dies geschieht, weil zufällige Daten "Muster" enthalten, wenn Ihre Anpassungstechnik über genügend Parameter verfügt.
bill_080
3
Der Begriff "signifikant" scheint hier keine Art von Signifikanztests zu reflektieren.
Nick Cox
1
Stl ist eine nichtparametrische datengesteuerte Methode, daher gibt es keine Möglichkeit, das Vorhandensein von saisonalen Unsicherheiten durch Signifikanztests zu quantifizieren.
Prognostiker

Antworten:

12

Die Lösszerlegung soll die Reihen glätten, indem Mittelwerte auf die Daten angewendet werden, so dass sie in Komponenten zerfallen, z. B. den Trend oder die Saison, die für die Analyse der Daten interessant sind. Diese Methode ist jedoch nicht dazu gedacht, einen formalen Test auf das Vorhandensein von Saisonalität durchzuführen .

Obwohl in Ihrem Beispiel stlein geglättetes Muster der saisonalen Periodizität zurückgegeben wird, ist dieses Muster nicht relevant, um die Dynamik der Serie zu erklären. Um dies zu sehen, können wir die Varianz jeder Komponente in Bezug auf die Varianz der Originalserie vergleichen.

set.seed(123)
x <- ts(rnorm(144, sd=1), frequency=12)
a <- stl(x, s.window="periodic")
apply(a$time.series, 2, var) / var(x)
#   seasonal      trend  remainder 
# 0.07080362 0.07487838 0.81647852 

Wir können sehen, dass es der Rest ist, der den größten Teil der Varianz in den Daten erklärt (wie wir es für einen Prozess mit weißem Rauschen erwarten würden).

Wenn wir eine Reihe mit Saisonalität nehmen, ist die relative Varianz der saisonalen Komponente viel relevanter (obwohl wir keine einfache Möglichkeit haben, sie zu testen, da Löss nicht parametrisch ist).

y <- diff(log(AirPassengers))
b <- stl(y, s.window="periodic")
apply(b$time.series, 2, var) / var(y)
#    seasonal       trend   remainder 
# 0.875463620 0.001959407 0.117832537 

Die relativen Varianzen zeigen, dass die Saisonalität die Hauptkomponente ist, die die Dynamik der Serie erklärt.


Ein nachlässiger Blick auf die Handlung von stlkann trügerisch sein. Das nette Muster, das von zurückgegeben wird stl, lässt uns vielleicht denken, dass ein relevantes saisonales Muster in den Daten identifiziert werden kann, aber ein genauerer Blick kann zeigen, dass dies tatsächlich nicht der Fall ist. Wenn der Zweck darin besteht, über das Vorhandensein von Saisonalität zu entscheiden, kann die Lösszerlegung als vorläufige Ansicht nützlich sein, sie sollte jedoch durch andere Instrumente ergänzt werden.

javlacalle
quelle
In Ihrem AirPassengers-Beispiel gibt es keinen Trend in der Ausgabe, während es einen klaren Trend in der Handlung gibt (AirPassengers). Der Trend kommt zu 0,86 (mit einer Saison von nur 0,1), wenn die Anweisung "diff (log (AirPassengers))" entfernt wird. Was soll getan werden?
Rnso
Ich habe ein Beispiel gegeben, das numerisch klar ist. In der Praxis reicht es möglicherweise nicht aus, nur die Varianz der geglätteten Komponenten zu vergleichen, um eine Schlussfolgerung über das Vorhandensein von Saisonalität zu ziehen. Wie Sie in diesem Fall festgestellt haben, dominiert beispielsweise die Varianz des Trends die Varianz der saisonalen Komponente, wenn der Trend nicht durch Differenzieren entfernt wird. Die Frage ist: Ist eine relative Varianz von 0,1 groß genug, um diese Komponente als relevant zu betrachten? Das Problem ist, dass es basierend auf Löss keine einfache Möglichkeit gibt, zu testen, ob die Varianz der Komponente signifikant ist.
Javlacalle
Wie ich bereits sagte, sollten wir in diesem und anderen Fällen andere Methoden anwenden, um das Vorhandensein von Saisonalität zu testen. Siehe zum Beispiel den zweiten Teil meiner Antwort hier . Sobald wir zu dem Schluss gekommen sind, dass die Daten saisonabhängig sind, können wir Löss verwenden, um das Muster dieser Komponente zu erhalten.
Javlacalle
Wie zeigt die relative Varianz zur besseren Verdeutlichung, wie viel ein Teil der Zerlegung in den Gesamtdaten spielt? IE 70% saisonal, 20% Trend. usw.
Ted Mosby
1
@ TedMosby Die Varianz ist ein Maß für die Variabilität / Streuung in den Daten. Die Summe der Varianzen der Komponenten (z. B. Trend, Saison) und der Varianz des Restes addieren sich zur Varianz der Originalserie. Auf diese Weise können wir durch Vergleichen der Varianz einer Komponente mit der Varianz der ursprünglichen Reihe eine Vorstellung davon bekommen, wie relevant die Komponente ist (dh wie viel der Variabilität in den Daten durch die Komponente erklärt wird).
Javlacalle
2

In ähnlicher Weise habe ich die Verwendung von Fourier-Modellen für nicht saisonale Daten gesehen, die eine saisonale Struktur in die Anpassungs- und Prognosewerte zwangen und ein ähnliches (keuchendes!) Ergebnis verursachten. Das Anpassen eines vermuteten Modells gibt dem Benutzer das, was er auferlegt / vermutet, was nicht immer das ist, was eine gute Analyse vorschlagen / liefern würde.

IrishStat
quelle
1
stl()basiert nicht auf Fourier-Ideen. Obwohl ich noch niemanden gesehen habe, der eine "sinnlose" Analyse befürwortet, ist zu beachten, dass jede angepasste Modellfamilie als auferlegt oder vermutet angesehen werden kann. Die Frage ist, inwieweit ein Verfahren den Benutzern die Möglichkeit bietet, zu erkennen, ob und wie es für einen bestimmten Datensatz schlecht funktioniert.
Nick Cox
@ NickCox ganz richtig ....
IrishStat