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:
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:
Meine Fragen sind:
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.
Ich weiß nicht, wie ich vorgehen soll, wenn ich die ACF- und PACF-Diagramme habe.
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
quelle
str(x)
?R
simple nicht. Ich würde nach kommerziellen Lösungen suchen, wenn für das Produkt, das Sie prognostizieren möchten, hohe Lager- / Herstellungskosten anfallen.R
hat schwerwiegende Einschränkungen für Prognoseaufgaben wie Ihre. Fragen zur täglichen Vorhersage finden Sie auf dieser Website.Antworten:
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
tbats
Modell sein, das explizit mehrere Arten von Saisonalitäten modelliert. Laden Sie dasforecast
Paket:Ihre Ausgabe von
str(x)
gibt an, dassx
noch keine Informationen über potenziell mehrere Saisonalitäten enthalten sind. Schauen Sie sich?tbats
die Ausgabe von an und vergleichen Sie siestr(taylor)
. Ordnen Sie die Saisonalitäten zu:Jetzt können Sie ein
tbats
Modell anpassen. (Seien Sie geduldig, dies kann eine Weile dauern.)Schließlich können Sie Folgendes vorhersagen und zeichnen:
Sie sollten nicht
arima()
oder verwendenauto.arima()
, da diese nur eine einzige Art von Saisonalität verarbeiten können: entweder wöchentlich oder jährlich. Fragen Sie mich nicht, wasauto.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:
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()
ats
mitfrequency=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 .
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 denxreg
Parameter von einauto.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.
quelle
R
, daR
es nicht in der Lage ist, mehrjähriges ARIMA zu verarbeiten.tbats
ähnlichen Modell untersuchen.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.
quelle
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.
quelle