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.

ARIMA1 <- ts(ARIMA1)

Vi kan nu plotte vore data i R.

plot.ts(ARIMA1, xlab='Tid', ylab = 'Kursdata')

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.

auto.arima(ARIMA1)
## 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.

ARIMA2 <- ts(ARIMA2)
aaa2 <- auto.arima(ARIMA2)
aaa2
## 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:

predict(auto.arima(ARIMA2), n.ahead = 12)$pred
## 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)

ARIMA22 <- ts(ARIMA22)
aaa22 <- auto.arima(ARIMA22)
aaa22
## 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
predict(auto.arima(ARIMA22), n.ahead = 15)$pred
## 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.

ts.plot(ARIMA3)

auto.arima(ARIMA3)
## 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.

ts.plot(ARIMA4)

auto.arima(ARIMA4)
## 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:

predict(auto.arima(ARIMA4), n.ahead = 12)$pred
## 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) with drift 
## 
## Coefficients:
##           ma1   drift
##       -0.6766  1.8826
## s.e.   0.1259  0.5031
## 
## sigma^2 estimated as 110.8:  log likelihood=-187.93
## AIC=381.86   AICc=382.38   BIC=387.59

Kursen svinger omkring middelværdien.

## Series: ap2 
## ARIMA(1,1,0) 
## 
## Coefficients:
##          ar1
##       0.5741
## s.e.  0.1186
## 
## sigma^2 estimated as 123.6:  log likelihood=-191.07
## AIC=386.13   AICc=386.39   BIC=389.95

## Series: ap3 
## ARIMA(1,0,1) with non-zero mean 
## 
## Coefficients:
##           ar1     ma1     mean
##       -0.1516  0.7210  99.3300
## s.e.   0.1211  0.0897   0.9888
## 
## sigma^2 estimated as 89.15:  log likelihood=-731.57
## AIC=1471.13   AICc=1471.34   BIC=1484.33

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

forecast(auto.arima(ap3))
##     Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
## 201       94.19905 82.09902 106.2991 75.69365 112.7044
## 202      100.10790 86.18403 114.0318 78.81317 121.4026
## 203       99.21208 85.24908 113.1751 77.85752 120.5666
## 204       99.34789 85.38400 113.3118 77.99196 120.7038
## 205       99.32730 85.36339 113.2912 77.97134 120.6833
## 206       99.33043 85.36651 113.2943 77.97446 120.6864
## 207       99.32995 85.36604 113.2939 77.97399 120.6859
## 208       99.33002 85.36611 113.2939 77.97406 120.6860
## 209       99.33001 85.36610 113.2939 77.97405 120.6860
## 210       99.33001 85.36610 113.2939 77.97405 120.6860
plot(forecast(auto.arima(ap3)))

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.

data = read.csv('http://ucanalytics.com/blogs/wp-content/uploads/2015/06/Tractor-Sales.csv')
data = ts(data[,2],start = c(2003,1),frequency = 12)

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

plot(data, xlab='Years', ylab = 'Tractor Sales')

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

plot(diff(data),ylab='Differenced Tractor Sales')

log transformer data for at sikre stationaritet mht. varians.

plot(log10(data),ylab='Log (Tractor Sales)')

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

plot(diff(log10(data)),ylab='Differenced Log (Tractor Sales)')

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.

require(forecast)
ARIMAfit = auto.arima(log10(data), approximation=FALSE,trace=FALSE)
ARIMAfit
## 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

par(mfrow = c(1,1))
pred = predict(ARIMAfit, n.ahead = 36)
salg <- 10^pred$pred
salg
##            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
plot(data,type='l',xlim=c(2003,2018),ylim=c(1,1600),xlab = 'Year',ylab = 'Tractor Salg')
lines(10^(pred$pred),col='blue')
lines(10^(pred$pred+2*pred$se),col='orange')
lines(10^(pred$pred-2*pred$se),col='orange')

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

#Hent fpp pakken og load den
plot(debitcards)

dldebitcards <- diff(log10(debitcards))
plot(dldebitcards,ylab="Differenced Log (debitcards)")

