Czy modele identyfikowane przez auto.arima () są oszczędne?

13

Próbowałem nauczyć się i stosować modele ARIMA. Czytałem doskonały tekst na temat ARIMA autorstwa Pankratza - Prognozowanie przy użyciu Univariate Box - Jenkins Models: Concepts and Cases . W tekście autor podkreśla przede wszystkim oszczędność w wyborze modeli ARIMA.

Zacząłem grać z auto.arima()funkcji w R pakietu prognozy . Oto, co zrobiłem, przeprowadziłem symulację ARIMA, a następnie zastosowałem auto.arima(). Poniżej znajdują się 2 przykłady. Jak widać w obu przykładach, auto.arima()wyraźnie zidentyfikowano model, który wielu uważa za niepodatni. Zwłaszcza w przykładzie 2, w którym auto.arima()zidentyfikowano ARIMA (3,0,3), podczas gdy w rzeczywistości ARIMA (1,0,1) byłoby wystarczające i oszczędne.

Poniżej znajdują się moje pytania. Byłbym wdzięczny za wszelkie sugestie i rekomendacje.

  1. Czy istnieją jakieś wskazówki dotyczące tego, kiedy używać / modyfikować modele zidentyfikowane za pomocą automatycznych algorytmów, takich jak auto.arima()?
  2. Czy są jakieś spadki w użyciu tylko AIC (co moim zdaniem auto.arima()wykorzystuje) do identyfikacji modeli?
  3. Czy można zbudować automatyczny algorytm, który jest oszczędny?

Nawiasem mówiąc, użyłem auto.arima()tylko jako przykładu. Dotyczy to każdego automatycznego algorytmu.

Poniżej znajduje się przykład nr 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

Poniżej znajdują się wyniki z auto.arima(). Należy pamiętać, że wszystkie współczynniki są nieznaczne. tj. wartość t <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

Poniżej znajdują się wyniki regularnego uruchamiania arima()z zamówieniem 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

Przykład 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

Poniżej znajdują się wyniki z 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

Poniżej znajdują się wyniki wyświetlane regularnie arima()z zamówieniem 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
Synoptyk
źródło
Wygląda na to, że coś tu robisz, ponieważ procedura AIC może źle identyfikować najprostszy model. Dodatkowo przesłanka kryteriów AIC: brak pulsów / brak przesunięć poziomu / brak pulsów sezonowych / brak trendów czasu lokalnego / stałość parametrów / stałość wariancji błędu.
IrishStat,
AIC i BIC są proporcjonalne do wariancji błędów z odgadniętego modelu. Z mojego doświadczenia wynika, że ​​takie podejście jest proste ze względu na niektóre problemy, które już poruszyłem, i kwestie związane z odwracalnością. Nic nie zastąpi inteligentnego systemu identyfikacji, który konstruuje modele iteracyjne, stwierdzając, że nie pozostały żadne niepotrzebne parametry i żadna informacja / struktura nie jest widoczna w resztkach. Podsumowując, automatyczna identyfikacja modelu jest procesem iteracyjnym, a nie jednoetapowym, tak jak ma to miejsce we wszystkich analizach statystycznych.
IrishStat
@Irishstat jaki znak ma współczynnik należy interpretować jako -0,1391 -0,5912 -0,5491?
prezenter
pod względem tekstu Pankratza .. tak! . Możesz sprawdzić pierwiastki wielomianu ma, aby sprawdzić, czy spełniają one wymagania dotyczące odwracalności.
IrishStat
więc powyższe auto.arima nie jest odwracalne, tj. -0,1391-0,5912-0,5491 wynosi <1, więc model jest w porządku.
prezenter

Odpowiedzi:

17

Jest tu kilka problemów. Po pierwsze, nie zakładaj, że symulowana ARIMA jest naprawdę w określonej kolejności; pobierasz próbkę z określonego modelu, a ze względu na losowość najlepiej dopasowanym modelem dla konkretnej losowanej próbki może nie być ten, z którego pobrano symulacje.

Wspominam o tym z powodu drugiego i ważniejszego problemu: auto.arima()funkcja może oszacować modele za pomocą bardziej wydajnego algorytmu dopasowania, wykorzystując warunkowe sumy kwadratów, aby uniknąć nadmiernego czasu obliczeniowego dla długich serii lub złożonych modeli sezonowych. Gdy ten proces szacowania jest używany, auto.arima() aproksymuje kryteria informacyjne dla modelu (ponieważ prawdopodobieństwo obliczenia logarytmu modelu nie zostało obliczone). Prosta heurystyka służy do ustalenia, czy warunkowe sumy oszacowań kwadratów są aktywne, jeśli użytkownik nie wskazuje, które podejście należy zastosować .

approximation(length(x)>100 | frequency(x)>12)approximationTRUE n=100n=500 approximationauto.arima()approximation = TRUEarima()

W twoim przykładzie 1 powinniśmy

> auto.arima(y, approximation = FALSE)
Series: y 
ARIMA(0,0,1) with non-zero mean 

