Analiza Szeregów Czasowych/Dekompozycja szeregu czasowego

Z Skrypty dla studentów Ekonofizyki UPGOW

(Różnice między wersjami)
(Liczba ludności USA, lata 1790 - 1980)
(Liczba ludności USA, lata 1790 - 1980)
Linia 63: Linia 63:
for (deg=1:2)
for (deg=1:2)
 +
  printf("NMK Stopień: %d\n,deg);
 +
  printf("Współczynniki (od najwyższej potęgi):\n");
 +
  a = polyfit (X,Y,deg)
   hold on;
   hold on;
-
  a = polyfit (X,Y,deg);
 
   plot(x,polyval(a,x), "linewidth", 2,  
   plot(x,polyval(a,x), "linewidth", 2,  
         sprintf("--%s; MNK rzedu %d;",txt(deg),deg));
         sprintf("--%s; MNK rzedu %d;",txt(deg),deg));

Wersja z 20:15, 13 lut 2010

Sat 13 Feb 2010 14:17:49

Analiza Szeregów Czasowych

Indeks Dow Jones Industrial Average w latach 1928-1930

Spis treści


Właściwa analiza dowolnego szeregu czasowego zaczyna się od wizualizacji danych. Znaczy to, że na samym początku powinniśmy stworzyć wykres badanych danych. Daje nam to możliwość oszacowania jak konkretny zbiór danych zachowuje się w czasie. Zazwyczaj możemy ocenić istnienie trendu czy sezonowości. W trudniejszych przypadkach zadecydować, gdy nie podzielić danego szeregu na dwie czy więcej części i badać je osobno. Przykładowo można rozpatrywać zmienność indeksów giełdowych przed krachem i po nim (np: przed i po Czarnym czwartku), opisując serię danych dwoma różnymi modelami. Dodatkowo mamy możliwość decyzji czy przypadkiem część danych nie została uzyskanych przypadkowo (np: błąd pomiaru, przypadkowy pomiar innych wielkości).

Klasyczna dekompozycja sygnału

W szczególności oględziny wykresu analizowanych danych dają możliwość (po pewnej wprawie) na decyzję, czy możemy daną serię danych reprezentować jako realizację procesu

\( X_t = m_t + s_t + Y_t, \!\)

gdzie

  • \(X_t\) to dane pomiarowe,
  • \(m_t\) to wielkość opisująca wolno zmienną funkcję, czyli trend,
  • \(s_t\) to periodycznie zmienna funkcja zwana sezonowością,
  • \(Y_t\) to komponent opisujący (stacjonarny) proces losowy, często nazywany szumem.

Celem dekompozycji szeregu czasowego jest oszacowanie i ekstrakcja deterministycznych części szeregu - trendu \(m_t\) oraz sezonowości \(s_t\) w nadziei, że pozostałe dane, czyli teoretycznie zmienna losowa \(Y_t\) okaże się stacjonarnym procesem losowym. W przypadku, kiedy okaże się to prawdą, tj. reszty \(Y_t\) mogą być opisane stacjonarnym procesem losowym \(\{Y_t\}\), możemy przystąpić do przewidywania przyszłego zachowania się szeregu, wykorzystując oczywiście wszystkie posiadane wiadomości: trend, okres oraz zidentyfikowany z pewną dokładnością proces losowy.

Metoda Boxa-Jenkinsa

Inną, alternatywną metodą do opisanej wyżej, jest metoda która dopasowywuje modele ARMA i ARIMA do istniejących danych. Metoda ta została nazwana po nazwiskach dwóch statystyków Georgea Boxa oraz Gwilyma Jenkinsa, którzy rozwinęli tą metodę w latach 70-tych.

Algorytm Boxa-Jenkinsa składa się z trzech kroków:

  1. Identyfikacja oraz wybór modelu: pierwszym krokiem jest upewnienie się, że analizujemy dane stacjonarne; następnie identyfikujemy sezonowość i usuwamy ją z danych aby w końcu wykorzystując wykresy funkcji autokorelacji oraz częściowej autokorelacji zdecydować jakie komponenty AR (autoregresji), I (scałkowane) lub MA (średniej ruchomej) wykorzystać do budowy modelu.
  2. Znalezienie parametrów wybranego modelu za pomocą wybranych metod (numerycznych) tak, aby dopasowanie danych do modelu było najlepsze. Najczęstszymi metodami wykorzystywanymi w praktyce są: maximum likelihood estimation lub (nieliniowa) metoda najmniejszych kwadratów.
  3. Sprawdzenie poprawności wyboru danego modelu. W szczególności należy sprawdzić czy proces jest stacjonarny - reszty muszą być od siebie niezależne, oraz ich średnia i wariancja musi być stała w czasie. Można
    • narysować wykres średniej, wariancji oraz reszt versus czas (indeks) i przeprowadzić na nich test Ljunga-Boxa,
    • narysować wykresy funkcji autokorelacji i częściowej autokorelacji reszt.

Jeżeli oszacowanie jest niedobre, należy wrócić na początek algorytmu i postarać się polepszyć istniejący model lub zbudować nowy.

Eliminacja Trendu

Jeżeli analizowane dane nie wykazują sezonowości, ogólny model zastąpić możemy poprzez uproszczony

\( X_t = m_t + Y_t, \!\)

\( t = 1, 2, ..., n\). Zakładamy dodatkowo, bez straty ogólności, że

\( E Y_t = 0.\)

Liczba ludności USA, lata 1790 - 1980

Rysunek 5. Liczba ludności USA w latach 1790 - 1980, w odstępach dziesięcioletnich.
Matlab / Octave Python
close all
y = csvread('PopulacjaUSA1790-1980.csv');
X = y(:,1:1);
Y = y(:,2:2)/10^6;
 
plot(X,Y,"sr; Dane;", 
         'MarkerSize',14, 'markeredgecolor','black');
 
x = X(1):X(length(X));
txt = "gbk"
 
for (deg=1:2)
  printf("NMK Stopień: %d\n,deg);
  printf("Współczynniki (od najwyższej potęgi):\n");
  a = polyfit (X,Y,deg)
  hold on;
  plot(x,polyval(a,x), "linewidth", 2, 
         sprintf("--%s; MNK rzedu %d;",txt(deg),deg));
endfor;
 
xlabel('t');
ylabel('X_t (w milionach)');
grid on;
title('Populacja USA w latach 1790-1980');
legend('Location','SouthEast');
 
print('cw41.eps','-deps','-FTimes-Roman:24')
print('cw41.png','-dpng','-FTimes-Roman:24')
TBA