require(forecast)
ARIMAfit = auto.arima(log10(debitcards), approximation=FALSE,trace=FALSE)
ARIMAfit
## 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

par(mfrow = c(1,1))
pred = predict(ARIMAfit, n.ahead = 36)
plot(debitcards,type='l',xlim=c(2000,2016),ylim=c(1,40000),xlab = 'Year',ylab = 'Debetcard usage')
lines(10^(pred$pred),col='blue')
lines(10^(pred$pred+2*pred$se),col='orange')
lines(10^(pred$pred-2*pred$se),col='orange')

Forudsagt brug af debetkort bliver:

10^(pred$pred)
##           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.

pacman::p_load(quantmod, forecast)
getSymbols("GOOG",from = "2017-01-01", to = Sys.Date(),getSymbols.warning4.0=FALSE)
## [1] "GOOG"
plot(GOOG[,6],main = "Google adj. close")

agoog <- auto.arima(GOOG[,6])
agoog
## Series: GOOG[, 6] 
## ARIMA(0,1,0) 
## 
## sigma^2 estimated as 248.8:  log likelihood=-2614.97
## AIC=5231.93   AICc=5231.94   BIC=5236.37
fagoog <- forecast(agoog)
fagoog
##     Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
## 628        1097.95 1077.736 1118.164 1067.035 1128.865
## 629        1097.95 1069.362 1126.537 1054.229 1141.671
## 630        1097.95 1062.937 1132.962 1044.403 1151.497
## 631        1097.95 1057.521 1138.379 1036.119 1159.781
## 632        1097.95 1052.749 1143.151 1028.821 1167.079
## 633        1097.95 1048.435 1147.465 1022.223 1173.677
## 634        1097.95 1044.468 1151.432 1016.156 1179.744
## 635        1097.95 1040.775 1155.125 1010.508 1185.392
## 636        1097.95 1037.307 1158.593 1005.204 1190.696
## 637        1097.95 1034.026 1161.874 1000.187 1195.713
plot(fagoog,main = "Google adj. close")

getSymbols("GS",from = "2017-01-01", to = Sys.Date(),getSymbols.warning4.0=FALSE)
## [1] "GS"
plot(GS[,6],main = "Goldman Sachs adj. close")

ags <- auto.arima(GS[,6])
ags
## Series: GS[, 6] 
## ARIMA(0,1,0) 
## 
## sigma^2 estimated as 10.34:  log likelihood=-1619.31
## AIC=3240.62   AICc=3240.63   BIC=3245.06
fags <- forecast(ags)
fags
##     Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
## 628         206.86 202.7398 210.9802 200.5587 213.1613
## 629         206.86 201.0332 212.6868 197.9487 215.7713
## 630         206.86 199.7237 213.9963 195.9459 217.7741
## 631         206.86 198.6197 215.1003 194.2575 219.4625
## 632         206.86 197.6470 216.0730 192.7700 220.9500
## 633         206.86 196.7677 216.9523 191.4251 222.2949
## 634         206.86 195.9590 217.7610 190.1884 223.5316
## 635         206.86 195.2064 218.5136 189.0373 224.6827
## 636         206.86 194.4995 219.2205 187.9562 225.7638
## 637         206.86 193.8309 219.8891 186.9337 226.7863
plot(fags,main = "Goldman Sachs adj. close")

getSymbols("DANSKE.CO",from = "2017-01-01", to = Sys.Date(),getSymbols.warning4.0=FALSE)
## [1] "DANSKE.CO"
plot(DANSKE.CO[,6],main = "Danske Bank adj. close")