Coefficients:
         ma1  intercept
      0.7166    19.9844
s.e.  0.0301     0.0797

sigma^2 estimated as 1.079:  log likelihood=-728.94
AIC=1463.87   AICc=1463.92   BIC=1476.52
> qa
Series: y 
ARIMA(1,0,1) with non-zero mean 

Coefficients:
         ar1     ma1  intercept
      0.0565  0.6890    19.9846
s.e.  0.0626  0.0456     0.0830

sigma^2 estimated as 1.078:  log likelihood=-728.53
AIC=1465.06   AICc=1465.14   BIC=1481.92

Dlatego auto.arima()wybrał model bardziej oszczędny niż prawdziwy; wybrano ARIMA (0, 0, 1). Ale opiera się to na kryteriach informacyjnych i teraz są one zgodne; wybrany model ma niższe AIC, AICc i BIC, chociaż różnice dla AIC i AICc są niewielkie. Przynajmniej teraz wybór jest zgodny z normami wyboru modeli na podstawie kryteriów informacyjnych.

Powód wyboru IZ (1), jak sądzę, dotyczy pierwszego wymienionego przeze mnie problemu; mianowicie, że najlepiej dopasowany model do próbki pobranej z podanego ARIMA (p, d, q) może nie być tego samego rzędu co prawdziwy model. Wynika to z losowego próbkowania. Biorąc dłuższą serię lub dłuższy okres wypalania, możesz zwiększyć szansę na wybór prawdziwego modelu, ale nie polegaj na nim.

Niezależnie od tego, morał tutaj jest taki, że gdy coś wygląda oczywiście źle, tak jak w twoim pytaniu, przeczytaj odpowiednią stronę podręcznika lub dokumentację, aby upewnić się, że rozumiesz, jak działa oprogramowanie.

Przywróć Monikę - G. Simpson
źródło
dzięki za szczegółową odpowiedź. Użyłem twojego podejścia do drugiego przykładu: set.seed (453) y <- arima.sim (n = 500, lista (ar = 0,2, ma = 0,6), średnia = 10) auto.arima (y, przybliżenie = FAŁSZ) i to, co dostaję, wyraźnie przewyższa dane - ARIMA (2,0,4) z niezerową średnią Współczynniki: ar1 ar2 ma1 ma2 ma3 ma4 intercept 0,5369 -0,9627 0,3868 0,6799 0,7065 0,1701 20,0329 se 0,0278 0,0499 0,0533 0,0630 0,0793 0,0574 0,0927 sigma ^ 2 oszacowane jako 1,024: prawdopodobieństwo logarytmu = -716,17 AIC = 1448,33 AICc = 1448,63 BIC = 1482,05
przepowiednia
Nie czytałem jeszcze rozdziału, który ma coś o nazwie „invertiblity”. Czy auto.arima w drugim przypadku narusza zasadę „invertiblity” w diagnozie modelu? Mogę być wyłączony, czy możesz poprawić, jeśli się mylę?
prezenter
1
@forecaster Załóżmy, że nie znasz prawdy, wszystko co masz, to próbka do ręki. W tych okolicznościach AIC itp. Robią to, o co ich prosisz. Jak powiedziałem powyżej, symulowana seria może nie być tą, o którą prosiłeś, a raczej może nie być możliwe pomyślne zidentyfikowanie prawdziwej serii na podstawie małej pobranej próbki. W statystykach nie ma nic sugerowanego, że dostaniesz ten jedyny, PRAWDZIWY model. Jako statystyka, jeśli uważasz, że seria jest przepasowana (powiedzmy z wcześniejszej wiedzy), nałóż ograniczenie na kolejność wyszukiwanych terminów. Lub użyj BIC jako kryterium zatrzymania.
Przywróć Monikę - G. Simpson
Nie wiem wystarczająco dobrze, na czym polega odwracalność, aby móc odpowiedzieć na to pytanie. Być może zadajesz to pytanie jako nowe pytanie?
Przywróć Monikę - G. Simpson
@forecaster (Powodem, dla którego mówię BIC, jest to, że nakłada dodatkową karę na złożoność. W tym przypadku BIC ARIMA (1, 0, 1) ma niższy BIC niż auto.arima()ustalony model , więc gdyby były to jedyne dwa modele kandydujące, najprostszy zostałby wybrany ...)
Przywróć Monikę - G. Simpson
2

Dziękuję bardzo @ Gavin, @Irishstat i @Rob za odpowiedź na moje pytanie. Oczywiste jest, że jeśli potrzebuję oszczędnego modelu z automatycznych algorytmów, takich jak auto.arima, należy zastosować kryterium informacji BIC, w przeciwieństwie do AIC, szczególnie po przejrzeniu tego postu i postu @ Gavina powyżej.

