Analiza Szeregów Czasowych/Wstęp

Z Skrypty dla studentów Ekonofizyki UPGOW

(Różnice między wersjami)
(Przykłady szeregów czasowych)
(Przykład 1. Prąd płynący przez opornik.)
 
(Nie pokazano 30 wersji pomiędzy niniejszymi.)
Linia 1: Linia 1:
-
[[Analiza Szeregów Czasowych]]
+
<center>
 +
[[Analiza Szeregów Czasowych]]
 +
[[Analiza Szeregów Czasowych|<<< Start]] | [[Analiza Szeregów Czasowych/Procesy stochastyczne| Procesy stochastyczne >>>]]
 +
</center>
__TOC__
__TOC__
-
==Definicja szeregu czasowego==
+
==Szeregi czasowe==
-
Możemy spotkać różne definicje szeregu czasowego.
+
-
'''Szereg czasowy''' to  
+
<div style="text-align: right; width: 300px; position: relative; right: 10px ; left: 300px;">
-
* ciąg obserwacji pokazujący kształtowanie się badanego zjawiska w kolejnych okresach czasu (sekundach, dniach, latach, itp.).
+
''I have traveled the length and breadth of this country and talked with the best people, and I can assure you that data processing is a fad that won't last out the year.'' -- główny redaktor książek biznesowych podczas wykładu w Prentice Hall w roku 1957.
-
* realizacja procesu stochastycznego, którego dziedziną jest czas; to ciąg informacji uporządkowanych w czasie, których pomiary wykonywane są z dokładnym krokiem czasowym.
+
</div>
-
* ciąg obserwacji ''x<sub>t</sub>'' zapisywanych w ściśle określonym czasie.
+
 
 +
Dane statystyczne zbierane są każdego dnia. Dane takie dotyczyć mogą tak odległych dziedzin jak ilościowy opis produkcji rolnej buraka cukrowego w Polsce i migracji ludności w Europie. Nie są to jedyne możliwe przykłady danych poddawanych obróbce statystycznej. Do takich samych danych z punktu widzenia statystyka możemy zaliczyć aktywność źródła promieniowania czy błądzenie przypadkowe okruszka ciasta czekoladowego który wpadł nam właśnie do kawy...
 +
 
 +
