Ich rüste eine tägliche Zeitreihe mit einem ARIMA-Modell aus. Die Daten werden täglich vom 01.02.2010 bis zum 30.07.2011 erhoben und beziehen sich auf den Zeitungsverkauf. Da ein wöchentliches Verkaufsmuster festgestellt werden kann (die tägliche durchschnittliche Anzahl der verkauften Exemplare ist normalerweise von Montag bis Freitag gleich und steigt dann am Samstag und Sonntag an), versuche ich, diese "Saisonalität" zu erfassen. Ausgehend von den Verkaufsdaten "Daten" erstelle ich die Zeitreihen wie folgt:
salests<-ts(data,start=c(2010,1),frequency=365)
und dann benutze ich die Funktion auto.arima (.), um das beste ARIMA-Modell über das AIC-Kriterium auszuwählen. Das Ergebnis ist immer ein nicht-saisonales ARIMA-Modell, aber wenn ich ein SARIMAs-Modell mit der folgenden Syntax als Beispiel versuche:
sarima1<-arima(salests, order = c(2,1,2), seasonal = list(order = c(1, 0, 1), period = 7))
Ich kann bessere Ergebnisse erzielen. Gibt es irgendetwas falsches in der ts command / arima Spezifikation? Das Wochenmuster ist sehr stark, daher würde ich nicht mit so vielen Schwierigkeiten bei der Erfassung rechnen. Jede Hilfe wäre sehr nützlich. Vielen Dank, Giulia Deppieri
Aktualisieren:
Ich habe bereits einige Argumente geändert. Genauer gesagt wählt die Prozedur ARIMA (4,1,3) als bestes Modell, wenn ich es einstelle D=7
, aber AIC und die anderen guten Anpassungsindizes und Prognosen verbessern sich überhaupt nicht. Ich vermute, es gibt einige Fehler aufgrund von Verwechslungen zwischen Saisonalität und Periodizität.?!
Auto.arima-Aufruf verwendet und Ausgabe erhalten:
modArima<-auto.arima(salests,D=7,max.P = 5, max.Q = 5)
ARIMA(2,1,2) with drift : 1e+20
ARIMA(0,1,0) with drift : 5265.543
ARIMA(1,1,0) with drift : 5182.772
ARIMA(0,1,1) with drift : 1e+20
ARIMA(2,1,0) with drift : 5137.279
ARIMA(2,1,1) with drift : 1e+20
ARIMA(3,1,1) with drift : 1e+20
ARIMA(2,1,0) : 5135.382
ARIMA(1,1,0) : 5180.817
ARIMA(3,1,0) : 5117.714
ARIMA(3,1,1) : 1e+20
ARIMA(4,1,1) : 5045.236
ARIMA(4,1,1) with drift : 5040.53
ARIMA(5,1,1) with drift : 1e+20
ARIMA(4,1,0) with drift : 5112.614
ARIMA(4,1,2) with drift : 4953.417
ARIMA(5,1,3) with drift : 1e+20
ARIMA(4,1,2) : 4960.516
ARIMA(3,1,2) with drift : 1e+20
ARIMA(5,1,2) with drift : 1e+20
ARIMA(4,1,3) with drift : 4868.669
ARIMA(5,1,4) with drift : 1e+20
ARIMA(4,1,3) : 4870.92
ARIMA(3,1,3) with drift : 1e+20
ARIMA(4,1,4) with drift : 4874.095
Best model: ARIMA(4,1,3) with drift
Daher gehe ich davon aus, dass die Arima-Funktion verwendet werden sollte als:
bestOrder <- cbind(modArima$arma[1],modArima$arma[5],modArima$arma[2])
sarima1<-arima(salests, order = c(4,1,3))
ohne saisonale Komponentenparameter und Periodenspezifikationen. Daten und explorative Analysen zeigen, dass mit Ausnahme von August 2010 (wenn eine konstante Umsatzsteigerung zu verzeichnen ist) ungefähr dasselbe Wochenmuster für jede Woche berücksichtigt werden kann. Leider habe ich überhaupt keine Expertise in der Modellierung von Zeitreihen. Tatsächlich versuche ich diesen Ansatz, um eine alternative Lösung für andere parametrische und nicht parametrische Modelle zu finden, die ich versucht habe, für diese problematischen Daten zu passen. Ich habe auch viele abhängige numerische Variablen, aber sie haben bei der Erklärung der Antwortvariablen eine geringe Aussagekraft gezeigt: Zweifellos ist die Zeitkomponente der schwierigste Teil, den man modellieren kann. Darüber hinaus erwies sich die Konstruktion von Dummy-Variablen zur Darstellung von Monaten und Wochentagen als keine robuste Lösung.
quelle
Das Problem bei der Anpassung der saisonalen ARIMA an die täglichen Daten besteht darin, dass die "saisonale Komponente" möglicherweise nur am Wochenende oder nur an Wochentagen ausgeführt wird, sodass insgesamt eine nicht signifikante "saisonale Komponente" vorhanden ist. Nun müssen Sie Ihren Datensatz mit 6 Dummys erweitern, die die Wochentage darstellen, und möglicherweise mit monatlichen Indikatoren, um die jährlichen Auswirkungen darzustellen. Berücksichtigen Sie nun Ereignisse wie z. B. Feiertage und schließen Sie alle Lead-, Contemoraneous- oder Lag-Effekte für diese bekannten Variablen ein. Nein, die Daten enthalten möglicherweise ungewöhnliche Werte (Impulse), Pegelverschiebungen oder lokale Zeittrends. Darüber hinaus können sich die Wochentag-Effekte im Laufe der Zeit geändert haben, z. B. gab es in den ersten 20 Wochen keinen Samstags-Effekt, in den letzten 50 Wochen jedoch einen Samstags-Effekt.
quelle
Um die Reihenfolge der Saisonalität in meinen ts (tägliche Daten über 3 Jahre) zu bestimmen, habe ich diesen Code in Matlab verwendet:
s = 0; min = 1e + 07; n = Länge (x); für i = 1: 400 diff = x (i + 1: n) -x (1: ni); s (i) = Summe (abs (diff)); wenn (s (i)
Es gibt mir 365, was logisch ist.
quelle