Ta strona wykorzystuje ciasteczka ("cookies") w celu zapewnienia maksymalnej wygody w korzystaniu z naszego serwisu. Czy wyrażasz na to zgodę?

Czytaj więcej
< All Topics
Print

Szeregi czasowe

Tworzenie szeregów czasowych

Szeregi czasowe, a właściwie serie danych, którym przypisywany jest czas (ang time series) to dość częsty rodzaj danych związanych z rozliczeniami finansowymi, analizą wskaźników stanu gospodarki, które zazwyczaj wykonuje się raz na miesiąc lub raz na kwartał. Aby ułatwić zapisywanie takich danych w R, wymyślono rodzaj zmiennych zwanych po polsku szeregami czasowymi. W biologii trafiają się doświadczenia, których wyniki zapisuje się regularnie, co ustalony przedział czasowy i wyniki takiego eksperymentu można zapisać jako wektor danych z informacją od jakiej chwili rozpoczęto pomiary i co jaki czas je powtarzano.

Szeregi czasowe podlegają innej analizie statystycznej, niż wektory danych pomiarowych wykonywanych w tym samym czasie lub niezależnych od czasu. Standardowa analiza statystyczna dotyczy właśnie takich wektorów i opiera się o niezależność tych danych od siebie. Wyniki analiz nie powinny wtedy zależeć od kolejności danych występujących w takim ciągu. Natomiast kolejne wyniki pomiarów w szeregu czasowym w dużym stopniu zależą od wyniku pomiaru poprzedniego (np. średnica grzybni rosnącej na pożywce), zwłaszcza gdy pomiary wykonywane są często. Kolejność zapisu danych ma w nich istotne znaczenie.

Szeregi czasowe tworzy się funkcją ts(), której argumentem są wektory danych.

> cc=ts(c(3:1,1:3,c(2,3,1)))
> cc
Time Series:
Start = 1
End = 9
Frequency = 1
[1] 3 2 1 1 2 3 2 3 1
> cc=ts(c("c", "a", "b", "a", "b", "c", "c", "b", "c"))
> cc
Time Series:
Start = 1
End = 9
Frequency = 1
[1] c a b a b c c b c

 

Szeregi czasowe można utworzyć z wektorów o nazwanych wyrazach.

> d=c(L=c(0,1,4,0,0,1,4,0,1))
> ts(d)
Time Series:
Start = 1
End = 9
Frequency = 1
L1 L2 L3 L4 L5 L6 L7 L8 L9
0  1  4  0  0  1  4  0  1

 

Funkcja ts() standardowo ustala czas rozpoczęcia obserwacji (początek obserwacji) jako 1 i częstotliwość obserwacji jako co 1. Rzadko odpowiada to potrzebom. Zmianę tych wielkości uzyskuje się poprzez zastosowanie opcji start i frequency lub opcji deltat. Opcja frequency to liczba określająca ile razy w czasie 1 (który dodaje się do liczby podanej jako start) dokonano pomiaru. Opcja deltat jest odwrotnością frequencji i określa co jaki ułamek 1 dokonywano pomiaru. Tylko jedna z opcji frequency lub deltat może być użyta. W przypadku gdy frequency=4, deltat=0.25 lub frequency=12, deltat=1/12 przypisuje się automatycznie znaczenie co miesiąc lub co kwartał i szereg czasowy jest inaczej wyświetlany.

> aa=ts(1:36, start=1987, frequency=3)
> aa
Time Series:
Start = c(1987, 1)
End = c(1998, 3)
Frequency = 3
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
[33] 33 34 35 36
> aa=ts(1:36, start=1987, frequency=4)
> aa
Qtr1 Qtr2 Qtr3 Qtr4
1987    1    2    3    4
1988    5    6    7    8
1989    9   10   11   12
1990   13   14   15   16
1991   17   18   19   20
1992   21   22   23   24
1993   25   26   27   28
1994   29   30   31   32
1995   33   34   35   36
> aa=ts(1:36, start=1987, frequency=12)
> aa
    Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
1987   1   2   3   4   5   6   7   8   9  10  11  12
1988  13  14  15  16  17  18  19  20  21  22  23  24
1989  25  26  27  28  29  30  31  32  33  34  35  36
> aa=ts(1:36, start=1987, deltat=1/12)
> aa
    Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
