Kapitel 22 Tidsrækker og ARIMA

Sentry Page Protection

Gennemgangen af tidsrækkeanalyse bygger meget på praktisk anvendelighed (dvs. vi vil gerne kunne forudsige kursudviklingen), vi vil springe let hen over teorien der kan være tung og er meget omfattende. Nedenstående links giver dog en indføring i den teoretiske del, som vi her ikke berører.

http://ucanalytics.com/blogs/arima-models-manufacturing-case-study-example-part-3/

http://ucanalytics.com/blogs/step-by-step-graphic-guide-to-forecasting-through-arima-modeling-in-r-manufacturing-case-study-example/

Her er en gennemgang af forskellige typer af tidsrækker man kan opleve.

https://people.duke.edu/~rnau/411arim.htm#arima010

Video om ARIMA https://youtu.be/Aw77aMLj9uM

En tidsrække er observationer, der er observeret over tid, fx. lukkekursen på Novo i 2018, kan vi beskrive som en tidsrække. Hvor vi både registrerer dato og lukkekursen. ARIMA er et avanceret analyseværktøj til at beskrive tidsrækker. Vi vil i de følgende kaptiler, med eksempler beskrive hvordan de enkelte elementer i ARIMA rent praktisk fungerer.

AR står for AutoRegressive I står for Integrated MA står for Moving Average

Lad i de følgende afsnit se på nogle simple eksempler for trinvis, at kunne beskrive hvorledes modellen fungerer.

22.1 ARIMA(0,0,0)


Nedenfor har vi aktiekurser for 50 dage for en fiktiv aktie, vi vil nu undersøge om disse kan bruges til at forudsige noget om fremtidige aktiekurser. For at gøre dette, skal man enten importere Excelfilen, eller copy paste data fra rammen nedenfor.

Hent ARIMA1.xlsx Excel filen her. Importer ARIMA1.xlsx til R via menuen File - Import Dataset - Excel. Nu skal datasættet rettes til en tidsserie med ts() kommandoen.

Vi kan nu plotte vore data i R.

Det er svært at se nogen tydelig udvikling i kursen.

Vi benytter auto.arima til at undersøge om der er en systematik i tidsserien, for at bruge denne funktion skal vi hente og loade pakken forecast med fx. pacman:

Funktionen auto.arima i R er en fantastisk funktion, der automatisk finder den ARIMA model, der passer bedst på observationerne.

## Series: ARIMA1 
## ARIMA(0,0,0) with non-zero mean 
## 
## Coefficients:
##          mean
##       19.8964
## s.e.   0.2872
## 
## sigma^2 estimated as 4.209:  log likelihood=-106.37
## AIC=216.74   AICc=217   BIC=220.57

Output ARIMA(0,0,0) with non-zero mean, fortæller os at data er ligesom hvid støj. Den bedste forudsigelse af aktieprisen, vi kan komme med er gennemsnittet af alle kurserne. Vi kan altså ikke forudsige prisen vha. vore fine værktøjer.

Akaike Information Criterion (AIC) , og Bayesian Information Criterion (BIC) benyttes til at vælge ARIMA modellen med mindst AIC og BIC værdier. auto.arima finder den bedste model automatisk.

Her er ligningen for aktiekursen, den bedste forudsigelse af den fremtidige kurs er den gennemsnitlige kurs der tidligere er observeret.

\[\hat{Y_t}=19.90\]

Variablen \(\hat{Y}_t\), kaldet Y hat t angiver vort estimat (gæt) på aktiekursen på tidspunkt \(t=1,2,3,...\). Der er således så lidt systematik i Data at her er tale om en ARIMA(0,0,0) model. Vi ser også at der står “ARIMA(0,0,0) with non-zero mean” i output fra R.

22.2 ARIMA(1,0,0) eller AR(1) autoregression


En ARIMA(1,0,0) model kan skrives som:

\[\hat{Y_t}=c + \phi Y_{t-1}\]

