Laut Statsmodels ist ARIMA nicht geeignet, da Serien nicht stationär sind. Wie wird das getestet?

12

Ich habe eine Zeitreihe, die ich mit Pythons Statistikmodellen ARIMA api modellieren möchte. Wenn ich Folgendes bewerbe:

from statsmodels.tsa.arima_model import ARIMA
model = ARIMA(data['Sales difference'].dropna(), order=(2, 1, 2))
results_AR = model.fit(disp=-1)

Ich erhalte folgende Fehlermeldung:

ValueError: The computed initial AR coefficients are not stationary
You should induce stationarity, choose a different model order, or you can
pass your own start_params.

Aber ich habe die Daten schon differenziert:

data['Sales'] = data['Sales'] - data['Sales'].shift() 

Was kann ich noch tun, um Stationarität zu induzieren?

Und welchen Test führt die ARIMA-API aus, um festzustellen, dass die Daten nicht stationär sind?

Meine ursprüngliche Zeitreihe sieht aus wie: Geben Sie hier die Bildbeschreibung ein

Die differenzierte Zeitreihe sieht aus wie: Geben Sie hier die Bildbeschreibung ein

Und mein ACF-Plot sieht aus wie: Geben Sie hier die Bildbeschreibung ein

Skander H.
quelle
Die Prämisse ist falsch. Durch die Differenzierung in der ARIMA-Familie können Polynomtrends entfernt und einige nichtstationäre Modelle in stationäre Modelle konvertiert werden. Die ARMA-Familie erlaubt keine Differenzierung und enthält keine instationären Modelle.
Michael R. Chernick
2
@ MichaelChernick, aber ich rufe die ARIMA-API an, nicht die ARMA-API. Vermisse ich etwas
Skander H.

Antworten:

4

Sie fragten: "Was kann ich noch tun, um Stationarität zu induzieren?" Wenn eine Serie eine Pegelverschiebung (Symptom) aufweist, ist dies ein Beispiel für Nichtstationarität. Das richtige Mittel ist, die Daten zu "de-bedeuten", um sie nicht zu unterscheiden. Zusätzlich kann eine Reihe eine Änderung des deterministischen Trends oder einen saisonalen Impuls aufweisen, der durch Interventionserkennungsschemata korrigiert werden kann. Wenn sich die Parameter der Serie im Laufe der Zeit ändern (Symptom), besteht die richtige Abhilfe darin, die Bruchstellen über einen Chow-Test zu finden und den neuesten Satz oder eine Form eines Schwellenwertmodells (TAR) zu verwenden . Wenn eine Serie eine Änderung der Fehlervarianz im Laufe der Zeit aufweist (Symptom), kann das richtige Mittel WLS, eine Form von GLS oder eine Form von Leistungstransformation sein oder wenn diese relativ einfachen Abhilfemaßnahmen in irgendeiner Form eines GARCH-Modells fehlschlagen.

Wenn Sie Ihre Originaldaten veröffentlichen, kann ich Ihnen möglicherweise weiterhelfen.

IrishStat
quelle
2

Lesen Sie sorgfältig: Es heißt nicht, dass die Zeitreihe nicht stationär ist. Es heißt, dass die Anfangskoeffizienten nicht stationär sind (was vermutlich bedeutet, dass sie keinen stationären Prozess beschreiben).

Sie könnten versuchen, Ihre eigenen Vermutungen für Startwerte anzustellen, wie es nahelegt. Aber ich vermute, dass es in erster Linie schlechte Startwerte wählt, weil das Modell falsch spezifiziert ist. Wenn Sie die Zeitreihen bereits differenziert haben, möchten Sie wahrscheinlich auch nicht die Integrationsreihenfolge 1 angeben. Sie meinen wahrscheinlich order = (2, 0, 2), nicht order = (2, 1, 2).

Der Lakoniker
quelle
0

In einem Zeitreihensignal kann Stationarität unter Verwendung von Fenstern eingeführt werden. Sie können Ihr einzelnes Zeitreihensignal mithilfe einer guten Fenstertechnik mit Überlappung in kleinere Signale aufteilen. Eine Fensterung ist erforderlich, um Störspitzen im Frequenzbereich zu vermeiden, und eine Überlappung ist erforderlich, um Signalenergie zu sparen. Typischerweise hat ein Sprachsignal (8-kHz-Abtastfrequenz) 30-ms-Rahmen, was 240 Abtastwerte pro Rahmen ergibt. Dies wird unter Verwendung eines Hamming-Fensters mit 50% Überlappung gewunden.

SamParker
quelle
0

Die differenzierte Zeitreihe ist nicht stationär, da sie keine konstante Varianz aufweist. Sie könnten eine logarithmische Differenzierung versuchen.

Juan Ruiz Sánchez
quelle