Bardzo zgadzam się również z @Irishstat, że wybór modelu opartego na kryterium IC ma ograniczenia, ponieważ nie wybiera lepszego modelu pasującego do danych z wartościami odstającymi i przesunięciami poziomu. Moim zdaniem wartości odstające + przesunięcia poziomów + niechlujne dane = prawdziwe dane biznesowe , wszystko inne to zestawy danych z podręczników. Każdy model automatyczny, który nie uwzględnia wartości odstających + przesunięć poziomów, ponownie moim zdaniem powinien być używany ostrożnie.

Przechodząc do kodu - auto.arima ma opcję wyboru między AIC lub BIC. Zobacz poniżej kod został zmodyfikowany z powyższych pytań.

Ogromne podziękowania Społeczność zweryfikowana. Codziennie uczę się nowych i interesujących rzeczy.

###############
set.seed(453)
y <- arima.sim(n=500,list(ar=0.2,ma=0.6),mean = 10)

## Adequetly describes the unknown data
fit.aic <- auto.arima(y,ic = c("aic"))
fit.aic

## Selects the model that is parsimonious
fit.bic <- auto.arima(y,ic = c("bic"))
fit.bic

BIC IC wybiera model MA (2).

> fit.bic
Series: y 
ARIMA(0,0,2) with non-zero mean 

Coefficients:
         ma1     ma2  intercept
      0.9256  0.2335    20.0326
s.e.  0.0453  0.0444     0.0992

sigma^2 estimated as 1.059:  log likelihood=-724.19
AIC=1456.39   AICc=1456.47   BIC=1473.24
Synoptyk
źródło
1

Wziąłem 500 wartości w AUTOBOX (oprogramowanie komercyjne, które pomogłem opracować) i otrzymałem następujące porady wprowadź opis zdjęcia tutajoparte na teście Chow dla stałości parametrów. Bardzo podstawowym błędem popełnianym podczas badania szeregów czasowych jest założenie, że dane są napędzane przez określony model o stałych parametrach. AUTOBOX wykrył punkt przerwania w okresie 246, który może odzwierciedlać symulację, która nie została „rozgrzana”. Podczas symulacji danych dobrą praktyką jest usuwanie pierwszych „n” wartości, a następnie badanie pozostałych. Zebrałem dane i podzieliłem je na dwie części; pierwsze 245 i pozostałe 255. Oto dwa wprowadź opis zdjęcia tutajbardzo odmienne wykresy acf wprowadź opis zdjęcia tutaj.

Wracając do analizy: Oto model, który został zidentyfikowany dla ostatnich 246 wartości wprowadź opis zdjęcia tutaji tutaj wprowadź opis zdjęcia tutajz następującymi statystykami wprowadź opis zdjęcia tutaj. Aktualna / Dopasowanie i prognoza jest tutaj wprowadź opis zdjęcia tutajz resztkową działką tutaj wprowadź opis zdjęcia tutaj. ACF pozostałości wskazuje na wystarczalnośćwprowadź opis zdjęcia tutaj. Zauważ, że 5 zidentyfikowanych impulsów miało bardzo mały efekt i można je łatwo zignorować (w tym przypadku!). Podsumowując, wyciągnięto z tego lekcję, że czasami mamy za dużo danych i musimy rozważyć współczynniki zmiany czasu. W tym przypadku identyfikujemy zmianę parametrów, która (najwyraźniej) nie ma większego wpływu na wynikowy model / parametry, ale wskazuje na ogólnie potrzebną poprawę procesu w analizie szeregów czasowych. Moje doświadczenie z auto.arima sugeruje, że ponieważ wyraźnie nie traktuje / nie naprawia naruszeń gaussowskich, ma tendencję do nadmiernego modelowania poprzez zbytnie opieranie się na wartościach historycznych, zamiast wydobywania struktury z danych. W tym przypadku, ponieważ była to ściśle kontrolowana symulacja bez naruszeń gaussowskich, zadziałała, ale ogólnie byłbym podejrzany o takie pasmo z ograniczonym i jednostopniowym podejściem do identyfikacji modelu ARIMA. Ufaj ale sprawdzaj !

IrishStat
źródło
0

 exp(ZAjadomjan-ZAjadoja)/2)

Jeśli tak jest, to pomóc użytkownikom, aby zobaczyć te względnych prawdopodobieństw, wraz z PTK (?) Z auto.arima( ... trace=TRUE ). Na przykład dane dotyczące jaj są uruchamiane zgodnie z tym, co podaje to pytanie

                                # relprob = exp( (AICmin - AIC) / 2 ) * 100
 ARIMA(0,1,0) with drift : 784.5    100
 ARIMA(0,1,1) with drift : 784.8     86
 ARIMA(1,1,0) with drift : 784.9     82
 ARIMA(0,1,0)            : 792.4      2
 ARIMA(2,1,2) with drift : Inf    0
 ARIMA(1,1,1) with drift : Inf    0
denis
źródło
1
To jest odpowiedź czy pytanie?
Tim
@Tim, jestem tak niepewny, ponieważ nie wiem, czy te względne sondy są „rzeczywiste”, a przynajmniej wspólne.
denis