addb <- auto.arima(DANSKE.CO[,6])
addb
## Series: DANSKE.CO[, 6] 
## ARIMA(1,2,0) 
## 
## Coefficients:
##           ar1
##       -0.5546
## s.e.   0.0335
## 
## sigma^2 estimated as 9.774:  log likelihood=-1581.03
## AIC=3166.06   AICc=3166.08   BIC=3174.91
faddb <- forecast(addb)
faddb
##     Point Forecast     Lo 80    Hi 80    Lo 95    Hi 95
## 621       105.7223 101.71563 109.7289 99.59464 111.8499
## 622       106.7099  99.66798 113.7519 95.94020 117.4796
## 623       107.6890  96.41212 118.9659 90.44248 124.9356
## 624       108.6729  92.82056 124.5252 84.42885 132.9169
## 625       109.6541  88.60127 130.7069 77.45658 141.8516
## 626       110.6368  83.97714 137.2964 69.86437 151.4092
## 627       111.6187  78.89594 144.3414 61.57358 161.6637
## 628       112.6010  73.43126 151.7707 52.69607 172.5059
## 629       113.5830  67.58322 159.5829 43.23238 183.9337
## 630       114.5653  61.38366 167.7469 33.23102 195.8995
plot(faddb,main = "Danske Bank adj. close")

getSymbols("BRK-A",from = "2000-01-01", to = Sys.Date(),getSymbols.warning4.0=FALSE)
## [1] "BRK-A"
plot(`BRK-A`[,6],main = "Berkshire adj. close")

aberkshire <- auto.arima(`BRK-A`[,6])
aberkshire
## Series: `BRK-A`[, 6] 
## ARIMA(5,1,4) with drift 
## 
## Coefficients:
##          ar1      ar2      ar3     ar4     ar5      ma1      ma2     ma3
##       0.1733  -0.0033  -0.4485  0.5165  -0.042  -0.2020  -0.0067  0.4577
## s.e.  0.1462   0.0807   0.0811  0.1270   0.023   0.1461   0.0740  0.0752
##           ma4    drift
##       -0.5966  54.1495
## s.e.   0.1240  21.2995
## 
## sigma^2 estimated as 3384144:  log likelihood=-43809.44
## AIC=87640.88   AICc=87640.94   BIC=87712.36
faberkshire <- forecast(aberkshire)
faberkshire
##      Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
## 4905       321489.9 319132.3 323847.4 317884.3 325095.4
## 4906       321026.9 317740.4 324313.4 316000.7 326053.1
## 4907       320911.2 316925.8 324896.6 314816.1 327006.3
## 4908       320730.4 316143.7 325317.1 313715.7 327745.1
## 4909       320594.6 315543.8 325645.3 312870.2 328319.0
## 4910       320444.8 315023.7 325865.9 312153.9 328735.7
## 4911       320503.6 314751.8 326255.4 311706.9 329300.3
## 4912       320530.2 314442.6 326617.9 311219.9 329840.5
## 4913       320582.8 314177.9 326987.7 310787.3 330378.3
## 4914       320537.3 313844.3 327230.3 310301.2 330773.4
plot(faberkshire,main = "Berkshire adj. close")

22.10 Aktieafkast


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

getSymbols("AAPL",src='yahoo')
## [1] "AAPL"
apple <- periodReturn(`AAPL`,period='yearly',subset='2003::')  # Årligt Afkast 2003 til i dag
plot(apple, main = "Apple årligt afkast siden 2007")

auto.arima(apple)
## Series: apple 
## ARIMA(1,0,0) with non-zero mean 
## 
## Coefficients:
##           ar1    mean
##       -0.5873  0.3157
## s.e.   0.2461  0.0785
## 
## sigma^2 estimated as 0.223:  log likelihood=-7.82
## AIC=21.64   AICc=24.31   BIC=23.33
getSymbols("BRK-A",src='yahoo')
## [1] "BRK-A"
berkshire <- periodReturn(`BRK-A`,period='yearly',subset='2003::')
plot(berkshire, main = "Berkshire årligt afkast siden 2007")

auto.arima(berkshire)
## Series: berkshire 
## ARIMA(0,0,0) with non-zero mean 
## 
## Coefficients:
##         mean
##       0.1025
## s.e.  0.0500
## 
## sigma^2 estimated as 0.03527:  log likelihood=3.81
## AIC=-3.63   AICc=-2.43   BIC=-2.5

22.10.1 ARIMA opsamling video