Wszystkie powyższe przykłady mają jedną wspólną cechę - wielkości które mierzymy w każdym przypadku, jeżeli tylko poukładane są po kolei w czasie podpadają nam pod definicję '''szeregu czasowego'''. W przypadku [http://pl.wikipedia.org/wiki/Ekonometria ekonometrii], czy szeroko pojętych [[Rynki Finansowe|rynków finansowych]] i gospodarki, takie szeregi zwykle będą opisywać zmianę wielkości jakiegoś [[Instrumenty Rynku|instrumentu rynku]].
 +
 
 +
W tym przypadku Fizyka, Matematyka i Ekonometria zbudowały i rozwinęły aparat służący do analizy takich szeregów. W najogólniejszym z możliwych stwierdzeniu można rzec, że taka analiza daje szanse dla inwestora na próbę przewidywania przyszłości na podstawie przeszłości. Przeszłość zawarta jest w danych które zebrane są w szeregach czasowych. Przyszłość to tylko statystyczna predykcja możliwych zachowań badanego instrumentu rynku, oparta na mniej lub bardziej poprawnej analizie dostępnych nam danych.
 +
 
 +
Prezentowany skrypt nie odpowie na pytanie ''jak będzie'' zachowywał się przykładowy kurs akcji banku X w następnym tygodniu, ale odpowie jak ''może'' się zachować i czy ''prawdopodobieństwo'' spadku wartości jest wyższe niż wzrostu. Zawarta tu wiedza ''jest niezbędna'' ale ''nie wystarczająca'' (niestety) by stać się milionerem.
 +
 
 +
Dane statystyczne możemy w ogólności podzielić na
 +
# dane przekrojowe (''cross sectional data'') - wiele jednostek obserwowanych w jednej jednostce czasu,
 +
# '''szeregi czasowe''' (''time series data'') - jedna jednostka czasowa obserwowana w wielu jednostkach czasu - to właśnie tym rodzajem danych będziemy się zajmować,
 +
# dane panelowe (''panel data'', ''cross sectional time series data'') - wiele jednostek czasowych obserwowanych w wielu jednostkach czasu.
 +
 
 +
===Definicja szeregu czasowego===
 +
; Definicje : Możemy spotkać różne definicje szeregu czasowego.
 +
:* ciąg obserwacji pokazujący kształtowanie się badanego zjawiska w kolejnych okresach czasu (sekundach, dniach, latach, itp.),
 +
:* uporządkowany chronologicznie zbiór wartości badanej cechy lub określonego zjawiska zaobserwowanych w różnych momentach (przedziałach) czasu,
 +
:* ciąg obserwacji ''x<sub>t</sub>'' zapisywanych w ściśle określonym czasie,
 +
:* realizacja procesu stochastycznego, którego dziedziną jest czas - pojedyncze obserwacje <math>y_t</math> są realizacją zmiennych losowych <math>Y_t</math>. [[Procesy i Zjawiska Losowe|Proces stochastyczny]] definiowany jest wtedy jako ów ciąg zmiennych losowych indeksowanych przez czas ''t'', a szereg czasowy jest wtedy jego pojedynczą realizacją.  
Wśród składników szeregu czasowego możemy wyróżnić:
Wśród składników szeregu czasowego możemy wyróżnić:
Linia 17: Linia 38:
* wahania przypadkowe.
* wahania przypadkowe.
-
==W jakim celu badamy szeregi czasowe?==
+
[[Grafika:składniki szeregu czasowego.png|480px|center|Składniki szeregu czasowego.]]
 +
 
 +
Rozdzielenie czy wyodrębnienie poszczególnych składników nie zawsze jest proste z uwagi na rozmaite interakcje pomiędzy konkretnymi składnikami. Składniki same w sobie mogą być dodatkowo niejawne, a więcej niemożliwe do opisania. Zawsze możemy jednak postarać się przeprowadzić możliwie pełną dekompozycję składników szeregu czasowego.
 +
 
 +
===W jakim celu badamy szeregi czasowe?===
Analiza tego typu zagadnień ma generalnie dwa podstawowe cele:
Analiza tego typu zagadnień ma generalnie dwa podstawowe cele:
# odgadnięcie natury danego zjawiska losowego, tj. badanie własności szeregu i znalezienie modelu najlepiej opisującego zjawisko,
# odgadnięcie natury danego zjawiska losowego, tj. badanie własności szeregu i znalezienie modelu najlepiej opisującego zjawisko,
# prognozowanie (predykcja), tj. przewidywanie kolejnych wartości szeregu czasowego na podstawie znalezionego modelu.
# prognozowanie (predykcja), tj. przewidywanie kolejnych wartości szeregu czasowego na podstawie znalezionego modelu.
 +
 +
Dekompozycja szeregu czasowego (sygnału) daje nam większą pewność analizy danych kluczowych dla zjawiska. Bezpośrednie badanie danych mogła by wykazać nieistniejące zależności wynikające naprawdę tylko ze trendu bądź składowej okresowej.
 +
 +
Nieco bardziej formalnie. Pierwszym krokiem w analizie szeregu czasowego jest wybór właściwego modelu (klasy modeli) reprezentującego dane. Aby oddać możliwą nieprzewidywalność (losowość) bardzo naturalne jest założenie, że każda obserwacja <math> x_t </math> jest konkretną realizacją jakiejś zmiennej losowej <math> X_t </math>. Szereg czasowy <math> \{ x_t, t \in T_0 \} </math> będzie zatem realizacją całego zbioru (rodziny) zmiennych losowych <math> \{ X_t, t \in T_0 \}. </math> Można by pewnie zamodelować nasze dane jako pojedynczą realizację procesu losowego <math> \{ X_t, t \in T \} </math>, a <math> T \supseteqq T_0 </math>. Zanim opowiemy jak się to robi, musimy formalnie zdefiniować co w ogólności rozumiemy poprzez proces stochastyczny. Zrobimy to w [[Analiza Szeregów Czasowych/Procesy stochastyczne|następnym rozdziale]]. Najpierw jednak podamy kilka standardowych przykładów szeregów czasowych.
==Przykłady szeregów czasowych==
==Przykłady szeregów czasowych==
Linia 36: Linia 65:
# Wyplotuj do pliku (np: rysW11.png) wykres <math>I_i = a \cos(\omega t_i + \phi) / r </math>.
# Wyplotuj do pliku (np: rysW11.png) wykres <math>I_i = a \cos(\omega t_i + \phi) / r </math>.
-
{| border=1
+
<source lang="matlab">
-
|- style="background-color:PaleGreen;"
+
-
!Rozwiązanie w języku Matlab / Octave
+
-
!Rozwiązanie w języku '''python''' z bibliotekami '''numpy''' oraz '''matplotlib'''
+
-
|-
+
-
|<source lang="matlab">
+
close all
close all
-
 
+
clear all
-
h = figure;
+
-
set (h,'papertype', 'a4')
+
-
set (h,'paperunits','centimeters');
+
-
set (h,'papersize',[8 6])
+
-
set (h,'paperposition', [0,0,[8 6]])
+
-
set (h,'defaultaxesposition', [0.15, 0.15, 0.75, 0.75])
+
-
set (0,'defaultaxesfontsize', 24)
+
x = -pi:7*pi/100:6*pi;
x = -pi:7*pi/100:6*pi;
i = 0:1:100;
i = 0:1:100;
-
 
y = sin(x)/0.8;
y = sin(x)/0.8;
 +
plot (i,y ,"+^; r = 0.9 {/Symbol o}, {/Symbol f} = 0;")
plot (i,y ,"+^; r = 0.9 {/Symbol o}, {/Symbol f} = 0;")
-
 
hold on
hold on
   
   
Linia 69: Linia 85:
grid on
grid on
   
   
-
print('example01m.eps','-deps','-FTimes-Roman:24');
 
-
print('example01m.svg','-dsvg');
 
print('example01m.png','-dpng');
print('example01m.png','-dpng');
-
%system('convert -density 100 example01m.eps example01m.png')
 
</source>
</source>
-
|<source lang="python">
 
-
import matplotlib.pyplot as plt
 
-
import numpy as np
 
-
 
-
plt.figure(1, figsize=(8,6), dpi=600)
 
-
i = np.arange(100)
 
-
x = np.arange(-np.pi, 6.0*np.pi, 7.0*np.pi/100)
 
-
 
-
kolor  = ['b','r']
 
-
lines  = ['v','-p']
 
-
lw = 1
 
-
 
-
j=0
 
-
a, o, r, phi  = 1, 1, 0.8, 0
 
-
labels = r'$r = %.1f\Omega, \quad \phi = %.1f$' % (r,phi)
 
-
y = a * cos(o*x + phi) / r
 
-
plt.plot(i, y, lines[j], color=kolor[j], label=labels, linewidth=lw)
 
-
 
-
j=1
 
-
a, o, r, phi  = 1, 1, 1.5, np.pi/3.
 
-
labels = r'$r = %.1f\Omega, \quad \phi = \pi/3$' % (r)
 
-
y = a * cos(o*x + phi) / r
 
-
plt.plot(i, y, lines[j], color=kolor[j], label=labels, linewidth=lw)
 
-
 
-
plt.xlabel(r'$i$')
 
-
plt.ylabel(r'$I_i$')
 
-
plt.grid(True)
 
-
 
-
leg = plt.legend(shadow=True,
 
-
    fancybox=True,
 
-
    mode='expand',
 
-
    ncol=2,
 
-
    loc=(0.025,0.96),
 
-
    handletextpad=0.1,
 
-
    title=r'$I_t = a \cos (\omega t + \phi) / r \qquad a = 1V, \quad\omega = 1 Hz$')
 
-
plt.savefig('example01.png')
 
-
</source>
 
-
|}
 
===Przykład 2. Proces dwustanowy (proces dychotomiczny, binarny, zerojedynkowy).===
===Przykład 2. Proces dwustanowy (proces dychotomiczny, binarny, zerojedynkowy).===
Linia 130: Linia 105:
* Wyplotuj do pliku (np: rysW12.png) wykres <math>X_t</math>.
* Wyplotuj do pliku (np: rysW12.png) wykres <math>X_t</math>.
-
{| border=1
+
<source lang="matlab">
-
|- style="background-color:PaleGreen;"
+
-
!Rozwiązanie w języku Matlab / Octave
+
-
!Rozwiązanie w języku '''python''' z bibliotekami '''numpy''' oraz '''matplotlib'''
+
-
|-
+
-
|<source lang="matlab">
+
-
close all
+
-
+
-
h = figure;
+
-
set (h,'papertype', 'a4')
+
-
set (h,'paperunits','centimeters');
+
-
set (h,'papersize',[8 6])
+
-
set (h,'paperposition', [0,0,[8 6]])
+
-
set (h,'defaultaxesposition', [0.15, 0.15, 0.75, 0.75])
+
-
set (0,'defaultaxesfontsize', 24)
+
-
 
+
N = 100;
N = 100;
i = 0:N;
i = 0:N;
-
+
 
-
%
+
%%%  
% eksperyment studentów (symulcja rzutu monetą)
% eksperyment studentów (symulcja rzutu monetą)
-
% odkomentowac jezeli nie mamy danych
+
% odkomentować poniższe 2 linie jeżeli nie mamy danych
-
%
+
%y = int32(rand(N+1,1));
%y = int32(rand(N+1,1));
%csvwrite('dataW12.csv',y);
%csvwrite('dataW12.csv',y);
-
%
 
   
   
y = csvread('dataW12.csv');
y = csvread('dataW12.csv');
Linia 164: Linia 122:
grid on
grid on
-
print('example02m.eps','-deps','-FTimes-Roman:24')
+
print('example02m.png','-dpng')
</source>
</source>
-
|<source lang="python">
 
-
# -*- coding: utf-8 -*-
 
-
import matplotlib.pyplot as plt
 
-
import numpy as np
 
-
from random import randint
 
-
plt.figure(1, figsize=(8,6), dpi=600)
+
===Przykład 3. Populacja Polski.===
-
i = np.array([s for s in np.arange(100)])
+
[[Plik:example03m.png|thumb|450px|Rysunek 3. Zmienność populacji Polski w latach 1960 - 2010 (przykład 3). Dane: http://epp.eurostat.ec.europa.eu]]
-
y = np.array([randint(0,1) for s in np.arange(100)])
+
-
plt.plot(i, y, 'v', color='b', label=u"Orzeł czy Reszka?", linewidth=1)
+
Przykład zmiany liczby ludności Polski.
-
plt.axis([0, len(y), -0.5, 1.5])
+
-
plt.xlabel(r'$t$')
+
-
plt.ylabel(r'$X_t$')
+
-
plt.grid(True)
+
-
leg = plt.legend(shadow=True
+
====Ćwiczenie W1.3: Populacja Polski w latach 1960 - 2010.====
-
    ,fancybox=True
+
''Eurostat’s mission is to provide the European Union with a high-quality statistical information service.''
-
    ,ncol=1
+
-
    ,loc=(0.025,0.96)
+
-
    )
+
-
plt.savefig('example02.png')
+
-
</source>
+
-
|}
+
-
===Przykład 3. Populacja Polski.===
+
# Strona Eurostat-u może posłużyć Państwu jako doskonałe źródło ciekawych danych statystycznych. Ze strony Eurostat-u proszę pobrać interesujące nas dane, tj. wygenerować plik *.csv zawierający dane dotyczące stanu liczebnego Polski z w latach 1960 - 2010. Z pliku zawierającego dużo więcej danych proszę wyodrębnić te właściwe i wyplotować do pliku.
-
[[Plik:example03m.png|thumb|right|450px|Rysunek 3. Zmienność populacji Polski w latach 1960 - 2010 (przykład 3). Dane: http://epp.eurostat.ec.europa.eu]]
+
-
Przykład zmiany liczby ludności Polski.
+
# Proszę w internecie poszukać jak najdalej wstecz sięgających danych statystycznych odnośnie ludności Polski i powtórzyć procedurę z tymi danymi (da się znaleźć dane od roku około 1000).
-
{| border=1
+
 
-
|- style="background-color:PaleGreen;"
+
<source lang="matlab">
-
!Rozwiązanie w języku Matlab / Octave
+
-
!Rozwiązanie w języku '''python''' z bibliotekami '''numpy''' oraz '''matplotlib'''
+
-
|-
+
-
|<source lang="matlab">
+
PierwszyRok = 1960;
PierwszyRok = 1960;
OstatniRok  = 2010;
OstatniRok  = 2010;
-
%N = OstatniRok - PierwszyRok;
+
i = PierwszyRok : OstatniRok;
-
%i = 0:N;
+
-
% lub
+
-
i = PierwszyRok:OstatniRok;
+
y = csvread('PopulacjaPolski1960-2010.csv');
y = csvread('PopulacjaPolski1960-2010.csv');
-
plot(i,y(:,5:5)/1000.,'--r; Populacja Polski w latach 1960-2010;',
+
plot(i, y(:,5:5) / 1000., '--r; Populacja Polski w latach 1960-2010;',
-
                 'marker','^', 'MarkerSize',14, 'markeredgecolor','black')
+
                 'marker', '^', 'MarkerSize', 14, 'markeredgecolor', 'black')
xlabel('t');
xlabel('t');
Linia 218: Linia 152:
legend('Location','SouthEast');
legend('Location','SouthEast');
</source>
</source>
-
|<source lang="python">
 
-
TBA
 
-
</source>
 
-
|}
 
-
 
-
====Ćwiczenie W1.3: Populacja Polski w latach 1960 - 2010.====
 
-
''Eurostat’s mission is to provide the European Union with a high-quality statistical information service.''
 
-
 
-
# Strona Eurostat-u może posłużyć Państwu jako doskonałe źródło ciekawych danych statystycznych. Ze strony Eurostat-u proszę pobrać interesujące nas dane, tj. wygenerować plik *.csv zawierający dane dotyczące stanu liczebnego Polski z w latach 1960 - 2010. Z pliku zawierającego dużo więcej danych proszę wyodrębnić te właściwe i wyplotować do pliku.
 
-
 
-
# Proszę w internecie poszukać jak najdalej wstecz sięgających danych statystycznych odnośnie ludności Polski i powtórzyć procedurę z tymi danymi (da się znaleźć dane od roku około 1000).
 
====Źródło danych====
====Źródło danych====
Linia 238: Linia 161:
'''S&P 500''' jest indeksem w skład którego wchodzi 500 firm o największej kapitalizacji, notowanych na New York Stock Exchange i NASDAQ, są to głównie firmy amerykańskie. Indeks ten jest najbardziej znanym wskaźnikiem zarządzanym przez Standard & Poor's (oddział McGraw-Hill). S&P 500 wchodzi w skład szerszego indeksu - S&P 1500 oraz S&P Global 1200.
'''S&P 500''' jest indeksem w skład którego wchodzi 500 firm o największej kapitalizacji, notowanych na New York Stock Exchange i NASDAQ, są to głównie firmy amerykańskie. Indeks ten jest najbardziej znanym wskaźnikiem zarządzanym przez Standard & Poor's (oddział McGraw-Hill). S&P 500 wchodzi w skład szerszego indeksu - S&P 1500 oraz S&P Global 1200.
* [http://www.indexarb.com/indexComponentWtsSP500.html Lista firm należących do S&P 500 z procentowym udziałem w indeksie]
* [http://www.indexarb.com/indexComponentWtsSP500.html Lista firm należących do S&P 500 z procentowym udziałem w indeksie]
 +
====Ćwiczenie W1.4: S&P 500.====
====Ćwiczenie W1.4: S&P 500.====
# Utwórz rysunek 4.
# Utwórz rysunek 4.
 +
 +
<source lang="matlab">
 +
y = csvread('SandP500.csv');
 +
 +
bN = 2;
 +
N  = 165 ;
 +
i = bN : N;
 +
plot(i, y(bN:N,7:7), '--b');
 +
hold on
 +
 +
bN = N;
 +
N  = 196 ;
 +
i = bN : N;
 +
plot(i, y(bN:N,7:7), '--r');
 +
hold on
 +
 +
bN = N;
 +
N  = 250;
 +
i = bN : N;
 +
plot(i, y(bN:N,7:7), '--b');
 +
 +
xlabel('t');
 +
ylabel('X_t');
 +
grid on;
 +
title('S&P 500 1987 - 2010 (close)');
 +
 +
print('example04.png','-dpng');
 +
</source>
====Źródło====
====Źródło====
http://finance.aol.com/quotes/sandp-500-index-rth/$inx/cmi/historical-prices?tf=all&gran=d
http://finance.aol.com/quotes/sandp-500-index-rth/$inx/cmi/historical-prices?tf=all&gran=d
-
===Przykład 5. Liczba wypadków samochodowych===
+
===Klasyczne przykłady z książki Brockwell-a===
-
===Przykład 6. Giełda 2===
+
====Liczba ludności USA, lata 1790 - 1980====
 +
[[Plik:example05.png|thumb|left|450px|Rysunek 5. Liczba ludności USA w latach 1790 - 1980, w odstępach dziesięcioletnich.]]
-
===Przykład 7. Giełda 3===
+
{| border=1
 +
|- style="background-color:PaleGreen; text-align: center"
 +
! t
 +
! <math>x_t</math>
 +
|- style="text-align: center"
 +
|
 +
1790<br>
 +
1800<br>
 +
1810<br>
 +
1820<br>
 +
1830<br>
 +
1840<br>
 +
1850<br>
 +
1860<br>
 +
1870<br>
 +
1880<br>
 +
1890<br>
 +
1900<br>
 +
1910<br>
 +
1920<br>
 +
1930<br>
 +
1940<br>
 +
1950<br>
 +
1960<br>
 +
1970<br>
 +
1980
 +
|
 +
3929214<br>
 +
5308483<br>
 +
7239881<br>
 +
9638453<br>
 +
12860702<br>
 +
17063353<br>
 +
23191876<br>
 +
31443321<br>
 +
38558371<br>
 +
50189209<br>
 +
62979766<br>
 +
76212168<br>
 +
92228496<br>
 +
106021537<br>
 +
123202642<br>
 +
132164596<br>
 +
151325798<br>
 +
179323175<br>
 +
203302031<br>
 +
226545805
 +
|}

Aktualna wersja na dzień 11:40, 10 lut 2011

Analiza Szeregów Czasowych
<<< Start |  Procesy stochastyczne >>>

Spis treści


Szeregi czasowe

I have traveled the length and breadth of this country and talked with the best people, and I can assure you that data processing is a fad that won't last out the year. -- główny redaktor książek biznesowych podczas wykładu w Prentice Hall w roku 1957.

Dane statystyczne zbierane są każdego dnia. Dane takie dotyczyć mogą tak odległych dziedzin jak ilościowy opis produkcji rolnej buraka cukrowego w Polsce i migracji ludności w Europie. Nie są to jedyne możliwe przykłady danych poddawanych obróbce statystycznej. Do takich samych danych z punktu widzenia statystyka możemy zaliczyć aktywność źródła promieniowania czy błądzenie przypadkowe okruszka ciasta czekoladowego który wpadł nam właśnie do kawy...

Wszystkie powyższe przykłady mają jedną wspólną cechę - wielkości które mierzymy w każdym przypadku, jeżeli tylko poukładane są po kolei w czasie podpadają nam pod definicję szeregu czasowego. W przypadku ekonometrii, czy szeroko pojętych rynków finansowych i gospodarki, takie szeregi zwykle będą opisywać zmianę wielkości jakiegoś instrumentu rynku.

W tym przypadku Fizyka, Matematyka i Ekonometria zbudowały i rozwinęły aparat służący do analizy takich szeregów. W najogólniejszym z możliwych stwierdzeniu można rzec, że taka analiza daje szanse dla inwestora na próbę przewidywania przyszłości na podstawie przeszłości. Przeszłość zawarta jest w danych które zebrane są w szeregach czasowych. Przyszłość to tylko statystyczna predykcja możliwych zachowań badanego instrumentu rynku, oparta na mniej lub bardziej poprawnej analizie dostępnych nam danych.

Prezentowany skrypt nie odpowie na pytanie jak będzie zachowywał się przykładowy kurs akcji banku X w następnym tygodniu, ale odpowie jak może się zachować i czy prawdopodobieństwo spadku wartości jest wyższe niż wzrostu. Zawarta tu wiedza jest niezbędna ale nie wystarczająca (niestety) by stać się milionerem.

Dane statystyczne możemy w ogólności podzielić na

  1. dane przekrojowe (cross sectional data) - wiele jednostek obserwowanych w jednej jednostce czasu,
  2. szeregi czasowe (time series data) - jedna jednostka czasowa obserwowana w wielu jednostkach czasu - to właśnie tym rodzajem danych będziemy się zajmować,
  3. dane panelowe (panel data, cross sectional time series data) - wiele jednostek czasowych obserwowanych w wielu jednostkach czasu.

Definicja szeregu czasowego

Definicje 
Możemy spotkać różne definicje szeregu czasowego.
  • ciąg obserwacji pokazujący kształtowanie się badanego zjawiska w kolejnych okresach czasu (sekundach, dniach, latach, itp.),
  • uporządkowany chronologicznie zbiór wartości badanej cechy lub określonego zjawiska zaobserwowanych w różnych momentach (przedziałach) czasu,
  • ciąg obserwacji xt zapisywanych w ściśle określonym czasie,
  • realizacja procesu stochastycznego, którego dziedziną jest czas - pojedyncze obserwacje \(y_t\) są realizacją zmiennych losowych \(Y_t\). Proces stochastyczny definiowany jest wtedy jako ów ciąg zmiennych losowych indeksowanych przez czas t, a szereg czasowy jest wtedy jego pojedynczą realizacją.

Wśród składników szeregu czasowego możemy wyróżnić:

  • trend (tendencję rozwojową),
  • wahania sezonowe,
  • wahania cykliczne (koniunkturalne),
  • wahania przypadkowe.
Składniki szeregu czasowego.

Rozdzielenie czy wyodrębnienie poszczególnych składników nie zawsze jest proste z uwagi na rozmaite interakcje pomiędzy konkretnymi składnikami. Składniki same w sobie mogą być dodatkowo niejawne, a więcej niemożliwe do opisania. Zawsze możemy jednak postarać się przeprowadzić możliwie pełną dekompozycję składników szeregu czasowego.

W jakim celu badamy szeregi czasowe?

Analiza tego typu zagadnień ma generalnie dwa podstawowe cele:

  1. odgadnięcie natury danego zjawiska losowego, tj. badanie własności szeregu i znalezienie modelu najlepiej opisującego zjawisko,
  2. prognozowanie (predykcja), tj. przewidywanie kolejnych wartości szeregu czasowego na podstawie znalezionego modelu.

Dekompozycja szeregu czasowego (sygnału) daje nam większą pewność analizy danych kluczowych dla zjawiska. Bezpośrednie badanie danych mogła by wykazać nieistniejące zależności wynikające naprawdę tylko ze trendu bądź składowej okresowej.

Nieco bardziej formalnie. Pierwszym krokiem w analizie szeregu czasowego jest wybór właściwego modelu (klasy modeli) reprezentującego dane. Aby oddać możliwą nieprzewidywalność (losowość) bardzo naturalne jest założenie, że każda obserwacja \( x_t \) jest konkretną realizacją jakiejś zmiennej losowej \( X_t \). Szereg czasowy \( \{ x_t, t \in T_0 \} \) będzie zatem realizacją całego zbioru (rodziny) zmiennych losowych \( \{ X_t, t \in T_0 \}. \) Można by pewnie zamodelować nasze dane jako pojedynczą realizację procesu losowego \( \{ X_t, t \in T \} \), a \( T \supseteqq T_0 \). Zanim opowiemy jak się to robi, musimy formalnie zdefiniować co w ogólności rozumiemy poprzez proces stochastyczny. Zrobimy to w następnym rozdziale. Najpierw jednak podamy kilka standardowych przykładów szeregów czasowych.

Przykłady szeregów czasowych

Przykład 1. Prąd płynący przez opornik.

Rysunek 1. 100 kolejnych punktów czasowych dla szeregu czasowego z przykładu 1 dla dwóch wartości oporu r.

Jeżeli do opornika charakteryzującego się oporem \(r\) przyłożymy zmienne napięcie

\( U(t) = a \cos (\omega t), \! \)

gdzie \(a\) to amplituda zmiennego napięcia przyłożonego do opornika, a okres zmienności to \(T = 2 \pi / \omega\). Wtedy natężenie prądu elektrycznego płynącego przez opornik można wyrazić wzorem

\( I(t) = \frac{a \cos (\omega t)}{r}. \! \)

Jest to oczywiście ciągła funkcja czasu, jednak, kiedy będziemy rejestrować wartości natężenia \(I(t)\) w kolejnych chwilach czasu (np. co \(0.1 T\), 1 milisekundę czy 1 godzinę), dostaniemy dyskretny szereg czasowy \(I_i\) indeksowany kolejnymi pomiarami \( i = 0, 1, 2, \dots \). Przykładowe szeregi czasowe opisane powyższym wzorem można znaleźć na rysunku 1.

Ćwiczenie W1.1
Wygeneruj w programie Matlab/Octave rysunek 1 (legenda jest opcjonalna).
  1. Zbierz do tablic indeksy \(i\) oraz wartości natężenia prądu w punktach \(t_i = i \cdot ( 6 \pi / 100 ), i \in [0,100]\).
  2. Wyplotuj do pliku (np: rysW11.png) wykres \(I_i = a \cos(\omega t_i + \phi) / r \).
close all
clear all
 
x = -pi:7*pi/100:6*pi;
i = 0:1:100;
y = sin(x)/0.8;
 
plot (i,y ,"+^; r = 0.9 {/Symbol o}, {/Symbol f} = 0;")
hold on
 
y = sin(x + pi/3)/1.5;
plot(i,y,"-or; r = 1.5{/Symbol O}, {/Symbol f}= {/Symbol p}/3;");
 
xlabel('i');
ylabel('I_i');
title('I_i = a cos (\omega t_i + \phi) /r,  a = 1V, \omega = 1Hz'); 
 
grid on
 
print('example01m.png','-dpng');

Przykład 2. Proces dwustanowy (proces dychotomiczny, binarny, zerojedynkowy).

Rysunek 2. 100 kolejnych punktów czasowych dla rzutu monetą (przykład 2). Dane użyte do wygenerowania wykresu: 1 1 1 0 0 0 0 1 1 0 0 1 1 1 1 1 0 1 0 1 1 0 0 0 0 1 1 0 0 1 1 1 1 0 0 1 0 0 0 1 0 1 0 0 1 0 1 0 1 0 1 0 1 1 0 1 1 0 1 1 0 0 0 1 0 0 1 1 0 1 0 1 1 0 1 0 0 0 0 0 1 1 0 1 1 1 0 1 0 0 1 0 1 1 1 0 1 0 1 1.

Niech \(\{X_t, t = 1,2,3,\dots\}\) będzie uporządkowanym zbiorem niezależnych zmiennych losowych (sekwencją losową), dla których prawdopodobieństwo

\( P (X_t = 0) = P (X_t = 1) = 1/2. \)

(dowód istnienia potrzebnej przestrzeni probabilistycznej na razie sobie darujemy). Seria pomiarowa składać się będzie z losowo ułożonych w czasie zer i jedynek {0,0,0,1,0,1,1,1,1,0,...}. Przykładem jest rzut monetą.


Ćwiczenie W1.2
Każda osoba ma za zadanie wykonać N (w zależności od liczebności grupy, w sumie około 100 na wszystkich studentów) rzutów monetą. W arkuszu kalkulacyjnym na [docs.google.com] wpisujemy wartości:
  • 0 jeżeli wyrzuciliśmy Orła
  • 1 jeżeli wyrzuciliśmy Reszkę

każdy w oddzielnej kolumnie. Stwórz prosty wykres danych w arkuszu kalkulacyjnym Google. Następnie za pomocą programu Matlab/Octave stwórz rysunek przedstawiający tak utworzony szereg czasowy. Szereg ma uwzględniać pomiary wszystkich.

  • wyeksportuj dane z arkusza Google do pliku CSV
  • zaimportuj dane do tabeli w Matlab'ie
  • Wyplotuj do pliku (np: rysW12.png) wykres \(X_t\).
N = 100;
i = 0:N;
 
%%% 
% eksperyment studentów (symulcja rzutu monetą)
% odkomentować poniższe 2 linie jeżeli nie mamy danych
%y = int32(rand(N+1,1));
%csvwrite('dataW12.csv',y);
 
y = csvread('dataW12.csv');
plot (i,y ,"-^; Orzeł czy Reszka?;")
axis([0,N,-0.5,1.5]);
xlabel('t');
ylabel('X_t');
grid on
 
print('example02m.png','-dpng')

Przykład 3. Populacja Polski.

Rysunek 3. Zmienność populacji Polski w latach 1960 - 2010 (przykład 3). Dane: http://epp.eurostat.ec.europa.eu

Przykład zmiany liczby ludności Polski.

Ćwiczenie W1.3: Populacja Polski w latach 1960 - 2010.

Eurostat’s mission is to provide the European Union with a high-quality statistical information service.

  1. Strona Eurostat-u może posłużyć Państwu jako doskonałe źródło ciekawych danych statystycznych. Ze strony Eurostat-u proszę pobrać interesujące nas dane, tj. wygenerować plik *.csv zawierający dane dotyczące stanu liczebnego Polski z w latach 1960 - 2010. Z pliku zawierającego dużo więcej danych proszę wyodrębnić te właściwe i wyplotować do pliku.
  1. Proszę w internecie poszukać jak najdalej wstecz sięgających danych statystycznych odnośnie ludności Polski i powtórzyć procedurę z tymi danymi (da się znaleźć dane od roku około 1000).


PierwszyRok = 1960;
OstatniRok  = 2010;
i = PierwszyRok : OstatniRok;
y = csvread('PopulacjaPolski1960-2010.csv');
 
plot(i, y(:,5:5) / 1000., '--r; Populacja Polski w latach 1960-2010;',
                'marker', '^', 'MarkerSize', 14, 'markeredgecolor', 'black')
 
xlabel('t');
ylabel('X_t (w tysiącach)');
grid on;
legend('Location','SouthEast');

Źródło danych

Przykład 4. S&P 500

Rysunek 4. Indeks S&P 500 z lat 1987 - 2010.

S&P 500 jest indeksem w skład którego wchodzi 500 firm o największej kapitalizacji, notowanych na New York Stock Exchange i NASDAQ, są to głównie firmy amerykańskie. Indeks ten jest najbardziej znanym wskaźnikiem zarządzanym przez Standard & Poor's (oddział McGraw-Hill). S&P 500 wchodzi w skład szerszego indeksu - S&P 1500 oraz S&P Global 1200.

Ćwiczenie W1.4: S&P 500.

  1. Utwórz rysunek 4.
y = csvread('SandP500.csv');
 
bN = 2;
N  = 165 ;
i = bN : N;
plot(i, y(bN:N,7:7), '--b');
hold on
 
bN = N;
N  = 196 ;
i = bN : N;
plot(i, y(bN:N,7:7), '--r');
hold on
 
bN = N;
N  = 250;
i = bN : N;
plot(i, y(bN:N,7:7), '--b');
 
xlabel('t');
ylabel('X_t');
grid on;
title('S&P 500 1987 - 2010 (close)');
 
print('example04.png','-dpng');

Źródło

http://finance.aol.com/quotes/sandp-500-index-rth/$inx/cmi/historical-prices?tf=all&gran=d

Klasyczne przykłady z książki Brockwell-a

Liczba ludności USA, lata 1790 - 1980

Rysunek 5. Liczba ludności USA w latach 1790 - 1980, w odstępach dziesięcioletnich.
t \(x_t\)

1790
1800
1810
1820
1830
1840
1850
1860
1870
1880
1890
1900
1910
1920
1930
1940
1950
1960
1970
1980

3929214
5308483
7239881
9638453
12860702
17063353
23191876
31443321
38558371
50189209
62979766
76212168
92228496
106021537
123202642
132164596
151325798
179323175
203302031
226545805