1987   1   2   3   4   5   6   7   8   9  10  11  12
1988  13  14  15  16  17  18  19  20  21  22  23  24
1989  25  26  27  28  29  30  31  32  33  34  35  36

 

Pomimo, że dane wyświetlają się w tablicy, nadal jest to wektor z dodatkowymi informacjami, które pozwalają na określenie czasu pomiaru.

Opcja start nie musi być liczbą całkowitą i może mieć charakter wektora dwuelementowego. Pierwsza liczba w tym wektorze określa czas w większej jednostce, a druga – ile jednostek typu deltat trzeba do niej dodać.

> aa=ts(1:36, start=1987.75, deltat=1/12)
> aa
    Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
1987                                       1   2   3
1988   4   5   6   7   8   9  10  11  12  13  14  15
1989  16  17  18  19  20  21  22  23  24  25  26  27
1990  28  29  30  31  32  33  34  35  36
> aa=ts(1:36, start=c(1987,10), deltat=1/12)
> aa
    Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
1987                                       1   2   3
1988   4   5   6   7   8   9  10  11  12  13  14  15
1989  16  17  18  19  20  21  22  23  24  25  26  27
1990  28  29  30  31  32  33  34  35  36

 

Funkcja ts() ma jeszcze opcję: end. Nie zastępuje ona (niestety) opcji frequency lub deltat, co mogłoby zachodzić, gdyby podany w niej czas przyporządkować ostatniej z danych. Pokazuje ona po prostu, do której wartości ciągu (której odpowiada czas podany w end) dane powinny być wpisane do szeregu czasowego. Gdy czas podany w end przewyższa czas odpowiadający ostatniej zmiennej dane z ciągu zostają powielone, czasem wielokrotnie.

> kk=ts(letters, start=0, end=5, frequency=2)
> kk
Time Series:
Start = c(0, 1)
End = c(5, 1)
Frequency = 2
[1] a b c d e f g h i j k
> kk=ts(letters, start=0, end=30, frequency=2)
> aa
Time Series:
Start = c(0, 1)
End = c(30, 1)
Frequency = 2
[1] a b c d e f g h i j k l m n o p q r s t u v w x y z a b c d e f g h i j k l m n o p q r s t u v w
[50] x y z a b c d e f g h i

 

Szeregi czasowe zaimplementowane do R

Do R zaimplementowano kilkadziesiąt ciekawych szeregów czasowych, na których można ćwiczyć różne operacje. Przykładem takiego szeregu jest obiekt Nile pokazujący roczny przepływ wód Nilu w milionach metrów sześciennych wody na wysokości Assuanu w czasie 100 lat (do 1871 do 1970).

> Nile
Time Series:
Time Series:
Start = 1871
End = 1970
Frequency = 1
[1] 1120 1160  963 1210 1160 1160  813 1230 1370 1140  995  935 1110  994 1020  960 1180
[18]  799  958 1140 1100 1210 1150 1250 1260 1220 1030 1100  774  840  874  694  940  833
[35]  701  916  692 1020 1050  969  831  726  456  824  702 1120 1100  832  764  821  768
[52]  845  864  862  698  845  744  796 1040  759  781  865  845  944  984  897  822 1010
[69]  771  676  649  846  812  742  801 1040  860  874  848  890  744  749  838 1050  918
[86]  986  797  923  975  815 1020  906  901 1170  912  746  919  718  714  740

 

Można tez ćwiczyć na szeregu czasowym lynx pokazującym liczby złowień rysi w Kanadzie w latach 1821 – 1934. Dane pochodzą z pracy Campbell, M. J.and A. M. Walker (1977). A Survey of statistical work on the Mackenzie River series of annual Canadian lynx trappings for the years 1821–1934 and a new analysis. Journal of the Royal Statistical Society series A, 140, 411–431.

> lynx
Time Series: Start = 1821
End = 1934
Frequency = 1
[1]  269  321  585  871 1475 2821 3928 5943 4950 2577  523   98  184  279  409 2285 2685
[18] 3409 1824  409  151   45   68  213  546 1033 2129 2536  957  361  377  225  360  731
[35] 1638 2725 2871 2119  684  299  236  245  552 1623 3311 6721 4254  687  255  473  358
[52]  784 1594 1676 2251 1426  756  299  201  229  469  736 2042 2811 4431 2511  389   73
[69]   39   49   59  188  377 1292 4031 3495  587  105  153  387  758 1307 3465 6991 6313
[86] 3794 1836  345  382  808 1388 2713 3800 3091 2985 3790  674   81   80  108  229  399
[103] 1132 2432 3574 2935 1537  529  485  662 1000 1590 2657 3396

 