Vi kan forklare \(\hat{Y_t}\) er værdien for tidsrækken på tidspunkt \(t\), ud fra en konstant \(c\) plus en faktor \(\phi\), der ganges på værdien for tidsrækken på tidspunkt \(t-1\). For at bestemme c skal vi kende tidsrækkens sande middelværdi \(\mu\) og \(\phi\), disse værdier kan R beregne for os. Vi kan så beregne konstanten \(c=(1-\phi)\cdot \mu\). Det betyder så at vi kan estimere fremtidige værdier tidsrækken.

Vi har nu et eksempel hvor den sande middelværdi for tidsrækken er \(\mu=100\) og \(\phi=0.5\) for en ARIMA(1,0,0) model. Så kan vi beregne \(c=(1-\phi)\cdot \mu=(1-0.5)\cdot 100=50\) er middelværdien estimeret ved den gennemsnitlige kurs. Ligningen for modellen kan så skrives som:

\[\hat{Y_t}=c + \phi Y_{t-1} \Leftrightarrow \hat{Y_t}=50 + 0.5 Y_{t-1}\]

\(\phi\) fortæller, hvis kursen dagen før var 80 gennemsnitskursen er 100, vil kursen imorgen \(t=1\) ifølge modellen være forudsagt som: \[50+0.5\cdot 80=90\] Dagen efter \(t=2\) vil kursen så være forudsagt til: \[50+0.5\cdot 90=95\] Om 3 dage dvs. \(t=3\) vil kursen så være forudsagt til: \[50+0.5\cdot 95=97.5\] Om 4 dage dvs. \(t=4\) vil kursen så være forudsagt til: \[50+0.5\cdot 97.5=98.75\]

Osv..

Vi siger at forudsagte værdier konvergerer mod (dvs. nærmer sig) \(\mu=100\).

AR i ARIMA, står for autoregression, selv-regression mod middelværdien, i eksemplet så vi hvordan værdien nærmer sig 100, hvis vi forudsiger flere dages kurser kan vi se dette.

\(\phi\) må kun antage værdier mellem og ikke lig med -1 og 1, hvilket betyder den er stationær, altså nærmer sig den sande middelværdi \(\mu\).

Hvad vil der ske hvis \(\mu=100\) og \(\phi=-0.5\) for en ARIMA(1,0,0) model (husk \(c=(1-\phi)\cdot\mu\) når man skal bestemme modellen)?

Hent ARIMA2.xlsx Excel filen her. Importer ARIMA2.xlsx til R via menuen File - Import Dataset - Excel. Nu skal datasættet rettes til en tidsserie med ts() kommandoen.

## Series: ARIMA2 
## ARIMA(1,0,0) with non-zero mean 
## 
## Coefficients:
##          ar1      mean
##       0.3664  103.2372
## s.e.  0.1301    2.4492
## 
## sigma^2 estimated as 128.3:  log likelihood=-191.36
## AIC=388.73   AICc=389.25   BIC=394.46

Her afslører auto.arima 1. ordens autoregression dvs.

Modellen kan skrives som.

\[\hat{Y_t}=c + \phi Y_{t-1}\Leftrightarrow \hat{Y_t}=(1-0.3664)\cdot 103.2372 + 0.3664Y_{t-1}\Leftrightarrow \hat{Y_t}=65.4125 + 0.3664Y_{t-1}\]

Vi ser nu igen på vores eksempel med ARIMA2, vi kan nu i R forudsige aktiekursen 12 perioder frem med predict:

## Time Series:
## Start = 51 
## End = 62 
## Frequency = 1 
##  [1] 105.3673 104.0177 103.5232 103.3420 103.2756 103.2513 103.2424
##  [8] 103.2391 103.2379 103.2375 103.2373 103.2373
Spørgsmål ARIMA(1,0,0) Hent ARIMA22.xlsx Excel filen her. Importer ARIMA22.xlsx til R via menuen File - Import Dataset - Excel. Bestem for den fremtidige aktiekurs 15 perioder frem, udregn direkte fx. vha. Excel og tjek dit resultat i R.

Svar ARIMA(1,0,0)

