Bestimmen von Parametern (p, d, q) für die ARIMA-Modellierung

10

Ich bin ziemlich neu in der Statistik und R. Ich würde gerne wissen, wie die ARIMA-Parameter für meinen Datensatz ermittelt werden. Können Sie mir helfen, dasselbe mit R und theoretisch (wenn möglich) herauszufinden?

Die Daten reichen vom 12. Januar bis 14. März und zeigen die monatlichen Verkäufe. Hier ist der Datensatz:

99 58 52 83 94 73 97 83 86 63 77 70 87 84 60 105 87 93 110 71 158 52 33 68 82 88 84

Und hier ist der Trend:

Geben Sie hier die Bildbeschreibung ein

Die Daten zeigen keinen Trend, kein saisonales Verhalten oder keine Zyklizität.

Raunak87
quelle

Antworten:

9

Im Allgemeinen sollten Sie ein Lehrbuch für fortgeschrittene Zeitreihenanalysen lesen (in Einführungsbüchern werden Sie normalerweise angewiesen, nur Ihrer Software zu vertrauen), wie z. B. Zeitreihenanalyse von Box, Jenkins & Reinsel. Sie können Details zum Box-Jenkins-Verfahren auch durch Googeln finden. Beachten Sie, dass es andere Ansätze als Box-Jenkins gibt, z. B. AIC-basierte.

In R konvertieren Sie zuerst Ihre Daten in ein ts(Zeitreihen-) Objekt und teilen R mit, dass die Häufigkeit 12 (monatliche Daten) beträgt:

require(forecast)
sales <- ts(c(99, 58, 52, 83, 94, 73, 97, 83, 86, 63, 77, 70, 87, 84, 60, 105, 87, 93, 110, 71, 158, 52, 33, 68, 82, 88, 84),frequency=12)

Sie können die (teilweisen) Autokorrelationsfunktionen zeichnen:

acf(sales)
pacf(sales)

Diese deuten nicht auf ein AR- oder MA-Verhalten hin.

Dann passen Sie ein Modell an und inspizieren es:

model <- auto.arima(sales)
model

Siehe ?auto.arimafür Hilfe. Wie wir sehen, auto.arimawählt ein einfaches (0,0,0) Modell, da es weder Trend noch Saisonalität noch AR oder MA in Ihren Daten sieht. Schließlich können Sie die Zeitreihen und Prognosen prognostizieren und grafisch darstellen:

plot(forecast(model))

Prognose

Schauen Sie sich an ?forecast.Arima(beachten Sie die Hauptstadt A!).

Dieses kostenlose Online-Lehrbuch ist eine großartige Einführung in die Analyse und Vorhersage von Zeitreihen mit R. Sehr zu empfehlen.

Stephan Kolassa
quelle
Hallo Stephan, ich habe die Daten und das Diagramm für meinen Datensatz hinzugefügt. Wie Sie sehen, habe ich nur 27 Datenpunkte, daher laufe ich hier mit Dämpfen. Könnten Sie hier etwas vorschlagen.
Raunak87
Ich habe die Antwort bearbeitet. Ihre Serie weist nicht viel Struktur auf, daher können Sie wirklich wenig tun. Da Sie im Wesentlichen Rauschen und wenig anderes haben, erhalten Sie große Vorhersageintervalle.
Stephan Kolassa
4

Zwei Dinge. Ihre Zeitreihe ist monatlich, Sie benötigen mindestens 4 Jahre Daten für eine sinnvolle ARIMA-Schätzung, da reflektierte 27 Punkte nicht die Autokorrelationsstruktur ergeben. Dies kann auch bedeuten, dass Ihr Umsatz von einigen externen Faktoren beeinflusst wird und nicht mit dem eigenen Wert korreliert. Versuchen Sie herauszufinden, welcher Faktor Ihren Umsatz beeinflusst und welcher Faktor gemessen wird. Anschließend können Sie eine Regression oder VAR (Vector Autoregression) ausführen, um Prognosen abzurufen.

Wenn Sie absolut nichts anderes als diese Werte haben, verwenden Sie am besten eine exponentielle Glättungsmethode, um eine naive Prognose zu erhalten. Die exponentielle Glättung ist in R verfügbar.

Zweitens sehen Sie den Verkauf eines Produkts nicht isoliert, der Verkauf von zwei Produkten könnte korreliert sein. Beispielsweise kann ein Anstieg des Kaffeeverkaufs einen Rückgang des Teeverkaufs widerspiegeln. Verwenden Sie die anderen Produktinformationen, um Ihre Prognose zu verbessern.

