Szacowanie tego samego modelu w wielu szeregach czasowych

26

Mam doświadczenie dla początkujących w szeregach czasowych (niektóre oszacowania / prognozy ARIMA) i napotykam problem, którego nie do końca rozumiem. Każda pomoc byłaby bardzo mile widziana.

Analizuję wiele szeregów czasowych, w tym samym przedziale czasowym i na tej samej częstotliwości, wszystkie opisują podobny typ danych. Każda seria jest tylko jedną zmienną, nie ma innych odpowiednich predyktorów, na które patrzę.

Poproszono mnie o oszacowanie jednego modelu, który opisuje WSZYSTKIE serie - na przykład wyobraź sobie, że mógłbym znaleźć jeden ARIMA (p, d, q) o tych samych rzędach, współczynnikach itp., Które pasowałyby do całej serii. Mój przełożony nie chce, abym osobno oszacował każdą serię, ani nie chce, abym zrobił jakiś model VAR z zależnościami między seriami.

Moje pytanie brzmi: jak nazwałbym taki model i jak mógłbym zająć się jego szacowaniem / prognozowaniem? Jeśli łatwiej ci użyć przykładów kodu, mówię zarówno SAS, jak i R.

sparc_spread
źródło

Odpowiedzi:

8

Możesz wykonać wyszukiwanie siatki: zacznij od ARIMA (1,0,0) i wypróbuj wszystkie możliwości, aż do ARIMA (5,2,5) lub coś w tym rodzaju. Dopasuj model do każdej serii i oszacuj niezależny od skali pomiar błędu, taki jak MAPE lub MASE (MASE prawdopodobnie byłby lepszy). Wybierz model ARIMA o najniższej średniej MASE we wszystkich modelach.

Możesz ulepszyć tę procedurę, sprawdzając krzyżowo swój pomiar błędu dla każdej serii, a także porównując wyniki z naiwną prognozą .

Dobrym pomysłem może być pytanie, dlaczego szukasz jednego modelu do opisania całej serii. Jeśli nie są generowane przez ten sam proces, nie wydaje się to dobrym pomysłem.

Zach
źródło
2
Dziękuję - spróbuję tego. Zgadzam się, że to nie jest najlepszy pomysł. Argument, który otrzymałem, był taki, że każda seria nie ma wystarczającej liczby obserwacji (~ 28) dla dobrego oszacowania i że bardziej solidne byłoby oszacowanie dla całej serii. Nie jestem pewien, czy zgadzam się z tym argumentem.
sparc_spread
21

Jednym ze sposobów jest zbudowanie długiego szeregu czasowego ze wszystkimi danymi i sekwencjami brakujących wartości między szeregami w celu ich rozdzielenia. Na przykład, w R, jeśli trzy serie ( x, yi z), każdy długości 100 i częstotliwości 12 można połączyć je następująco

combined <- ts(c(x,rep(NA,56),y,rep(NA,56),z,rep(NA,56)),frequency=12)

Zauważ, że wybrano liczbę brakujących wartości, aby zapewnić zachowanie okresu sezonowego. Wypełniłem ostatni rok 8 brakującymi wartościami, a następnie dodałem cztery brakujące lata (48 wartości) przed następną serią. To powinno wystarczyć, aby wszelkie szeregowe korelacje zostały wymyte między seriami.

Następnie możesz użyć, auto.arima()aby znaleźć najlepszy model:

library(forecast)
fit <- auto.arima(combined)

Na koniec możesz zastosować połączony model do każdej serii osobno, aby uzyskać prognozy:

fit.x <- Arima(x,model=fit)
fit.y <- Arima(y,model=fit)
fit.z <- Arima(z,model=fit)
Rob Hyndman
źródło
5
+1, zgrabna sztuczka. Sądząc po komentarzu OP do innej odpowiedzi, zamierzałem zaproponować jakiś model danych panelowych, ale jest to o wiele lepsze.
mpiktas
To ogromna pomoc, bardzo doceniana. Czy możesz wyjaśnić więcej: liczba brakujących wartości jest wybrana, aby zapewnić zachowanie okresu sezonowego ? Przepraszam, że nie do końca śledzę - dzięki.
sparc_spread
1
Jeśli w danych występuje sezonowość (jak to często bywa z miesięcznymi obserwacjami), chcesz, aby długie serie nadal miały w styczniu wielokrotność 12 od siebie, w lutach wielokrotność 12 od siebie, i tak dalej. Następnie, gdy wybierany jest model, można odpowiednio modelować sezonowość.
Rob Hyndman
3
Aby dodać do tej sztuczki - możesz dodać zewnętrzne regresory (xreg) wskazujące członkostwo w kategorii. Stanowiłoby to odrębne środki dla różnych serii, przy jednoczesnym zachowaniu wspólnych współczynników.
Jameson Quinn
6