## Series: ARIMA22 
## ARIMA(1,0,0) with non-zero mean 
## 
## Coefficients:
##          ar1      mean
##       0.2286  215.4871
## s.e.  0.1371    2.3978
## 
## sigma^2 estimated as 180.3:  log likelihood=-199.82
## AIC=405.63   AICc=406.15   BIC=411.37
## Time Series:
## Start = 51 
## End = 65 
## Frequency = 1 
##  [1] 216.7592 215.7779 215.5536 215.5023 215.4905 215.4878 215.4872
##  [8] 215.4871 215.4871 215.4871 215.4871 215.4871 215.4871 215.4871
## [15] 215.4871

Spørgsmål ARIMA(1,0,0) Hent ARIMA23.xlsx Excel filen her. Importer ARIMA23.xlsx til R via menuen File - Import Dataset - Excel. Bestem for den fremtidige aktiekurs 15 perioder frem, udregn direkte fx. vha. Excel og tjek dit resultat i R.


22.3 ARIMA(0,1,0) eller I(1) Random Walk with a drift


Hvis en serie er ikke-stationær, er den simpleste model en random walk:

\[\hat{Y_t}-Y_{t-1}=\mu\Leftrightarrow \hat{Y_t}=Y_{t-1}+\mu\] Dette betyder at Y stiger konstant med \(\mu\) i hver periode. Drift betyder at tidsrækken stiger konstant.

Forestiller man sig en ARIMA(0,1,0) med drift 10 og en kurs på tidspunkt t-1 på 120, vil vi forudsige en kurs på 130 ved tid t og 140 ved tid t+1 osv. Vi kan opskrive modellen som: \[\hat{Y_t}-Y_{t-1}=10\Leftrightarrow \hat{Y_t}=Y_{t-1}+10\]

Hent ARIMA3.xlsx Excel filen her. Importer ARIMA3.xlsx til R via menuen File - Import Dataset - Excel. Nu skal datasættet rettes til en tidsserie med ts() kommandoen.

## Series: ARIMA3 
## ARIMA(0,1,0) with drift 
## 
## Coefficients:
##        drift
##       7.9149
## s.e.  1.2790
## 
## sigma^2 estimated as 83.46:  log likelihood=-181.05
## AIC=366.1   AICc=366.36   BIC=369.93

Modellen ovenfor kan skrives som: \[\hat{Y_t}-Y_{t-1}=\mu\Leftrightarrow \hat{Y_t}-Y_{t-1}=7.9\Leftrightarrow \hat{Y_t}=Y_{t-1}+7.9\] Vi indsætter drift i stedet for \(\mu\), tolningen er at modellen forudsiger at aktiekursen stiger med 7.9 fra periode til periode.

Hvis vi har en ren random walk model uden drift dvs. med \(\mu=0\) ARIMA(0,1,0) for en aktiekurs , forventer vi at kursen til tid t vil være den samme som til tid t-1. Denne kan skrives som:

\[\hat{Y_t}-Y_{t-1}=0\]

22.4 ARIMA(0,0,1) eller MA(1) Moving average


Vi kan i stedet for at bruge tidligere aktiekurser til at forudsige aktiekursen i stedet benytte tidligere målefejl residualer til at forudsige kursen.

Modellen kan skrives som:

\[\hat{Y_t}=\mu+\theta_1 e_{t-1}\] Hvis vi forestiller os \(\mu=50\) \(\theta_1=0.5\) kursen til tid t-1 var 120 forudsigelsen til tid t-1 var 100, så målefejlen residualen til tid t-1 er \(e_{t-1}\) er faktisk kurs minus forudsagt kurs altså 120-100=20. Nu kan vi forudsige kursen til tid t som: \[\hat{Y_t}=\mu+\theta_1 e_{t-1}\Leftrightarrow \hat{Y_t}=50+0.5\cdot20=60\]

Hent ARIMA4.xlsx Excel filen her. Importer ARIMA4.xlsx til R via menuen File - Import Dataset - Excel. Nu skal datasættet rettes til en tidsserie med ts() kommandoen.

## Series: ARIMA4 
## ARIMA(0,0,1) with non-zero mean 
## 
## Coefficients:
##          ma1     mean
##       0.9053  99.0176
## s.e.  0.0664   2.5588
## 
## sigma^2 estimated as 95.68:  log likelihood=-184.81
## AIC=375.62   AICc=376.14   BIC=381.35