Zainteresowanym polecam też bardzo długi szereg czasowy pokazujący średnią liczbę plam słonecznych w kolejnych miesiącach o nazwie sunspots.month. Dane te pochodzą z Królewskiego Obserwatorium Astronomicznego w Belgii na podstawie obserwacji prowadzonych od 1700 roku. Można za jego pomocą weryfikować hipotezy, czy plamy słoneczne mają jakiś wpływ na życie na Ziemi.

Odwołanie się do elementów szeregu czasowego

Odwołanie się do wybranych wartości szeregu czasowego jest takie same jak odwołanie się do tych wartości w wektorze.

> a=ts(c(5,6,4,3,6,5,7,5),start=c(14,3), frequency=7)
> a[7]
[1] 7
> aa[17]
[1] NA

 

Jeżeli chcemy zobaczyć wektor czasu, trzeba użyć funkcji time(szereg.czasowy).

> a=ts(c(3,2,5,6,4,3,6,5,7,5),start=c(10,5), frequency=7)
> a
Time Series:
Start = c(10, 5)
End = c(11, 7)
Frequency = 7
[1] 3 2 5 6 4 3 6 5 7 5> time(a)
Time Series:
Start = c(10, 5)
End = c(11, 7)
Frequency = 7
[1] 10.57143 10.71429 10.85714 11.00000 11.14286 11.28571 11.42857 11.57143 11.71429 11.85714
> c(time(a)[7],a[7])
[1] 11.42857 6.00000

 

Jeżeli chcemy wyświetlić początek pomiarów należy użyć funkcji start(). Funkcja end() pokazuje koniec obserwacji. Funkcja frequency() pokaże częstotliwość pomiarów w jednostce czasu, a funkcja deltat() co jaki czas wykonywane były pomiary.

> a=ts(c("a","a","b","a","c","b","c"),start=c(28.6,0.5), frequency=15)
> a
Time Series:
Start = 28.5666666666667
End = 28.9666666666667
Frequency = 15
[1] a a b a c b c
> start(a)
[1] 28.56667
> end(a)
[1] 28.96667
> frequency(a)
[1] 15
> deltat(a)
[1] 0.06666667

 

Edycja szeregów czasowych

Poprzez odwołanie szereg[n] można zamienić wartość n-tego wyrazu czynnika

> b=ts(1:10,start=3,frequency=4)
> b
 Qtr1 Qtr2 Qtr3 Qtr4
3    1    2    3    4
4    5    6    7    8
5    9   10
> b[6]=15
> b
 Qtr1 Qtr2 Qtr3 Qtr4
3    1    2    3    4
4    5   15    7    8
5    9   10

 

Metoda tą nie da się zamienić wielkości związanych z czasem (start(szereg.czasowy), frequency(szereg.czasowy) i innych)

> b=ts(1:10,start=c(32),frequency=5)
> b
Time Series:
Start = c(32, 1)
End = c(33, 5)
Frequency = 5
[1] 1 2 3 4 5 6 7 8 9 10
> start(b)
[1] 32 1
> start(b)=33
Błąd w poleceniu 'start(b) = 33':nie udało się znaleźć funkcji 'start<-'
> frequency(b)
[1] 5
> frequency(b)=6
Błąd w poleceniu 'frequency(b) = 6':nie udało się znaleźć funkcji 'frequency<-'

 

Gdy istnieje konieczność poprawienia danych czasowych (start, frequency) należy utworzyć nowy szereg czasowy na wektorze as.vectos(szereg.czasowy).

> b=ts(1:10,start=c(32),frequency=5)
> b
> b
Time Series:
Start = c(32, 1)
End = c(33, 5)
Frequency = 5
[1] 1 2 3 4 5 6 7 8 9 10
> b=ts(as.vector(b), start=33, frequency=6)
> b
Time Series:
Start = c(33, 1)
End = c(34, 4)
Frequency = 6
[1] 1 2 3 4 5 6 7 8 9 10

 

Wykrawanie fragmentu szeregu czasowego wykonuje się za pomocą funkcji window(), w której dwa parametry liczbowe oznaczają początek i koniec czasu jakich wykrojone dane dotyczą.

> b=ts(1:10,start=c(3,2),frequency=4)
> b
  Qtr1 Qtr2 Qtr3 Qtr4
