Tägliche Zeitreihenanalyse

24

Ich versuche eine Zeitreihenanalyse durchzuführen und bin neu in diesem Bereich. Ich habe eine tägliche Zählung eines Ereignisses von 2006-2009 und möchte ein Zeitreihenmodell dazu passen. Hier sind die Fortschritte, die ich gemacht habe:

timeSeriesObj = ts(x,start=c(2006,1,1),frequency=365.25)
plot.ts(timeSeriesObj)

Das resultierende Diagramm, das ich erhalte, ist:

Zeitreihen-Plot

Um zu überprüfen, ob Saisonalität und Trend in den Daten vorhanden sind oder nicht, folge ich den in diesem Beitrag genannten Schritten :

ets(x)
fit <- tbats(x)
seasonal <- !is.null(fit$seasonal)
seasonal

und in Rob J Hyndmans Blog :

library(fma)
fit1 <- ets(x)
fit2 <- ets(x,model="ANN")

deviance <- 2*c(logLik(fit1) - logLik(fit2))
df <- attributes(logLik(fit1))$df - attributes(logLik(fit2))$df 
#P value
1-pchisq(deviance,df)

Beide Fälle weisen darauf hin, dass es keine Saisonalität gibt.

Wenn ich die ACF & PACF der Serie zeichne, bekomme ich Folgendes:

ACF PACF