Szacowanie jednego modelu dla wielu szeregów czasowych jest dziedziną ekonometrii danych panelowych . Jednak w twoim przypadku bez zmiennej objaśniającej @Rob Hyndman odpowiedź jest prawdopodobnie najlepsza. Jeśli jednak okaże się, że średnie szeregów czasowych są różne (przetestuj, ponieważ w tym przypadku metoda @Rob Hyndman powinna zawieść!), Ale struktura ARMA jest taka sama, wtedy będziesz musiał użyć Arellano-Bond (przepraszam, wikipedia ma nie ma na nim żadnej strony, więc wyszukaj w google) estymator typu. Modelem w takim przypadku byłby:

yjat=αja+ρ1yja,t-1+...+ρpyja,t-p+εjat

jaεjatja

mpiktas
źródło
1
Naprawdę doceniam swoje rozwiązanie, a także inne. Wspominasz o tym: Jeśli jednak okaże się, że środki szeregów czasowych są różne (przetestuj, ponieważ w tym przypadku metoda @Rob Hyndman powinna zawieść!) Czy możesz wyjaśnić więcej, dlaczego tak jest? Dzięki.
sparc_spread
2
@sparc_spread, załóżmy, że to tylko dwie serie. Jeden jest wyśrodkowany na około 0 przy wariancji 1, a drugi na 1000 przy wariancji 1. Wtedy, jeśli obie serie są dopasowane przy użyciu tych samych współczynników, oznacza to, że ograniczamy alfa_1 = alpha_2, więc prognozy dla obu serii byłyby w pobliżu 500, okropnie wyłączone. Zasadniczo traktowanie wszystkich serii jako należących do tego samego modelu może wymagać pewnego ponownego wyśrodkowania / normalizacji przed dopasowaniem modelu połączenia.
zkurtz
4

Alternatywą dla podejścia Roba Hyndmana, aby stworzyć jedną serię danych, jest scalenie danych. Może to być odpowiednie, jeśli wiele szeregów czasowych reprezentuje zaszumione odczyty z zestawu maszyn rejestrujących to samo zdarzenie. (Jeśli każda seria czasowa ma inną skalę, najpierw musisz znormalizować dane.)

UWAGA: nadal masz tylko 28 odczytów, tylko mniej hałasu, więc może to nie być odpowiednie dla twojej sytuacji.

t1=xts(jitter(sin(1:28/10),amount=0.2),as.Date("2012-01-01")+1:28)
t2=xts(jitter(sin(1:28/10),amount=0.2),as.Date("2012-01-01")+1:28)
t3=(t1+t2)/2

wprowadź opis zdjęcia tutaj

Darren Cook
źródło
Działa to tylko wtedy, gdy wszystkie sygnały mają podobny charakter (np. Okresowe) są w fazie - w twoim przykładzie, jeśli dwie sinusoidy były o 180 stopni poza fazą, całkowicie by się skasowały!
tdc
3
Tak, uśrednianie danych jest właściwe tylko wtedy, gdy każda seria dat ma reprezentować te same dane i (z przyjemnością zakładasz, że) różnią się tylko tym, że każda z nich ma inny szum.
Darren Cook
1

Patrzyłem na ukryte modele Markowa i dynamiczne sieci bayesowskie. Modelują dane szeregów czasowych. Są również szkoleni przy użyciu wielu szeregów czasowych, np. Wielu szeregów czasowych ciśnienia krwi od różnych osób. Powinieneś znaleźć pakiety w Pythonie i R. Może być konieczne zdefiniowanie struktury dla tych modeli.

Isawjet
źródło
0

Próbuję zrobić to samo. Wygląda na to, że istnieje coś takiego jak model „Multivariate AutoRegressive”. Znalazłem odniesienie do tego, ale nie jak go używać. Na podstawie powiązanego dokumentu zakładam, że został on wdrożony w języku R.

http://journal.r-project.org/archive/2012-1/RJournal_2012-1_Holmes~et~al.pdf

Mox
źródło
Standardowym podejściem jest autoregresja wektorowa i istnieje pakiet R o nazwie var .
Xi'an,
Czy autoregresja wektorowa jest inna niż autoregresja danych panelowych? A może chodzi o różne pola, różne nazwy? Pakiet plm został zasugerowany dla danych panelu. cran.r-project.org/web/packages/plm/vignettes/plm.pdf clidyn.ethz.ch/papers/arfit.pdf
Mox