Vi kan nu forudsige aktiekursen 12 perioder frem med predict:

## Time Series:
## Start = 51 
## End = 62 
## Frequency = 1 
##  [1] 113.64960  99.01756  99.01756  99.01756  99.01756  99.01756  99.01756
##  [8]  99.01756  99.01756  99.01756  99.01756  99.01756

Hvorfor svarer den forudsagte værdi til mean i en ren ARIMA(0,0,1) eller MA(1) model? (Vink hvad er definitionen på en residual)

22.5 Plots med forskellige modeller

## Series: ap1 
## ARIMA(0,1,1) 
## 
## Coefficients:
##           ma1
##       -0.4405
## s.e.   0.1150
## 
## sigma^2 estimated as 85.23:  log likelihood=-181.68
## AIC=367.37   AICc=367.62   BIC=371.19

Kursen svinger omkring middelværdien.

## Series: ap2 
## ARIMA(1,2,1) 
## 
## Coefficients:
##          ar1      ma1
##       0.3952  -0.8971
## s.e.  0.1590   0.0768
## 
## sigma^2 estimated as 85.76:  log likelihood=-178.03
## AIC=362.07   AICc=362.6   BIC=367.74

## Series: ap3 
## ARIMA(2,0,1) with non-zero mean 
## 
## Coefficients:
##           ar1     ar2     ma1     mean
##       -0.4941  0.1051  0.9585  99.4445
## s.e.   0.0758  0.0746  0.0277   1.0424
## 
## sigma^2 estimated as 111.9:  log likelihood=-754.1
## AIC=1518.2   AICc=1518.51   BIC=1534.69

Vi kan også grafisk vise hvordan kursen vil udvikle sig med 80% og 95% konfidensbælter.

##     Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
## 201       96.74008 83.18551 110.2946 76.01015 117.4700
## 202       99.36628 84.42151 114.3111 76.51022 122.2224
## 203       99.19883 84.15931 114.2383 76.19787 122.1998
## 204       99.55763 84.44404 114.6712 76.44339 122.6719
## 205       99.36273 84.22144 114.5040 76.20612 122.5193
## 206       99.49675 84.34319 114.6503 76.32138 122.6721
## 207       99.41004 84.25127 114.5688 76.22670 122.5934
## 208       99.46697 84.30597 114.6280 76.28021 122.6537
## 209       99.42973 84.26776 114.5917 76.24150 122.6180
## 210       99.45412 84.29174 114.6165 76.26526 122.6430

22.6 ARIMA af højere orden

Arima modeller kan afhænge af flere tidligere perioder, fx kan ligningen for ARIMA(2,0,0) eller AR(2), opskrives som:

\[\hat{Y_t}=c + \phi Y_{t-1}+ \phi_2 Y_{t-2}\] Modellen afhænger altså af 2 tidligere perioder (lags) og ikke en. Man betegner dette som en model med lag 2.

Arima modeller kan indeholde flere forskellige elementer med lag som fx. ARIMA(0,2,1).

22.7 ARIMA og sæsonalitet


Hvis fx. en aktie handles lavere om fredagen kan ARIMA modellerne korrigere for dette ved sæsonkorrektion. I sæsonkorrigerede modeller vises dette som en ekstra vektor med 3 tal for hhv. sæsonkorrigeret AR eller SAR, sæsonkorrigeret I eller SI og sæsonkorrigeret MA eller SMA. En model som ARIMA(1,0,0)(1,0,0) har altså udover AR også en sæsonkomponent.

22.8 ARIMA eksempler

22.8.1 Traktorer

Hent følgende data for traktor salg, med følgende kommandoer i R.

Vi ser salget er voksende over tid, der er ligeledes en sæsonkomponent.

Differens tranformer data for at generere stationære data mht. middel (fjern trend)

log transformer data for at sikre stationaritet mht. varians.

Eventuel Differens og log transformation af data for at sikre stationaritet både mht. middel og varians.

Find bedste model med auto.arima, når der er stationaritet.