Meine Fragen sind:

  1. Ist dies die Art und Weise, mit täglichen Zeitreihendaten umzugehen? Diese Seite schlägt vor, dass ich sowohl die wöchentlichen als auch die jährlichen Muster betrachten sollte, aber der Ansatz ist mir nicht klar.

  2. Ich weiß nicht, wie ich vorgehen soll, wenn ich die ACF- und PACF-Diagramme habe.

  3. Kann ich einfach die auto.arima Funktion benutzen?

    fit <- arima (myts, order = c (p, d, q)

***** Aktualisiert Auto.Arima Ergebnisse ******

Wenn ich die Häufigkeit der Daten gemäß Rob Hyndmans Kommentaren hier auf 7 ändere, wählt auto.arima ein saisonales ARIMA-Modell aus und gibt Folgendes aus:

Series: timeSeriesObj 
ARIMA(1,1,2)(1,0,1)[7]                    

Coefficients:
       ar1      ma1     ma2    sar1     sma1
      0.89  -1.7877  0.7892  0.9870  -0.9278
s.e.   NaN      NaN     NaN  0.0061   0.0162

sigma^2 estimated as 21.72:  log likelihood=-4319.23
AIC=8650.46   AICc=8650.52   BIC=8682.18 

****** Saisonalitätsprüfung aktualisiert ******

Wenn ich die Saisonalität mit der Frequenz 7 teste, wird True ausgegeben, aber mit der Saisonalität 365.25 wird false ausgegeben. Reicht dies aus, um auf einen Mangel an Jahreszeitlichkeit zu schließen?

timeSeriesObj = ts(x,start=c(2006,1,1),frequency=7)
fit <- tbats(timeSeriesObj)
seasonal <- !is.null(fit$seasonal)
seasonal

kehrt zurück:

True

während

timeSeriesObj = ts(x,start=c(2006,1,1),frequency=365.25)
fit <- tbats(timeSeriesObj)
seasonal <- !is.null(fit$seasonal)
seasonal

kehrt zurück:

False
statBeginner
quelle
Welche Leistung bringt das str(x)?
S. Kolassa - Wiedereinsetzung von Monica am
Es ergibt num [1: 1460] 17 12 12 17 13 14 14 5 12 21 ...
statBeginner
Könnten Sie die Daten posten?
Prognose
Leider kann ich nicht.
statBeginner
2
OK, ich würde mich neben statistischen Tests zur Erkennung der Saisonalität auf visuelle Inspektion und Domänenkenntnisse verlassen. Auf Ihre Frage, ob arima mit mehreren Saisonalitäten umgehen kann - Sicher, dass ARIMA mit jeder Art von Saisonalität umgehen kann, kann Rsimple nicht. Ich würde nach kommerziellen Lösungen suchen, wenn für das Produkt, das Sie prognostizieren möchten, hohe Lager- / Herstellungskosten anfallen. Rhat schwerwiegende Einschränkungen für Prognoseaufgaben wie Ihre. Fragen zur täglichen Vorhersage finden Sie auf dieser Website.
Prognostiker

Antworten:

25

Ihr ACF und PACF geben an, dass Sie mindestens eine wöchentliche Saisonalität haben, die durch die Spitzenwerte bei den Verzögerungen 7, 14, 21 usw. angezeigt wird.

Möglicherweise haben Sie auch eine jährliche Saisonabhängigkeit, obwohl dies aus Ihrer Zeitreihe nicht ersichtlich ist.

Ihre beste Wahl, wenn mehrere Saisonalitäten möglich sind, kann ein tbatsModell sein, das explizit mehrere Arten von Saisonalitäten modelliert. Laden Sie das forecastPaket:

library(forecast)

Ihre Ausgabe von str(x)gibt an, dass xnoch keine Informationen über potenziell mehrere Saisonalitäten enthalten sind. Schauen Sie sich ?tbatsdie Ausgabe von an und vergleichen Sie sie str(taylor). Ordnen Sie die Saisonalitäten zu:

x.msts <- msts(x,seasonal.periods=c(7,365.25))

Jetzt können Sie ein tbatsModell anpassen. (Seien Sie geduldig, dies kann eine Weile dauern.)

model <- tbats(x.msts)

Schließlich können Sie Folgendes vorhersagen und zeichnen:

plot(forecast(model,h=100))

Sie sollten nicht arima()oder verwenden auto.arima(), da diese nur eine einzige Art von Saisonalität verarbeiten können: entweder wöchentlich oder jährlich. Fragen Sie mich nicht, was auto.arima()mit Ihren Daten geschehen würde. Es kann eine der Jahreszeiten auswählen oder sie insgesamt ignorieren.


BEARBEITEN, um weitere Fragen aus einem Kommentar zu beantworten:

  1. Wie kann ich überprüfen, ob die Daten eine jährliche Saisonabhängigkeit haben oder nicht? Kann ich eine weitere Serie mit der Gesamtanzahl von Ereignissen pro Monat erstellen und deren ACF verwenden, um dies zu entscheiden?

Die Berechnung eines Modells anhand monatlicher Daten könnte eine Möglichkeit sein. Dann können Sie beispielsweise AICs zwischen Modellen mit und ohne Saisonalität vergleichen.

Ich würde jedoch lieber eine Holdout-Stichprobe verwenden, um Prognosemodelle zu bewerten. Halten Sie die letzten 100 Datenpunkte aus. Passen Sie ein Modell mit jährlicher und wöchentlicher Saisonalität an den Rest der Daten an (wie oben), und passen Sie dann ein Modell mit nur wöchentlicher Saisonalität an, z. B. mit auto.arima()a tsmit frequency=7. Prognose mit beiden Modellen in die Wartezeit. Überprüfen Sie anhand von MAE, MSE oder was auch immer für Ihre Verlustfunktion am relevantesten ist, welche einen niedrigeren Fehler aufweist. Wenn zwischen den Fehlern nur ein geringer Unterschied besteht, wählen Sie das einfachere Modell. Andernfalls verwenden Sie den mit dem niedrigeren Fehler.

Der Beweis für den Pudding liegt im Essen und der Beweis für das Zeitreihenmodell in der Vorhersage.

Verwenden Sie zur Verbesserung der Ergebnisse keine einzige Stichprobe (die angesichts des Anstiegs am Ende Ihrer Reihe möglicherweise irreführend ist), sondern verwenden Sie fortlaufende Ursprungsvorhersagen, die auch als " zeitreihenübergreifende Validierung" bezeichnet werden . (Ich empfehle sehr das gesamte kostenlose Online-Prognoselehrbuch .

  1. So können saisonale ARIMA-Modelle normalerweise nicht mit mehreren Saisonalitäten umgehen? Ist es eine Eigenschaft des Modells selbst oder ist es nur die Art und Weise, wie die Funktionen in R geschrieben sind?

Standard-ARIMA-Modelle verarbeiten Saisonalität durch saisonale Differenzierung. Für saisonale monatliche Daten würden Sie nicht die rohen Zeitreihen, sondern die Zeitreihen der Unterschiede zwischen März 2015 und März 2014, zwischen Februar 2015 und Februar 2014 usw. modellieren. (Um Prognosen im ursprünglichen Maßstab zu erhalten, müssen Sie natürlich erneut differenzieren.)

Es gibt keine sofort offensichtliche Möglichkeit, diese Idee auf mehrere Saisonalitäten auszudehnen .

Natürlich können Sie mit ARIMAX etwas tun, z. B. indem Sie monatliche Dummies einbinden, um die jährliche Saisonalität zu modellieren, und dann Residuen mit wöchentlichem saisonalem ARIMA modellieren. Wenn Sie dies in R tun möchten ts(x,frequency=7), erstellen Sie eine Matrix mit monatlichen Dummies und geben Sie diese in den xregParameter von ein auto.arima().

Ich erinnere mich an keine Veröffentlichung, die ARIMA speziell auf mehrere Saisonalitäten ausdehnt, obwohl ich sicher bin, dass jemand etwas in der Art gemacht hat, wie ich es in meinem vorherigen Absatz beschrieben habe.

S. Kolassa - Setzen Sie Monica wieder ein
quelle
Hier sind einige Fragen, die ich aufgrund Ihrer Antwort gestellt habe: 1. Wie kann ich überprüfen, ob die Daten eine jährliche Saisonalität haben oder nicht? Kann ich eine weitere Reihe von Ereignissen pro Monat erstellen und deren ACF verwenden, um dies zu entscheiden? 2. Saisonale ARIMA-Modelle können also normalerweise nicht mehrere Saisonalitäten verarbeiten? Ist es eine Eigenschaft des Modells selbst oder ist es nur die Art und Weise, wie die Funktionen in R geschrieben sind?
statBeginner
Aktualisierter Beitrag mit Ergebnissen von Auto.Arima mit wöchentlicher
Saisonabhängigkeit
1
@StephanKolassa, ich habe diesen Artikel von AT & T vor einiger Zeit gefunden , in dem mehrere saisonale ARIMA verwendet werden. Ein Modell wie das in Artikel ist in nicht möglich R, da Res nicht in der Lage ist, mehrjähriges ARIMA zu verarbeiten.
Prognostiker
2
@forecaster: cool, danke! Es scheint, als würden sie in Gleichung 3.1 doppelt differenzieren. Ich mache mir Sorgen, dass auf diese Weise viele Daten verloren gehen. Leider vergleichen sie ihre Ergebnisse nicht mit einer einfachen Benchmark, z. B. den Anforderungen der letzten Woche. Was mir gefällt, ist, wie sie auch Prognosekombinationen zwischen ihrem DSARIMA und einem tbatsähnlichen Modell untersuchen.
S. Kolassa - Wiedereinsetzung von Monica am
2
@StephanKolassa Ich stimme zu, ich bin ein großer Befürworter der Verwendung der naiven Prognose als Benchmark, wie in den Prinzipien der Prognose von Armstrong unterstützt, und füge nur dann Komplexität hinzu, wenn dies die Genauigkeit verbessert. In einigen Kaggle-Wettbewerben landete ich mit naiven Methoden in meinen Ensembles unter den Top 2 Perzentilen.
Prognostiker
3

Die beste Möglichkeit, saisonale Daten mit vorhandenen R-Paketen zu zerlegen, ist ceemdan () in Rlibeemd. Diese Technik extrahiert die Saisonalität mehrerer Perioden. Die Standardeinstellungen funktionieren gut. Es wird die Hilbert-Huang-Transformation anstelle der Fourier-Transformation verwendet. Die Fourier-Transformation hat den schwerwiegenden Nachteil, dass sie nur stationäre, lineare Daten verarbeiten kann, wenn die meisten interessierenden Reihen keine sind. Zum Beispiel ist der Zufallsspaziergang y_t = y_ {t-1} + e_t der einfachste und häufig anzutreffende Zufallsspaziergang. Andere Methoden halten die Amplitude der saisonalen Variation fest, wenn sie in der Praxis häufig variiert.

user162655
quelle
1
Weitere Informationen zum Umsetzen von Mathematik in Antworten finden Sie im grundlegenden MathJax-Lernprogramm und in der Referenz . Bitte begründen Sie auch die Behauptung des " Besten " (oder überlegen Sie, die Behauptung zu ändern) - es müsste mindestens so gut sein wie jede andere Option, nicht nur die meisten von ihnen.
Glen_b
1
Es könnte erwähnenswert sein, dass dieses Paket auf CRAN
Glen_b
2

Die von Ihnen aufgeworfenen Fragen wurden in R Time Series Forecasting: Fragen zu meiner Ausgabe behandelt . Bitte schauen Sie sich meine ausführliche Antwort und alle Kommentare in der Diskussion genau an, einschließlich derjenigen zur ursprünglichen Frage, da ich glaube, dass sie für Ihr Problem relevant sind. Sie können die Daten, die in der Post bereitgestellt wurden, tatsächlich als Lehrmoment für sich selbst verwenden. Nutzen Sie die gesamte Diskussion als Grundlage für das, was Sie tun sollten.

IrishStat
quelle
1
Vielen Dank! Ich werde die Daten aus diesem Beitrag verwenden, um Dinge auszuprobieren.
statBeginner