Dies geschieht normalerweise bei Verkaufsdaten im Einzelhandel oder in der Lieferkette. Sie zeigen nicht viel Autokorrelationsstruktur in der Serie. Auf der anderen Seite arbeiten Methoden wie ARIMA oder GARCH normalerweise mit Börsendaten oder Wirtschaftsindizes, bei denen Sie im Allgemeinen eine Autokorrelation haben.

NG_21
quelle
3

Dies ist wirklich ein Kommentar, der jedoch den zulässigen Wert überschreitet. Daher poste ich ihn als Quasi-Antwort, da er den richtigen Weg zur Analyse von Zeitreihendaten vorschlägt. .

Die bekannte Tatsache, die hier und anderswo oft ignoriert wird, ist, dass der theoretische ACF / PACF, der zur Formulierung eines vorläufigen ARIMA-Modells verwendet wird, keine Impulse / Pegelverschiebungen / saisonalen Impulse / lokalen Zeittrends voraussetzt. Zusätzlich werden konstante Parameter und eine konstante Fehlervarianz über die Zeit vorausgesetzt. In diesem Fall wird die 21. Beobachtung (Wert = 158) leicht als Ausreißer / Impuls gekennzeichnet, und eine vorgeschlagene Anpassung von -80 ergibt einen modifizierten Wert von 78. Der resultierende ACF / PACF der modifizierten Reihe zeigt wenig oder keinen Hinweis auf eine stochastische (ARIMA) Struktur. In diesem Fall war die Operation ein Erfolg, aber der Patient starb. Der Stichproben-ACF basiert auf der Kovarianz / Varianz, und eine übermäßig aufgeblasene / aufgeblähte Varianz führt zu einer Abwärtsverzerrung des ACF. Prof. Keith Ord hat dies einmal als "Alice im Wunderland-Effekt" bezeichnet.

IrishStat
quelle
2

Wie Stephan Kolassa betont hat, sind Ihre Daten nicht sehr strukturiert. Die Autokorrelationsfunktionen schlagen keine ARMA-Struktur vor (siehe acf(sales), pacf(sales)) und forecast::auto.arimawählen keine AR- oder MA-Reihenfolge.

require(forecast)
require(tsoutliers)
fit1 <- auto.arima(sales, d=0, D=0, ic="bic")
fit1
#ARIMA(0,0,0) with non-zero mean 
#Coefficients:
#      intercept
#        81.3704
#s.e.     4.4070

Beachten Sie jedoch, dass die Null der Normalität in den Residuen bei einem Signifikanzniveau von 5% abgelehnt wird.

JarqueBera.test(residuals(fit1))[[1]]
#X-squared = 12.9466, df = 2, p-value = 0.001544

Hinweis: JarqueBera.testbasiert auf der jarque.bera.testim Paket verfügbaren Funktion tseries.

Einschließlich des additiven Ausreißers bei Beobachtung 21, der mit der tsoutliersNormalität erkannt wird, ergibt sich eine Normalität in den Residuen. Somit werden die Schätzung des Abschnitts und die Vorhersage von der äußeren Beobachtung nicht beeinflusst.

res <- tsoutliers::tso(sales, types=c("AO", "TC", "LS"), 
  args.tsmethod=list(ic="bic", d=0, D=0))
res
#ARIMA(0,0,0) with non-zero mean 
#Coefficients:
#      intercept     AO21
#        78.4231  79.5769
#s.e.     3.3885  17.6072
#sigma^2 estimated as 298.5:  log likelihood=-115.25
#AIC=236.49   AICc=237.54   BIC=240.38
#Outliers:
#  type ind time coefhat tstat
#1   AO  21 2:09   79.58  4.52
JarqueBera.test(residuals(res$fit))[[1]]
#X-squared = 1.3555, df = 2, p-value = 0.5077
javlacalle
quelle
1
Es ist nicht sinnvoll, einen Jarque Bera-Test mit , da (i) er auf einer asymptotischen Näherung beruht, die erst dann einsetzt, wenn weit in den Hunderten liegt, und (ii) tatsächlich ein formaler Hypothesentest beantwortet die falsche Frage (wir wissen, dass die Daten nicht genau normal sind; die Frage ist wirklich, wie stark wir von potenzieller Nicht-Normalität betroffen sein könnten, mit der der Test nicht spricht.nn=12n
Glen_b -Reinstate Monica