Analiza Szeregów Czasowych/Wstęp

Z Skrypty dla studentów Ekonofizyki UPGOW

(Różnice między wersjami)
(Przykłady szeregów czasowych)
(Przykłady szeregów czasowych)
Linia 23: Linia 23:
==Przykłady szeregów czasowych==
==Przykłady szeregów czasowych==
-
;Przykład 1: Prąd płynący przez opornik.
+
===Przykład 1. Prąd płynący przez opornik.===
[[Plik:example01.png|thumb|right|450px|Rysunek 1. 100 kolejnych punktów czasowych dla szeregu czasowego z przykładu 1 dla dwóch wartości oporu r.]]
[[Plik:example01.png|thumb|right|450px|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 <math>r</math> przyłożymy zmienne napięcie  
Jeżeli do opornika charakteryzującego się oporem <math>r</math> przyłożymy zmienne napięcie  
Linia 43: Linia 43:
|<source lang="matlab">
|<source lang="matlab">
close all
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)
x = -pi:7*pi/100:6*pi;
x = -pi:7*pi/100:6*pi;
i = 0:1:100;
i = 0:1:100;
-
 
+
   
-
xlabel('i');
+
-
ylabel('I_i');
+
-
title('I_i = a cos (\omega t_i + \phi) /r, a = 1V, \omega = 1Hz');
+
-
 
+
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
-
 
+
y = sin(x + pi/3)/1.5;
y = sin(x + pi/3)/1.5;
plot(i,y,"-or; r = 1.5{/Symbol O}, {/Symbol f}= {/Symbol p}/3;");
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
grid on
-
 
+
print('example01m.eps','-deps','-FTimes-Roman:24');
print('example01m.eps','-deps','-FTimes-Roman:24');
-
%print('example01m.svg','-dsvg');
+
print('example01m.svg','-dsvg');
-
%print('example01m.png','-dpng');
+
print('example01m.png','-dpng');
%system('convert -density 100 example01m.eps example01m.png')
%system('convert -density 100 example01m.eps example01m.png')
</source>
</source>
Linia 105: Linia 113:
|}
|}
-
;Przykład 2: Proces dwustanowy (proces dychotomiczny, binarny, zerojedynkowy).
+
===Przykład 2. Proces dwustanowy (proces dychotomiczny, binarny, zerojedynkowy).===
[[Plik:example02.png|thumb|right|450px|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. ]]
[[Plik:example02.png|thumb|right|450px|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 <math>\{X_t, t = 1,2,3,\dots\}</math> będzie uporządkowanym zbiorem niezależnych zmiennych losowych (sekwencją losową), dla których prawdopodobieństwo
Niech <math>\{X_t, t = 1,2,3,\dots\}</math> będzie uporządkowanym zbiorem niezależnych zmiennych losowych (sekwencją losową), dla których prawdopodobieństwo
Linia 128: Linia 136:
|-
|-
|<source lang="matlab">
|<source lang="matlab">
-
%
 
-
% Octave > 3.2 !!!
 
-
%
 
-
 
close all
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ą)
Linia 144: Linia 156:
%csvwrite('dataW12.csv',y);
%csvwrite('dataW12.csv',y);
%
%
-
 
+
y = csvread('dataW12.csv');
y = csvread('dataW12.csv');
plot (i,y ,"-^; Orzeł czy Reszka?;")
plot (i,y ,"-^; Orzeł czy Reszka?;")
Linia 152: Linia 164:
grid on
grid on
-
print('example02m.eps','-deps','-FTimes-Roman:24');
+
print('example02m.eps','-deps','-FTimes-Roman:24')
</source>
</source>
|<source lang="python">
|<source lang="python">
Linia 179: Linia 191:
|}
|}
-
;Przykład 3: Populacja Polski
+
===Przykład 3. Populacja Polski.===
-
*http://www.stat.gov.pl
+
 
-
*http://unstats.un.org/unsd/databases.htm
+
 
-
*http://mdgs.un.org
+
====Źródło danych====
-
*http://www.fao.org/
+
-
*http://wiking.edu.pl/article.php?id=348
+
-
*!!!
+
http://epp.eurostat.ec.europa.eu/portal/page/portal/statistics/search_database
http://epp.eurostat.ec.europa.eu/portal/page/portal/statistics/search_database
-
!!!
 
-
*http://www.ms.gov.pl/statystyki/statystyki.php
 
-
;Przykład 4: Liczba wypadków samochodowych
+
===Przykład 4. Liczba wypadków samochodowych===
-
;Przykład 5: Giełda 1
+
===Przykład 5. Giełda 1===
-
;Przykład 6: Giełda 2
+
===Przykład 6. Giełda 2===
-
;Przykład 7: Giełda 3
+
===Przykład 7. Giełda 3===

Wersja z 23:00, 10 lut 2010

Analiza Szeregów Czasowych

Spis treści


Definicja szeregu czasowego

Możemy spotkać różne definicje szeregu czasowego.

Szereg czasowy to

  • ciąg obserwacji pokazujący kształtowanie się badanego zjawiska w kolejnych okresach czasu (sekundach, dniach, latach, itp.).
  • 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.
  • ciąg obserwacji xt zapisywanych w ściśle określonym czasie.

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

  • trend (tendencję rozwojową),
  • wahania sezonowe,
  • wahania cykliczne (koniunkturalne),
  • wahania przypadkowe.

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.

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 \).
Rozwiązanie w języku Matlab / Octave Rozwiązanie w języku python z bibliotekami numpy oraz matplotlib
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)
 
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.eps','-deps','-FTimes-Roman:24');
print('example01m.svg','-dsvg');
print('example01m.png','-dpng');
%system('convert -density 100 example01m.eps example01m.png')
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')

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\).
Rozwiązanie w języku Matlab / Octave Rozwiązanie w języku python z bibliotekami numpy oraz matplotlib
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;
i = 0:N;
 
%
% eksperyment studentów (symulcja rzutu monetą)
% odkomentowac jezeli 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.eps','-deps','-FTimes-Roman:24')
# -*- coding: utf-8 -*-
import matplotlib.pyplot as plt
import numpy as np
from random import randint
 
plt.figure(1, figsize=(8,6), dpi=600)
i = np.array([s for s in np.arange(100)])
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)
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
    ,fancybox=True
    ,ncol=1
    ,loc=(0.025,0.96)
    )
plt.savefig('example02.png')

Przykład 3. Populacja Polski.

Źródło danych

http://epp.eurostat.ec.europa.eu/portal/page/portal/statistics/search_database

Przykład 4. Liczba wypadków samochodowych

Przykład 5. Giełda 1

Przykład 6. Giełda 2

Przykład 7. Giełda 3