Z Skrypty dla studentów Ekonofizyki UPGOW
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 x = -pi:7*pi/100:6*pi; 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; 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;"); 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 |
---|---|
% % Octave > 3.2 !!! % close all 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
- http://www.stat.gov.pl
- http://unstats.un.org/unsd/databases.htm
- http://mdgs.un.org
- http://www.fao.org/
- http://wiking.edu.pl/article.php?id=348
- !!!
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