Z Skrypty dla studentów Ekonofizyki UPGOW
(→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.=== | |
[[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; | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
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.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).=== | |
[[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"> | ||
- | |||
- | |||
- | |||
- | |||
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.=== | |
- | + | ||
- | + | ||
- | + | ====Źródło danych==== | |
- | + | ||
- | + | ||
- | + | ||
http://epp.eurostat.ec.europa.eu/portal/page/portal/statistics/search_database | 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=== |
Wersja z 23:00, 10 lut 2010
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:
- 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.
Przykłady szeregów czasowych
Przykład 1. Prąd płynący przez opornik.
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).
- 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]\).
- 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).
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