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.5370
## s.e.   0.1281
## 
## sigma^2 estimated as 104.6:  log likelihood=-186.87
## AIC=377.74   AICc=378   BIC=381.57

Kursen svinger omkring middelværdien.

## Series: ap2 
## ARIMA(1,2,1) 
## 
## Coefficients:
##          ar1      ma1
##       0.6978  -0.9453
## s.e.  0.1604   0.0918
## 
## sigma^2 estimated as 86.22:  log likelihood=-178.08
## AIC=362.15   AICc=362.69   BIC=367.83

## Series: ap3 
## ARIMA(0,0,2) with non-zero mean 
## 
## Coefficients:
##          ma1      ma2      mean
##       0.5281  -0.2159  101.6508
## s.e.  0.0695   0.0659    0.9243
## 
## sigma^2 estimated as 100.8:  log likelihood=-743.95
## AIC=1495.9   AICc=1496.11   BIC=1509.1

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       103.0948 90.22742 115.9622 83.41584 122.7738
## 202       101.5665 87.01489 116.1181 79.31173 123.8213
## 203       101.6508 86.83632 116.4652 78.99402 124.3076
## 204       101.6508 86.83632 116.4652 78.99402 124.3076
## 205       101.6508 86.83632 116.4652 78.99402 124.3076
## 206       101.6508 86.83632 116.4652 78.99402 124.3076
## 207       101.6508 86.83632 116.4652 78.99402 124.3076
## 208       101.6508 86.83632 116.4652 78.99402 124.3076
## 209       101.6508 86.83632 116.4652 78.99402 124.3076
## 210       101.6508 86.83632 116.4652 78.99402 124.3076

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 268:  log likelihood=-2756.2
## AIC=5514.4   AICc=5514.41   BIC=5518.89
##     Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
## 656        1188.01 1167.031 1208.989 1155.926 1220.094
## 657        1188.01 1158.342 1217.678 1142.636 1233.384
## 658        1188.01 1151.674 1224.346 1132.438 1243.582
## 659        1188.01 1146.052 1229.968 1123.842 1252.178
## 660        1188.01 1141.100 1234.920 1116.267 1259.753
## 661        1188.01 1136.623 1239.397 1109.420 1266.600
## 662        1188.01 1132.505 1243.515 1103.123 1272.897
## 663        1188.01 1128.673 1247.347 1097.262 1278.758
## 664        1188.01 1125.074 1250.946 1091.757 1284.263
## 665        1188.01 1121.669 1254.351 1086.551 1289.469

## [1] "GS"

## Series: GS[, 6] 
## ARIMA(0,1,0) 
## 
## sigma^2 estimated as 10.34:  log likelihood=-1691.72
## AIC=3385.45   AICc=3385.45   BIC=3389.93
##     Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
## 656          206.9 202.7799 211.0201 200.5989 213.2011
## 657          206.9 201.0733 212.7266 197.9889 215.8111
## 658          206.9 199.7638 214.0362 195.9862 217.8138
## 659          206.9 198.6599 215.1401 194.2978 219.5022
## 660          206.9 197.6872 216.1127 192.8103 220.9897
## 661          206.9 196.8079 216.9921 191.4655 222.3345
## 662          206.9 195.9993 217.8007 190.2289 223.5711
## 663          206.9 195.2467 218.5533 189.0778 224.7222
## 664          206.9 194.5398 219.2602 187.9967 225.8033
## 665          206.9 193.8712 219.9288 186.9742 226.8258

## [1] "DANSKE.CO"

## Series: DANSKE.CO[, 6] 
## ARIMA(1,2,0) 
## 
## Coefficients:
##           ar1
##       -0.5551
## s.e.   0.0327
## 
## sigma^2 estimated as 9.466:  log likelihood=-1644.88
## AIC=3293.75   AICc=3293.77   BIC=3302.7
##     Point Forecast    Lo 80     Hi 80     Lo 95    Hi 95
## 650       94.53706 90.59406  98.48005 88.506765 100.5673
## 651       93.61170 86.68324 100.54017 83.015532 104.2079
## 652       92.98747 81.89206 104.08288 76.018499 109.9564
## 653       92.19607 76.59959 107.79254 68.343318 116.0488
## 654       91.49747 70.78446 112.21047 59.819661 123.1753
## 655       90.74735 64.51839 116.97631 50.633618 130.8611
## 656       90.02583 57.83188 122.21979 40.789434 139.2622
## 657       89.28844 50.75190 127.82498 30.351884 148.2250
## 658       88.55986 43.30376 133.81596 19.346622 157.7731
## 659       87.82639 35.50480 140.14798  7.807421 167.8454

## [1] "BRK-A"

## Series: `BRK-A`[, 6] 
## ARIMA(1,1,0) with drift 
## 
## Coefficients:
##           ar1    drift
##       -0.0275  49.8499
## s.e.   0.0142  25.7497
## 
## sigma^2 estimated as 3453432:  log likelihood=-44113.59
## AIC=88233.18   AICc=88233.18   BIC=88252.69
##      Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
## 4933       300526.7 298145.2 302908.3 296884.4 304169.0
## 4934       300575.4 297253.4 303897.4 295494.9 305655.9
## 4935       300625.3 296574.7 304675.9 294430.4 306820.2
## 4936       300675.1 296008.3 305342.0 293537.8 307812.4
## 4937       300725.0 295514.3 305935.7 292756.0 308694.0
## 4938       300774.8 295072.0 306477.7 292053.0 309496.7
## 4939       300824.7 294668.8 306980.6 291410.1 310239.3
## 4940       300874.5 294296.8 307452.3 290814.8 310934.3
## 4941       300924.4 293950.3 307898.5 290258.4 311590.4
## 4942       300974.2 293625.1 308323.4 289734.7 312213.8

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.5869  0.3155
## s.e.   0.2462  0.0786
## 
## sigma^2 estimated as 0.2232:  log likelihood=-7.82
## AIC=21.65   AICc=24.32   BIC=23.34
## [1] "BRK-A"

## Series: berkshire 
## ARIMA(0,0,0) with non-zero mean 
## 
## Coefficients:
##         mean
##       0.0971
## s.e.  0.0507
## 
## sigma^2 estimated as 0.03624:  log likelihood=3.64
## AIC=-3.28   AICc=-2.08   BIC=-2.15

22.10.1 ARIMA opsamling video