3         1    2    3
4    4    5    6    7
5    8    9   10
> c=window(b, start=3.75, end=5)
> c
 Qtr1 Qtr2 Qtr3 Qtr4 3                   3
4    4    5    6    7
5    8
> d=window(b, 3.2, 5)
> d
  Qtr1 Qtr2 Qtr3 Qtr4
3         1    2    3
4    4    5    6    7
5    8
Komunikat ostrzegawczy:
W poleceniu 'window.default(x, ...)': argument 'start' nie został zmieniony

 

Może zaistnieć potrzeba utworzenia szeregu czasowego z co drugiego lub co trzeciego wyrazu istniejącego już szeregu. Wykonuje się to także funkcją window() z opcją frequency.

> b=ts(1:100,start=c(1900,1),frequency=12)
> b
    Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
1900   1   2   3   4   5   6   7   8   9  10  11  12
1901  13  14  15  16  17  18  19  20  21  22  23  24
1902  25  26  27  28  29  30  31  32  33  34  35  36
1903  37  38  39  40  41  42  43  44  45  46  47  48
1904  49  50  51  52  53  54  55  56  57  58  59  60
1905  61  62  63  64  65  66  67  68  69  70  71  72
1906  73  74  75  76  77  78  79  80  81  82  83  84
1907  85  86  87  88  89  90  91  92  93  94  95  96
1908  97  98  99 100
> window(b, frequency=2)
Time Series:
Start = c(1900, 1)
End = c(1908, 1)
Frequency = 2
[1]  1  7 13 19 25 31 37 43 49 55 61 67 73 79 85 91 97

 

Wszelkie łączenia szeregów czasowych polegają na dokładnym dopasowaniu momentów czasowych. Takie dopasowanie momentów czasowych dwóch szeregów umożliwiają funkcje ts.union() i ts.intersect(). Tworzą one obiekty typu: wielokrotny szereg czasowy (mts) tożsamy z macierzą lub baza danych (po użyciu opcji dframe=TRUE). Posiadają kolumnę danych czasowych i dwie kolumnami danych z jednego lub drugiego szeregu i ewentualnie wartości NA. Oba szeregi muszą mieć tę samą częstotliwość i, a ich zakresy czasowe pokrywać się częściowo.

> aa=ts(1:10,-5,frequency=0.5)
> aa
Time Series:
Start = -5
End = 13
Frequency = 0.5
[1] 1 2 3 4 5 6 7 8 9 10
> bb=ts(11:20,1,frequency=0.5)
> bb
Time Series:
Start = 0
End = 18
Frequency = 0.5
[1] 11 12 13 14 15 16 17 18 19 20
> ts.union(aa,bb)
Time Series:
Start = -5
End = 17
Frequency = 0.5
aa bb
-5  1 NA
-3  2 NA
-1  3 NA
1  4 11
3  5 12
5  6 13
7  7 14
9  8 15
11  9 16
13 10 17
15 NA 18
17 NA 19
19 NA 20
> ts.intersect(aa,bb)
Time Series:
Start = 1
End = 13
Frequency = 0.5
aa bb
1  4 11
3  5 12
5  6 13
7  7 14
9  8 15
11  9 16
13 10 17
> bb=ts(11:20,0,frequency=0.5)
> ts.intersect(aa,bb)
Błąd w poleceniu '.cbind.ts(list(...), .makeNamesTs(...), dframe = dframe, union = FALSE)':
liczba pozycji do zastąpienia nie jest wielokrotnością długości zamiany

 

Ostatni komunikat związany był z tym, że po poprawce szereg czasowy bb dotyczył liczb parzystych, a czas w szeregu czasowym aa był liczony liczbami nieparzystymi. Niezrozumiały język tego komunikatu wynika z tego, że jest to dosłowne tłumaczenie informacji o wyniku funkcji sprawdzającej zachodzenie na siebie wektorów czasowych.

Po zrobieniu takiej macierzy (bazy danych) w zależności od potrzeb można dodać osobną kolumnę i wpisać do niej średnie, sumy lub wyniki innych działań, ale będzie to wyjaśnione w rozdziałach omawiających macierze i bazy danych.

Działania na szeregach czasowych

Na szeregach czasowych można wykonać takie same działania jak na wektorach. Dotyczą one jednak tylko przekształceń danych, a nie wektora czasu.

