Analiza Szeregów Czasowych/Wstęp

Z Skrypty dla studentów Ekonofizyki UPGOW

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 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).
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 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