Ich habe versucht, ARIMA-Modelle zu lernen und anzuwenden. Ich habe einen ausgezeichneten ARIMA-Text von Pankratz gelesen - Forecasting with Univariate Box - Jenkins Models: Concepts and Cases . Der Autor betont im Text insbesondere das Prinzip der Sparsamkeit bei der Auswahl von ARIMA-Modellen.
Ich fing an, mit der auto.arima()
Funktion in der R- Paket- Vorhersage zu spielen . Hier ist, was ich getan habe, ich habe ARIMA simuliert und mich dann beworben auto.arima()
. Unten sind 2 Beispiele. Wie Sie in beiden Beispielen sehen können auto.arima()
, wurde ein Modell eindeutig identifiziert, das viele als nicht sparsam betrachten würden. Insbesondere in Beispiel 2, in dem auto.arima()
ARIMA (3,0,3) als tatsächlich ARIMA (1,0,1) identifiziert wurde, wäre dies ausreichend und sparsam.
Unten sind meine Fragen. Über Anregungen und Empfehlungen würde ich mich freuen.
- Gibt es Hinweise, wann die mit automatischen Algorithmen identifizierten Modelle zu verwenden / zu ändern sind, wie z
auto.arima()
. - Gibt es Fallstricke bei der Verwendung von AIC (was meiner Meinung
auto.arima()
nach zur Identifizierung von Modellen verwendet wird)? - Kann ein automatischer Algorithmus erstellt werden, der sparsam ist?
Übrigens habe ich auto.arima()
nur als Beispiel genommen. Dies würde für jeden automatischen Algorithmus gelten.
Unten ist Beispiel # 1:
set.seed(182)
y <- arima.sim(n=500,list(ar=0.2,ma=0.6),mean = 10)
auto.arima(y)
qa <- arima(y,order=c(1,0,1))
qa
Unten sind die Ergebnisse von auto.arima()
. Bitte beachten Sie, dass alle Koeffizienten unwesentlich sind. dh Wert <2.
ARIMA(1,0,2) with non-zero mean
Coefficients:
ar1 ma1 ma2 intercept
0.5395 0.2109 -0.3385 19.9850
s.e. 0.4062 0.4160 0.3049 0.0878
sigma^2 estimated as 1.076: log likelihood=-728.14
AIC=1466.28 AICc=1466.41 BIC=1487.36
Unten sehen Sie die Ergebnisse der regulären Ausführung arima()
mit der Bestellung von ARIMA (1,0,1).
Series: y
ARIMA(1,0,1) with non-zero mean
Coefficients:
ar1 ma1 intercept
0.2398 0.6478 20.0323
s.e. 0.0531 0.0376 0.1002
sigma^2 estimated as 1.071: log likelihood=-727.1
AIC=1462.2 AICc=1462.28 BIC=1479.06
Beispiel 2:
set.seed(453)
y <- arima.sim(n=500,list(ar=0.2,ma=0.6),mean = 10)
auto.arima(y)
qa <- arima(y,order=c(1,0,1))
qa
Unten sind die Ergebnisse von auto.arima()
:
ARIMA(3,0,3) with non-zero mean
Coefficients:
ar1 ar2 ar3 ma1 ma2 ma3 intercept
0.7541 -1.0606 0.2072 0.1391 0.5912 0.5491 20.0326
s.e. 0.0811 0.0666 0.0647 0.0725 0.0598 0.0636 0.0939
sigma^2 estimated as 1.027: log likelihood=-716.84
AIC=1449.67 AICc=1449.97 BIC=1483.39
Nachfolgend sind die Ergebnisse aufgeführt, die regelmäßig arima()
mit der Bestellung von ARIMA (1,0,1) ausgeführt werden.
Series: y
ARIMA(1,0,1) with non-zero mean
Coefficients:
ar1 ma1 intercept
0.2398 0.6478 20.0323
s.e. 0.0531 0.0376 0.1002
sigma^2 estimated as 1.071: log likelihood=-727.1
AIC=1462.2 AICc=1462.28 BIC=1479.06
quelle
Antworten:
Hier gibt es ein paar Probleme. Stellen Sie sich zunächst nicht vor, dass die simulierte ARIMA tatsächlich in der von Ihnen angegebenen Reihenfolge vorliegt. Sie entnehmen eine Stichprobe aus dem angegebenen Modell, und aufgrund der Zufälligkeit ist das am besten passende Modell für die bestimmte Stichprobe möglicherweise nicht das Modell, aus dem die Simulationen erstellt wurden.
Ich erwähne dies wegen des zweiten und wichtigeren Problems: Die
auto.arima()
Funktion kann Modelle über einen effizienteren Anpassungsalgorithmus unter Verwendung von bedingten Quadratsummen schätzen, um eine übermäßige Rechenzeit für lange Reihen oder für komplexe saisonale Modelle zu vermeiden. Wenn dieser Schätzprozess verwendet wird,auto.arima()
die Informationskriterien für ein Modell angenähert (da die Protokollwahrscheinlichkeit des Modells nicht berechnet wurde). Eine einfache Heuristik wird verwendet, um zu bestimmen, ob die bedingte Schätzung der Quadratsummen aktiv ist, wenn der Benutzer nicht angibt, welcher Ansatz verwendet werden soll .approximation
(length(x)>100 | frequency(x)>12)
approximation
TRUE
approximation
auto.arima()
approximation = TRUE
arima()
Für Ihr Beispiel 1 sollten wir haben
Daher
auto.arima()
hat ein sparsameres Modell als das wahre Modell gewählt; ein ARIMA (0, 0, 1) wird gewählt. Dies basiert jedoch auf den Informationskriterien, und jetzt stimmen sie überein. Das ausgewählte Modell hat einen niedrigeren AIC, AICc und BIC, obwohl die Unterschiede für AIC und AICc gering sind. Zumindest jetzt entspricht die Auswahl den Normen für die Auswahl von Modellen auf der Grundlage von Informationskriterien.Der Grund für die Wahl des MA (1) bezieht sich meines Erachtens auf das erste von mir erwähnte Thema. Das heißt, dass das am besten zu einer Stichprobe passende Modell, das aus einer angegebenen ARIMA (p, d, q) gezogen wurde, möglicherweise nicht in der gleichen Größenordnung wie das wahre Modell liegt. Dies ist auf Stichproben zurückzuführen. Eine längere Serie oder ein längerer Einbrennzeitraum kann dazu beitragen, die Wahrscheinlichkeit zu erhöhen, dass das richtige Modell ausgewählt wird, aber setzen Sie nicht darauf.
Unabhängig davon lautet die Moral hier: Wenn etwas offensichtlich falsch aussieht, wie in Ihrer Frage, lesen Sie die zugehörige Manpage oder Dokumentation, um sich zu vergewissern, dass Sie verstehen, wie die Software funktioniert.
quelle
auto.arima()
auf das sich festgelegt hat, wenn dies also die einzigen beiden wären Kandidatenmodelle, die einfachere wäre ausgewählt worden ...)Vielen Dank an @ Gavin, @Irishstat und @Rob für die Beantwortung meiner Frage. Es ist klar, dass, wenn ich ein sparsames Modell von einem automatischen Algorithmus wie auto.arima benötige, das BIC-Informationskriterium im Gegensatz zum AIC verwendet werden sollte, besonders nachdem ich diesen Beitrag gelesen habe und den obigen @ Gavin .
Ich stimme auch @Irishstat sehr zu, dass die Auswahl eines Modells basierend auf dem IC-Kriterium Einschränkungen dahingehend aufweist, dass kein besseres Modell ausgewählt wird, um Daten mit Ausreißern und Ebenenverschiebungen anzupassen. Meiner Meinung nach sind Ausreißer + Pegelverschiebungen + unordentliche Daten = echte Geschäftsdaten , alles andere sind Lehrbuchdatensätze. Jedes automatische Modell, das Ausreißer + Pegelverschiebungen nicht berücksichtigt, sollte meiner Meinung nach mit Vorsicht verwendet werden.
Kommen wir zum Code - auto.arima hat die Möglichkeit, zwischen AIC und BIC zu wählen. Siehe unten, der Code wurde von den obigen Fragen geändert.
Vielen Dank Cross-validierte Community. Ich lerne jeden Tag neue und interessante Dinge.
BIC IC wählt ein MA (2) Modell.
quelle
Ich habe die 500 Werte in AUTOBOX (ein Stück kommerzieller Software, an dessen Entwicklung ich mitgewirkt habe) übernommen und den folgenden Hinweis erhalten, der auf dem Chow-Test für die Konstanz von Parametern basiert. Ein sehr grundlegender Fehler, der bei der Untersuchung einer Zeitreihe gemacht wird, ist die Annahme, dass die Daten von einem bestimmten Modell mit konstanten Parametern gesteuert werden. AUTOBOX hat im Zeitraum 246 einen Haltepunkt festgestellt, der eine Simulation widerspiegeln könnte, die nicht "aufgewärmt" wurde. Bei der Simulation von Daten empfiehlt es sich, die ersten "n" Werte zu löschen und dann die verbleibenden zu untersuchen. Ich nahm die Daten und segmentierte sie in zwei Abschnitte. die ersten 245 und die restlichen 255. Hier sind die beiden sehr unterschiedlichen Grundstücke .
Zurück zur Analyse: Hier ist das Modell, das für die letzten 246 Werte und hier mit den folgenden Statistiken identifiziert wurde . Das Ist / Fit und die Vorhersage sind hier mit dem Restdiagramm hier . Die ACF der Residuen deutet auf eine ausreichende Leistung hin. Beachten Sie, dass die 5 identifizierten Impulse einen sehr geringen Effekt hatten und leicht ignoriert werden konnten (in diesem Fall!). Zusammenfassend lässt sich sagen, dass wir manchmal zu viele Daten haben und Zeitänderungskoeffizienten berücksichtigen müssen. In diesem Fall stellen wir eine Änderung der Parameter fest, die (anscheinend) keinen wesentlichen Einfluss auf das resultierende Modell / die resultierenden Parameter hat, jedoch auf eine allgemein erforderliche Prozessverbesserung bei der Zeitreihenanalyse hinweist. Meine Erfahrung mit auto.arima legt nahe, dass es, da es Gaußsche Verstöße explizit nicht behandelt / behebt, dazu neigt, zu übermodellieren, indem es sich zu sehr auf historische Werte stützt, anstatt Struktur aus den Daten zu extrahieren. In diesem Fall funktionierte es, da es sich um eine streng kontrollierte Simulation ohne Gaußsche Verstöße handelte, aber ich würde allgemein den Verdacht hegen, dass es sich bei der Identifizierung von ARIMA-Modellen um eine bandbreitenbegrenzte und einstufige Methode handelt. Vertrauen aber überprüfen!
quelle
WENN dies so ist, würde es Benutzern helfen, diese relativen Wahrscheinlichkeiten zusammen mit den AICs (?) Von zu sehen
auto.arima( ... trace=TRUE )
. Beispielsweise führen die Eier Daten wie in dieser Frage gibtquelle