Przy działaniu miedzy szeregiem czasowym a liczba lub wektorem liczb obowiązują podobne zasady przy działaniu między wektorami. Gdy wektor jest krótszy od szeregu czasowego, jest wielokrotnie powielany aż osiągnie długość szeregu lub ja przewyższy. Następnie działania wykonywane są między odpowiadającymi sobie wyrazami. W przypadku gdy wektor jest dłuższy od szeregu czasowego działanie nie zostaje wykonane.

> aa=ts(1:5, c(2000,3) ,frequency=4)
> aa
    Qtr1 Qtr2 Qtr3 Qtr4
2000              1    2
2001    3    4    5
> aa*10
    Qtr1 Qtr2 Qtr3 Qtr4
2000             10   20
2001   30   40   50
> aa*c(10,20,30)
    Qtr1 Qtr2 Qtr3 Qtr4
2000             10   40
2001   90   40  100
Komunikat ostrzegawczy:
W poleceniu '`*.default`(aa, c(10, 20, 30))':
długość dłuszego obiektu nie jest wielokrotnością długości krótszego obiektu
> aa*c(10,20,30,40,50)
    Qtr1 Qtr2 Qtr3 Qtr4
2000             10   40
2001   90  160  250
> aa*c(10,20,30,40,50,60)
Błąd w poleceniu '`*.default`(aa, c(10, 20, 30, 40, 50, 60))':
niezgodność długości szeregu czasowego/wektora

 

Na liczbowych szeregach czasowych i wektorach można w podobny sposób wykonywać działania +, -, *, /, ^, %%, %/%.

Można wykonywać działania między dwoma szeregami czasowymi, o ile ich wektory czasu całkowicie się pokrywają.

> bb=ts(1:7, 2000, frequency=5)
> bb
Time Series:
Start = c(2000, 1)
End = c(2001, 2)
Frequency = 5
[1] 1 2 3 4 5 6 7
> cc=ts(8:2, 2000, frequency=5)
Time Series:
Start = c(2000, 1)
End = c(2001, 2)
Frequency = 5
[1] 8 7 6 5 4 3 2
> bb+cc
Time Series:
Start = c(2000, 1)
End = c(2001, 2)
Frequency = 5
[1] 9 9 9 9 9 9 9
> bb*cc
Time Series:
Start = c(2000, 1)
End = c(2001, 2)
Frequency = 5
[1] 8 14 18 20 20 18 14
> cc=ts(8:2, 2000, frequency=6)
> cc
Time Series:
Start = c(2000, 1)
End = c(2001, 1)
Frequency = 6
[1] 8 7 6 5 4 3 2
> bb+cc
Błąd w poleceniu '.cbind.ts(list(e1, e2), c(deparse(substitute(e1))[1L],
deparse(substitute(e2))[1L]), ':
nie wszystkie szeregi mają tę samą częstotliwość

 

Funkcje na szeregach czasowych

Podstawowe funkcje analizujące typ obiektu i typ jego elementów: mode(), typeof(), class() i str() zastosowane dla szeregów czasowych dają następujące odpowiedzi:

> cc=ts(c(7,5,4,3,6,5,7,8,9,10,7,6,5), 1999,frequency=5)
> cc
Time Series:
Start = c(1999, 1)
End = c(2001, 3)
Frequency = 5
[1]  7  5  4  3  6  5  7  8  9 10  7  6  5
> mode(cc)
[1] "numeric"
> typeof(cc)
[1] "double"
> class(cc)
[1] "ts"
> str(cc)
Time-Series [1:13] from 1999 to 2001: 7 5 4 3 6 5 7 8 9 10 ...

 

Podstawowe funkcje pokazujące cechy szeregu czasowego to:

  • length() – liczba danych
  • start() – czas (data) pierwszego pomiaru
  • end() – czas (data) ostatniego moniaru
  • frequency() – liczba pomiarów w jednostce czasu
  • deltat() – czas między kolejnymi pomiarami
