Z Skrypty dla studentów Ekonofizyki UPGOW
(→Przykłady szeregów czasowych) |
|||
Linia 1: | Linia 1: | ||
[[Analiza Szeregów Czasowych]] | [[Analiza Szeregów Czasowych]] | ||
+ | |||
+ | __TOC__ | ||
==Definicja szeregu czasowego== | ==Definicja szeregu czasowego== | ||
Linia 33: | Linia 35: | ||
# Zbierz do tablic indeksy <math>i</math> oraz wartości natężenia prądu w punktach <math>t_i = i \cdot ( 6 \pi / 100 ), i \in [0,100]</math>. | # Zbierz do tablic indeksy <math>i</math> oraz wartości natężenia prądu w punktach <math>t_i = i \cdot ( 6 \pi / 100 ), i \in [0,100]</math>. | ||
# 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>. | ||
+ | |||
+ | Rozwiązanie w języku '''python''' z bibliotekami '''numpy''' oraz '''matplotlib''': | ||
+ | <source lang="python"> | ||
+ | from pylab import * | ||
+ | import matplotlib.pyplot as plt | ||
+ | import numpy as np | ||
+ | |||
+ | 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$') | ||
+ | ltxt = leg.get_texts() | ||
+ | plt.savefig('example01.png') | ||
+ | </source> | ||
+ | |||
;Przykład 2: Proces dwustanowy (proces binarny, zerojedynkowy). | ;Przykład 2: Proces dwustanowy (proces binarny, zerojedynkowy). | ||
Linia 39: | Linia 83: | ||
(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,...}. | (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ą. | 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 [[https://spreadsheets.google.com/ccc?key=0Ah95jpawYXXzdGFiT2xQTmFCUmJRalViS1NKeU1RbGc&hl=en docs.google.com]] wpisujemy wartości: | ;Ć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 [[https://spreadsheets.google.com/ccc?key=0Ah95jpawYXXzdGFiT2xQTmFCUmJRalViS1NKeU1RbGc&hl=en docs.google.com]] wpisujemy wartości: | ||
Linia 48: | Linia 93: | ||
* zaimportuj dane do tabeli w Matlab'ie | * zaimportuj dane do tabeli w Matlab'ie | ||
* Wyplotuj do pliku (np: rysW12.png) wykres <math>X_t</math>. | * Wyplotuj do pliku (np: rysW12.png) wykres <math>X_t</math>. | ||
+ | |||
+ | Rozwiązanie w języku '''python''' z bibliotekami '''numpy''' oraz '''matplotlib''': | ||
+ | <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) | ||
+ | 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 | ||
+ | #,mode='expand' | ||
+ | ,ncol=1 | ||
+ | ,loc=(0.025,0.96) | ||
+ | #,handletextpad=0.1 | ||
+ | #,title=r'$X_t$' | ||
+ | ) | ||
+ | plt.savefig('example02.png') | ||
+ | </source> | ||
;Przykład 3: Populacja Polski | ;Przykład 3: Populacja Polski |
Wersja z 19:46, 8 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 python z bibliotekami numpy oraz matplotlib:
from pylab import * import matplotlib.pyplot as plt import numpy as np 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$') ltxt = leg.get_texts() plt.savefig('example01.png')
- Przykład 2
- Proces dwustanowy (proces 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 python z bibliotekami numpy oraz matplotlib:
# -*- 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 #,mode='expand' ,ncol=1 ,loc=(0.025,0.96) #,handletextpad=0.1 #,title=r'$X_t$' ) plt.savefig('example02.png')
- Przykład 3
- Populacja Polski
- 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