Próbuję przeprowadzić analizę szeregów czasowych i jestem nowy w tej dziedzinie. Codziennie liczę wydarzenie z lat 2006-2009 i chcę dopasować do niego model szeregów czasowych. Oto postęp, który poczyniłem:
timeSeriesObj = ts(x,start=c(2006,1,1),frequency=365.25)
plot.ts(timeSeriesObj)
Otrzymany wykres to:
Aby sprawdzić, czy dane zawierają sezonowość i trendy, wykonuję kroki wymienione w tym poście :
ets(x)
fit <- tbats(x)
seasonal <- !is.null(fit$seasonal)
seasonal
oraz na blogu Rob J Hyndman :
library(fma)
fit1 <- ets(x)
fit2 <- ets(x,model="ANN")
deviance <- 2*c(logLik(fit1) - logLik(fit2))
df <- attributes(logLik(fit1))$df - attributes(logLik(fit2))$df
#P value
1-pchisq(deviance,df)
Oba przypadki wskazują, że nie ma sezonowości.
Kiedy planuję ACF i PACF z tej serii, otrzymuję:
Moje pytania to:
Czy to sposób na obsługę danych z szeregów czasowych? Ta strona sugeruje, że powinienem patrzeć zarówno na schematy tygodniowe, jak i roczne, ale podejście to nie jest dla mnie jasne.
Nie wiem, jak postępować, gdy mam już wykresy ACF i PACF.
Czy mogę po prostu użyć funkcji auto.arima?
fit <- arima (mity, kolejność = c (p, d, q)
***** Zaktualizowano wyniki Auto.Arima ******
Kiedy zmieniam częstotliwość danych na 7 zgodnie z komentarzami Roba Hyndmana tutaj , auto.arima wybiera sezonowy model ARIMA i generuje:
Series: timeSeriesObj
ARIMA(1,1,2)(1,0,1)[7]
Coefficients:
ar1 ma1 ma2 sar1 sma1
0.89 -1.7877 0.7892 0.9870 -0.9278
s.e. NaN NaN NaN 0.0061 0.0162
sigma^2 estimated as 21.72: log likelihood=-4319.23
AIC=8650.46 AICc=8650.52 BIC=8682.18
****** Zaktualizowana kontrola sezonowości ******
Kiedy testuję sezonowość z częstotliwością 7, wyprowadza True, ale z sezonowością 365.25 wyprowadza false. Czy to wystarczy, aby stwierdzić brak sezonowości?
timeSeriesObj = ts(x,start=c(2006,1,1),frequency=7)
fit <- tbats(timeSeriesObj)
seasonal <- !is.null(fit$seasonal)
seasonal
zwraca:
True
podczas
timeSeriesObj = ts(x,start=c(2006,1,1),frequency=365.25)
fit <- tbats(timeSeriesObj)
seasonal <- !is.null(fit$seasonal)
seasonal
zwraca:
False
źródło
str(x)
?R
proste nie ma możliwości, aby sobie z tym poradzić. Poszukiwałbym rozwiązań komercyjnych, jeśli dla produktu, który próbujesz przewidzieć, wiążą się wysokie koszty zapasów / produkcji.R
ma poważne ograniczenia w prognozowaniu zadań takich jak twoje. Spójrz na pytania dotyczące codziennego prognozowania, gdzie indziej na tej stronie.Odpowiedzi:
Twoje ACF i PACF wskazują, że masz przynajmniej cotygodniową sezonowość, co pokazują szczyty w opóźnieniach 7, 14, 21 i tak dalej.
Możesz mieć również sezonowość, chociaż nie jest to oczywiste z twoich szeregów czasowych.
Twój najlepszy zakład, biorąc pod uwagę potencjalnie wiele sezonowości, może być
tbats
modelem, który wyraźnie modeluje wiele rodzajów sezonowości. Załadujforecast
paczkę:Twoje dane wyjściowe
str(x)
wskazują, żex
nie zawiera jeszcze informacji o potencjalnym występowaniu wielu sezonowości. Spójrz?tbats
i porównaj wynikistr(taylor)
. Przypisz sezonowość:Teraz możesz dopasować
tbats
model. (Bądź cierpliwy, może to chwilę potrwać).Wreszcie możesz prognozować i kreślić:
Nie powinieneś używać
arima()
alboauto.arima()
, ponieważ mogą one obsługiwać tylko jeden typ sezonowość: albo raz w tygodniu lub raz w roku. Nie pytaj mnie, coauto.arima()
byś zrobił na twoich danych. Może wybrać jedną z sezonowości lub całkowicie ją zignorować.EDYCJA, aby odpowiedzieć na dodatkowe pytania z komentarza:
Możliwe może być obliczenie modelu na podstawie danych miesięcznych. Następnie możesz np. Porównać AIC między modelami z sezonowością i bez sezonowości.
Wolę jednak użyć próby wstrzymania do oceny modeli prognozowania. Przytrzymaj ostatnie 100 punktów danych. Dopasuj model do rocznego i tygodniowym sezonowości do reszty danych (jak wyżej), a następnie napadu jeden z jedynego tygodnika sezonowością, np korzystania
auto.arima()
na zasadziets
zfrequency=7
. Prognozuj używając obu modeli w okresie wstrzymania. Sprawdź, który z nich ma mniejszy błąd, używając MAE, MSE lub czegokolwiek, co jest najbardziej odpowiednie dla twojej funkcji utraty. Jeśli istnieje niewielka różnica między błędami, wybierz prostszy model; w przeciwnym razie użyj tego z niższym błędem.Dowodem na budynie jest jedzenie, a dowodem modelu szeregów czasowych jest prognozowanie.
Aby poprawić sytuację, nie używaj pojedynczej próby wstrzymania (która może wprowadzać w błąd, biorąc pod uwagę wzrost na końcu serii), ale używaj kroczących prognoz początku, które są również znane jako „walidacja krzyżowa szeregów czasowych” . (Bardzo polecam cały darmowy podręcznik do prognozowania online .
Standardowe modele ARIMA radzą sobie z sezonowością poprzez różnicowanie sezonowe. W przypadku sezonowych danych miesięcznych nie modelowałbyś nieprzetworzonych szeregów czasowych, ale szereg czasowy różnic między marcem 2015 r. A marcem 2014 r., Między lutym 2015 r. A lutym 2014 r. I tak dalej. (Aby uzyskać prognozy w oryginalnej skali, oczywiście musisz ponownie zmienić zdanie).
Nie ma od razu oczywistego sposobu na rozszerzenie tego pomysłu na wiele sezonowości.
Oczywiście, możesz zrobić coś przy użyciu ARIMAX, np. Włączając miesięczne manekiny do modelowania rocznej sezonowości, a następnie modeluj resztki używając tygodniowego sezonowego ARIMA. Jeśli chcesz to zrobić w R, użyj
ts(x,frequency=7)
, stwórz matrycę miesięcznych manekinów i podaj to doxreg
parametruauto.arima()
.Nie przypominam sobie żadnej publikacji, która szczególnie rozszerza ARIMA na wiele sezonowości, chociaż jestem pewien, że ktoś zrobił coś podobnego do tego w poprzednim akapicie.
źródło
R
, ponieważR
nie ma możliwości obsługi wielosezonowego ARIMA.tbats
modelem podobnym do podobnego.Najlepszym sposobem dekompozycji danych sezonowych przy użyciu istniejących pakietów R jest ceemdan () w Rlibeemd. Ta technika wydobywa sezonowość wielu okresów. Domyślne działają dobrze. Wykorzystuje transformację Hilberta-Huanga zamiast transformacji Fouriera. Transformacja Fouriera ma poważną wadę polegającą na tym, że może obsłużyć stacjonarne, liniowe dane, gdy większość serii nie jest żadna. Na przykład chodzenie losowe y_t = y_ {t-1} + e_t jest najprostszym i często spotykanym spacerem. Inne metody utrzymują stałą amplitudę wahań sezonowych, gdy często różnią się one w praktyce.
źródło
Pytania, które poruszyłeś, zostały poruszone w Prognozowaniu szeregów czasowych R: Pytania dotyczące moich wyników . Proszę uważnie zapoznać się z moją szczegółową odpowiedzią i wszystkimi komentarzami w dyskusji, w tym tymi dotyczącymi pierwotnego pytania, ponieważ uważam, że odnoszą się one do twojego problemu. Możesz wziąć dane podane w poście i wykorzystać je jako moment dydaktyczny dla siebie. Użyj całej dyskusji jako podkładu do tego, co powinieneś zrobić.
źródło