Akaike Information Criterion (AIC) , og Bayesian Information Criterion (BIC), vælg ARIMA modellen med mindst AIC and BIC værdier. auto.arima finder den bedste model automatisk.

## Series: log10(data) 
## ARIMA(0,1,1)(0,1,1)[12] 
## 
## Coefficients:
##           ma1     sma1
##       -0.4047  -0.5529
## s.e.   0.0885   0.0734
## 
## sigma^2 estimated as 0.0002571:  log likelihood=354.4
## AIC=-702.79   AICc=-702.6   BIC=-694.17

Nu kan vi forudsige kommende traktor salg med modellen

##            Jan       Feb       Mar       Apr       May       Jun       Jul
## 2015  567.7645  566.4765  670.8226  758.9138  855.9482  817.2827  938.7239
## 2016  625.2464  623.8280  738.7384  835.7481  942.6065  900.0265 1033.7626
## 2017  688.5479  686.9859  813.5300  920.3613 1038.0383  991.1474 1138.4233
##            Aug       Sep       Oct       Nov       Dec
## 2015  934.5120  703.5005  626.9879  571.9988  668.5363
## 2016 1029.1243  774.7246  690.4657  629.9094  736.2206
## 2017 1133.3154  853.1596  760.3701  693.6830  810.7573

22.8.2 Detail debet card forbrug på Island (millioner ISK).

## Series: log10(debitcards) 
## ARIMA(2,1,0)(0,1,1)[12] 
## 
## Coefficients:
##           ar1      ar2     sma1
##       -0.7167  -0.4372  -0.8352
## s.e.   0.0761   0.0763   0.1085
## 
## sigma^2 estimated as 0.0004402:  log likelihood=343.95
## AIC=-679.9   AICc=-679.61   BIC=-668.05

Nu kan vi forudsige kommende debetkort omsætning med modellen

Forudsagt brug af debetkort bliver:

##           Jan      Feb      Mar      Apr      May      Jun      Jul
## 2013 19717.77 19162.87 20436.29 20506.84 23262.14 23545.62 24292.86
## 2014 20701.39 20352.57 21886.85 21721.53 24745.18 25091.09 25806.49
## 2015 22017.60 21649.95 23281.85 23104.56 26321.98 26689.74 27450.29
##           Aug      Sep      Oct      Nov      Dec
## 2013 25544.16 22267.47 22543.80 22081.63 29090.93
## 2014 27175.65 23697.15 23970.40 23490.36 30947.83
## 2015 28907.08 25206.87 25497.43 24986.92 32919.46

22.9 Forecast Aktiekurser


Man kan hente online aktiekurser med quantmod pakken installer denne med fx. pacman, vi skal også bruge pakken forecast som vi ligeledes henter. Vi henter nedenfor Google justeret lukkekurs til dato det er 6 søjle i GOOG matricen nedenfor. Vi kan se forecaste aktiekursen vha.

## [1] "GOOG"

## Series: GOOG[, 6] 
## ARIMA(0,1,0) 
## 
## sigma^2 estimated as 233.2:  log likelihood=-2312.88
## AIC=4627.75   AICc=4627.76   BIC=4632.08
##     Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
## 560           1193 1173.429 1212.571 1163.068 1222.932
## 561           1193 1165.322 1220.678 1150.670 1235.330
## 562           1193 1159.101 1226.899 1141.156 1244.844
## 563           1193 1153.857 1232.143 1133.136 1252.864
## 564           1193 1149.237 1236.763 1126.070 1259.930
## 565           1193 1145.060 1240.940 1119.682 1266.318
## 566           1193 1141.219 1244.781 1113.807 1272.193
## 567           1193 1137.643 1248.357 1108.340 1277.660
## 568           1193 1134.286 1251.714 1103.204 1282.796
## 569           1193 1131.110 1254.890 1098.347 1287.653

## [1] "GS"