> aa=ts(1:24, c(12,3), frequency=6)
> aa
Time Series:
Start = c(12, 3)
End = c(16, 2)
Frequency = 6
[1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
> length(aa)
[1] 24
> start(aa)
[1] 12 3
> end(aa)
[1] 16 2
> frequency(aa)
6
> deltat(aa)
0.166667

 

Funkcja as.vector pokazuje wektor danych bez przyporządkowanych mu wartości czasu. Funkcja time() pokazuje czasu, jako szereg czasowy liczb rzeczywistych z ułamkiem dziesiętnym równym wielokrotnościom liczby deltat. Aby uzyskać wektor czasu należy użyć formuły as.vector(time())

> ee=ts(letters[1:12], c(0,3), frequency=7)
> ee
Time Series:
Start = c(0, 3)
End = c(1, 7)
Frequency = 7
[1] a b c d e f g h i j k l
> as.vector(ee)
[1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l"
> time(ee)
Time Series:
Start = c(0, 3)
End = c(1, 7)
Frequency = 7
[1] 0.2857143 0.4285714 0.5714286 0.7142857 0.8571429 1.0000000 1.1428571 1.2857143
[9] 1.4285714 1.5714286 1.7142857 1.8571429
> as.vector(time(ee))
[1] 0.2857143 0.4285714 0.5714286 0.7142857 0.8571429 1.0000000 1.1428571 1.2857143
[9] 1.4285714 1.5714286 1.7142857 1.8571429

 

Szeregi czasowe o liczbowych wartościach można przekształcić za pomocą funkcji matematycznych. Obowiązują tu zasady takie same, jak w przypadku wektorów. Przekształcenia te nie dotyczą wektora czasu związanego z szeregiem czasowym.

> aa=ts(c(1.4, 1.4, 5.6, 5.6, 9.9, 9.9), 2000, frequency=3)
> aa
Time Series:
Start = c(2000, 1)
End = c(2001, 3)
Frequency = 3
[1] 1.4 1.4 5.6 5.6 9.9 9.9
> log(aa)
Time Series:
Start = c(2000, 1)
End = c(2001, 3)
Frequency = 3
[1] 0.3364722 0.3364722 1.7227666 1.7227666 2.2925348 2.2925348
> sin(aa)
Time Series:
Start = c(2000, 1)
End = c(2001, 3)
Frequency = 3
[1] 0.9854497 0.9854497 -0.6312666 -0.6312666 -0.4575359 -0.4575359
> gamma(aa)
Time Series:
Start = c(2000, 1)
End = c(2001, 3)
Frequency = 3
[1] 8.872638e-01 8.872638e-01 6.155392e+01 6.155392e+01 2.898677e+05 2.898677e+05

 

Typowe funkcje statystyczne działają na szeregach czasowych tak samo, jak na wektorach.

> ss=ts(c(5.2, 4.3, 2.9, 7.2, -2.1, 5.1, 4.7, -3.7, 0.8, -7.2), 2018, frequency=5)
> ss
Time Series:
Start = c(2018, 1)
End = c(2019, 5)
Frequency = 5
[1] 5.2 4.3 2.9 7.2 -2.1 5.1 4.7 -3.7 0.8 -7.2
> mean(ss)
[1] 1.72
> var(ss)
[1] 21.65289
> sd(ss)
[1] 4.653266
> min(ss)
[1] -7.2
> which.min(ss)
[1] 10

 

Szeregi czasowe, ze względu na zależność danych od siebie, podlegają odrębnej analizie statystycznej. Traktuje się je, jako realizacje jakiegoś procesu stochastycznego (czyli poszczególne elementy nie są losowane z jakiejś populacji możliwych wyników pomiarów, ale cały ciąg zostaje wylosowany z jakiegoś zbioru możliwych ciągów). Wypracowano dla nich mnóstwo odrębnych metod analiz statystycznych, głównie w takich dziedzinach nauki jak: socjologia, bankowość, nauka o gospodarce i finansach. Chodzi w nich przede wszystkim o możliwość przewidywania dalszych wartości szeregu czasowego na podstawie dotychczasowym jego przebiegu. W podstawowym kursie statystyki dla biologów nie ma niestety miejsca na omówienie tych zagadnień i studenci mający tego typu dane do opracowania, sami muszą się zmierzyć z tym problemem.

R jest programem, do którego można ściągnąć pakiety związane z analizą szeregów czasowych. Wraz z nimi R stanowi największy pakiet statystyczny analizujący takie obiekty. Omówienie możliwości R, w zakresie analizy szeregów czasowych, znajduje się na stronie https://cran.r-project.org/web/views/TimeSeries.html. Teoretyczne zagadnienia omówiono na stronie https://cran.r-project.org/web/packages/timeSeries/index.html, gdzie też znajduje się link do podręcznika statystycznego poświęconego szeregom czasowym.

Tags:
Spis treści