## Series: GS[, 6] 
## ARIMA(0,1,0) 
## 
## sigma^2 estimated as 10.75:  log likelihood=-1454.4
## AIC=2910.79   AICc=2910.8   BIC=2915.12
##     Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
## 560         188.51 184.3079 192.7121 182.0835 194.9365
## 561         188.51 182.5673 194.4526 179.4215 197.5985
## 562         188.51 181.2318 195.7882 177.3789 199.6411
## 563         188.51 180.1058 196.9142 175.6569 201.3631
## 564         188.51 179.1138 197.9062 174.1398 202.8802
## 565         188.51 178.2170 198.8030 172.7682 204.2517
## 566         188.51 177.3923 199.6277 171.5070 205.5130
## 567         188.51 176.6247 200.3953 170.3330 206.6870
## 568         188.51 175.9037 201.1163 169.2304 207.7896
## 569         188.51 175.2218 201.7982 168.1875 208.8325

## [1] "DANSKE.CO"

## Series: DANSKE.CO[, 6] 
## ARIMA(1,2,0) 
## 
## Coefficients:
##           ar1
##       -0.5552
## s.e.   0.0353
## 
## sigma^2 estimated as 9.801:  log likelihood=-1423.13
## AIC=2850.26   AICc=2850.28   BIC=2858.9
##     Point Forecast     Lo 80    Hi 80     Lo 95    Hi 95
## 559       119.7562 115.74423 123.7682 113.62041 125.8921
## 560       118.9253 111.87589 125.9747 108.14416 129.7064
## 561       117.7263 106.43719 129.0155 100.46109 134.9916
## 562       116.7317 100.86305 132.6003  92.46270 141.0007
## 563       115.6236  94.54916 136.6981  83.39302 147.8542
## 564       114.5785  87.89193 141.2651  73.76490 155.3922
## 565       113.4985  80.74282 146.2541  63.40304 163.5939
## 566       112.4378  73.22898 151.6467  52.47307 172.4026
## 567       111.3664  65.32079 157.4120  40.94572 181.7871
## 568       110.3010  57.06663 163.5353  28.88609 191.7158

## [1] "BRK-A"

## Series: `BRK-A`[, 6] 
## ARIMA(3,1,4) with drift 
## 
## Coefficients:
##          ar1      ar2     ar3      ma1     ma2      ma3      ma4    drift
##       1.0375  -1.0121  0.5080  -1.0673  1.0262  -0.5224  -0.0632  50.0830
## s.e.  0.1386   0.1234  0.1245   0.1390  0.1334   0.1370   0.0225  20.9792
## 
## sigma^2 estimated as 3330181:  log likelihood=-43163.92
## AIC=86345.85   AICc=86345.89   BIC=86404.2
##      Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
## 4837       299920.2 297581.5 302258.9 296343.5 303496.9
## 4838       300432.7 297174.3 303691.1 295449.4 305416.0
## 4839       300704.0 296755.9 304652.1 294665.9 306742.0
## 4840       300868.3 296336.2 305400.4 293937.1 307799.5
## 4841       301048.0 296062.3 306033.7 293423.0 308673.0
## 4842       301229.2 295890.6 306567.8 293064.5 309393.9
## 4843       301342.3 295682.1 307002.4 292685.8 309998.8
## 4844       301390.8 295404.9 307376.6 292236.1 310545.4
## 4845       301442.1 295143.6 307740.6 291809.3 311074.8
## 4846       301527.1 294951.0 308103.1 291469.9 311584.2

22.10 Aktieafkast


I Quantmod pakken ligger også mulighed for at beregne fx. dagligt, ugentligt afkast, dette gør vi vha. funktionen “periodReturn”.

## [1] "AAPL"

## Series: apple 
## ARIMA(1,0,0) with non-zero mean 
## 
## Coefficients:
##           ar1    mean
##       -0.5775  0.3118
## s.e.   0.2492  0.0798
## 
## sigma^2 estimated as 0.2278:  log likelihood=-7.95
## AIC=21.89   AICc=24.56   BIC=23.59
## [1] "BRK-A"

## Series: berkshire 
## ARIMA(0,0,0) with non-zero mean 
## 
## Coefficients:
##         mean
##       0.0969
## s.e.  0.0508
## 
## sigma^2 estimated as 0.03631:  log likelihood=3.63
## AIC=-3.25   AICc=-2.05   BIC=-2.12

22.10.1 ARIMA opsamling video