22. Tidsrækker og ARIMA
22. Tidsrækker og ARIMA

22. Tidsrækker og ARIMA


En tidsrække er en række observationer registreret over tid. Lukkekursen på Novo i 2023 kan beskrives som en tidsrække, hvor vi registrerer tiden – altså datoen – og lukkekursen. ARIMA er et avanceret analyseværktøj til at analysere og forudsige tidsrækker.

Vi vil her med eksempler beskrive, hvordan de enkelte elementer i ARIMA rent praktisk fungerer.

ARIMA (AutoRegressive Integrated Moving Average)-modeller er udbredt inden for tidsserieanalyse til at forudsige fremtidige punkter i en tidsserie. Nedenstående tabel viser eksempler på, hvor ARIMA-modeller bruges:



Sektor Eksempel
Økonomi og Finans Forudsige aktiekurser, aktieafkast eller markedsindekser (teknisk aktieanalyse)
Økonomi og Finans Estimere fremtidige renter eller inflationsrater eller andre makroøkonomiske indikatorer.
Meteorologi Forudsige temperatur, nedbør eller andre klimatiske variabler over tid
Energi Forudsige el-forbruget
Energi Estimere prisen på olie eller andre energikilder
Sundhedssektoren Forudsige antallet af patientindlæggelser i sygehuse
Sundhedssektoren Spore og forudsige spredningen af epidemier
Supply Chain Management Forudsige efterspørgslen efter et produkt for bedre lagerstyring
Supply Chain Management Estimere nødvendige råmaterialer over tid
Telekommunikation Forudsige dataforbrug for at forbedre netværkskapacitet
E-handel Forudsige besøgstal på en hjemmeside eller antal klik på en annonce

Tabel 22.1: Eksempler på anvendelse af ARIMA-modeller til tidsrækkeforudsigelse inden for udvalgte sektorer — økonomi og finans, meteorologi, energi, sundhed, supply chain management, telekommunikation og e-handel.
Kilde: Egen tilvirkning.

Disse er blot nogle få eksempler. ARIMA-modeller er meget alsidige og kan anvendes på en lang række af tidsserier.

Moderne ML-baserede tidsrækkemodeller, fx LSTM/neurale netværk, bruges i stigende grad til algoritmisk handel og likviditetsprognoser som supplement til eller konkurrent mod ARIMA, særligt hvor sammenhængene i data er ikke-lineære.

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

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.
Lad os i de følgende afsnit, se på nogle simple eksempler for trinvis, at kunne beskrive hvorledes modellen fungerer.

ARIMA(0,0,0)


Nedenfor kan du hente aktiekurser for 50 dage i filen ARIMA1.xlsx for en fiktiv aktie.

ARIMA1.xlsx Excel-filen

Vi vil nu undersøge om disse kan bruges til at forudsige noget om fremtidige aktiekurser. For at gøre dette, skal man importere Excelfilen, og copy paste kommandoen fra rammen nedenfor. 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 finder automatisk den ARIMA-model, der passer bedst til 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 den ARIMA-model, der har de laveste AIC- og BIC-værdier. auto.arima finder automatisk den bedste model.

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

$$\hat{Y_t}=19,8964$$

Variablen \( \hat{Y_t}\), kaldet Y hat t, angiver vort estimatEstimat betyder gæt.
Hvis vi har en stikprøve, hvor vi har målt 100 mænds højde til gennemsnitligt 179 cm., er vores bedste gæt på middelhøjden i populationen 179 cm. Vi kan skrive vort estimat for μ er 179 cm.

Klik her for at lære mere om parametre og parameter-estimater!
(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. Dette svarer til en vandret linje ved \( \hat{Y_t}=19,8964\).Vi ser også at der står “ARIMA(0,0,0) with non-zero mean” i output fra R.

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

En ARIMA(1,0,0)-model kan beskrives som en simpel lineær regressionsmodelLineær regression handler om at finde en simpel sammenhæng mellem to ting — fx temperatur (X) og issalg (Y). Hvor mange is sælger en kiosk, når temperaturen er 27 grader? Man samler data for temperaturer og issalg, tegner den bedste rette linje gennem punkterne — og aflæser svaret. Det er lineær regression.
Ved multipel lineær regression bruger man flere X-variable samtidig — fx både temperatur, ugedag og om det er ferie — for at forudsige Y (issalget) mere præcist.

Klik her for at lære mere om lineær regressionsanalyse!
, hvor X-variablen er Y-variablen fra en periode før (fx. måneden, dagen eller sekundet før). Vi beregner estimaterneEstimat betyder gæt.
Hvis vi har en stikprøve, hvor vi har målt 100 mænds højde til gennemsnitligt 179 cm., er vores bedste gæt på middelhøjden i populationen 179 cm. Vi kan skrive vort estimat for μ er 179 cm.

Klik her for at lære mere om parametre og parameter-estimater!
i den lineære regressionsmodel vha. OLSMindste kvadraters metode (OLS — Ordinary Least Squares) finder den bedste rette linje gennem datapunkter ved at minimere summen af de kvadrerede afstande fra punkterne til linjen.
Adrien-Marie Legendre publicerede metoden først i 1805; Carl Friedrich Gauss hævdede at have brugt den allerede fra 1795, men offentliggjorde først sin udgave i 1809. Metoden er stadig grundlaget for lineær regression og mange AI-modeller — hvert lag i et neuralt netværk er i bund og grund en lineær regression.

Klik her for at lære mere om lineær regression i kapitel 11!
-metoden (mindste kvadraters metodeMindste kvadraters metode (OLS — Ordinary Least Squares) finder den bedste rette linje gennem datapunkter ved at minimere summen af de kvadrerede afstande fra punkterne til linjen.
Adrien-Marie Legendre publicerede metoden først i 1805; Carl Friedrich Gauss hævdede at have brugt den allerede fra 1795, men offentliggjorde først sin udgave i 1809. Metoden er stadig grundlaget for lineær regression og mange AI-modeller — hvert lag i et neuralt netværk er i bund og grund en lineær regression.

Klik her for at lære mere om lineær regression i kapitel 11!
). I ARIMA-modeller benytter vi en metode, der hedder MLE – Maximum Likelihood-estimationsmetodenEstimat betyder gæt.
Hvis vi har en stikprøve, hvor vi har målt 100 mænds højde til gennemsnitligt 179 cm., er vores bedste gæt på middelhøjden i populationen 179 cm. Vi kan skrive vort estimat for μ er 179 cm.

Klik her for at lære mere om parametre og parameter-estimater!
– som ikke gennemgås nærmere her. EstimaterneEstimat betyder gæt.
Hvis vi har en stikprøve, hvor vi har målt 100 mænds højde til gennemsnitligt 179 cm., er vores bedste gæt på middelhøjden i populationen 179 cm. Vi kan skrive vort estimat for μ er 179 cm.

Klik her for at lære mere om parametre og parameter-estimater!
ved de 2 metoder bliver nogenlunde ens.


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

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

Vi kan forklare, at $\hat{Y_{t}}$ er værdien for tidsrækken på tidspunkt $t$, ud fra en konstant $c$ plus en faktor $ϕ$, 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 $ϕ$, disse værdier kan R beregne for os. Vi kan så beregne konstanten $c=(1-ϕ)⋅\mu$. Det betyder så at vi kan estimere fremtidige værdier for tidsrækken.

Vi har nu et eksempel, hvor den sande middelværdi for tidsrækken er $\mu=100$ og $ϕ=0{,}5$ for en ARIMA(1,0,0)-model. Så kan vi beregne konstanten $c=(1-ϕ)⋅\mu=(1-0{,}5)⋅100=50$. Ligningen for modellen kan så skrives som:

$$\hat{Y_{t}}=c+ϕY_{t-1}⇔\hat{Y_{t}}=50+0{,}5Y_{t-1}$$

$ϕ$ fortæller, at hvis kursen dagen før var 80, og gennemsnitskursen er 100, vil kursen i morgen $t=1$ ifølge modellen være forudsagt som: $$50+0{,}5⋅80=90$$ Dagen efter $t=2$ vil kursen så være forudsagt til: $$50+0{,}5⋅90=95$$ Om 3 dage dvs. $t=3$ vil kursen så være forudsagt til: $$50+0{,}5⋅95=97{,}5$$ Om 4 dage dvs. $t=4$ vil kursen så være forudsagt til: $$50+0{,}5⋅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.

$ϕ$ må kun antage værdier mellem -1 og 1 (og ikke være lig med disse grænseværdier), hvilket betyder, at modellen er stationær og derfor nærmer sig den sande middelværdi $\mu$.

Hvad vil der ske hvis $\mu=100$ og $ϕ=-0{,}5$ for en ARIMA(1,0,0) model (husk $c=(1-ϕ)⋅\mu$ når man skal bestemme modellen)?

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

ARIMA2.xlsx Excel-filen

ARIMA2 <- ts(ARIMA2)

Vi kan nu plotte vore data i R.

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

Figur 22.1: ARIMA2 tidsserie (n = 50) — en fiktiv aktiekurs, hvor auto.arima efterfølgende afslører 1. ordens autoregression (ARIMA(1,0,0)). Hold musen over punkterne for tidspunkt og kurs.
Kilde: Egen tilvirkning.



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+ϕY_{t-1}⇔$$
$$\hat{Y_{t}}=(1-0{,}3664)⋅103{,}2372+0{,}3664Y_{t-1}⇔$$
$$\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 forecast-funktionen fra forecast-pakken:

Husk at loade pakken forecast før du benytter forecast-funktionen, forecast-pakken benyttes også til auto.arima funktionen., man kan angive hvor mange perioder frem man ønsker forudsigelsen med fx. h=12  som herunder:

forecast(auto.arima(ARIMA2), h = 12)

Bemærk vi får både forudsagte kurser samt nedre og øvre grænser for 80% og 95% konfidensintervallerKonfidensintervallet beregnes ud fra en stikprøve, og angiver nedre og øvre grænser indenfor hvilke populations parameteren, ligger med en vis sandsynlighed.
Er 95% konfidensintervallet for mænds gennemsnitlige højde fx. 172 cm. og 182 cm. kan vi sige:
Vi kan med 95% sandsynlighed sige den gennemsnitlige højde for mænd i populationen, ligger mellem 172 cm. og 182 cm.
Jo større stikprøve og jo lavere sikkerhed (konfidensniveau), jo mere præcist bliver vore konfidensinterval (interval estimatet), dvs intervallet bliver smallere.
Vi kan beregne konfidensintervaller for parametre vi estimerer, fx. gennemsnittet, standardafvigelsen, andelen etc.
I modsætning til et punktestimat for fx. middelværdien, fortæller konfidensintervallet os noget om kvaliteten af vort estimat/gæt, ud fra bredden af konfidensintervallet.


Klik her for at lære mere om konfidensintervallet!
.
Vi forudsiger altså, at kursen er 105,3673 til tid 51.
Vi kan med 80% sandsynlighed sige, at kursen til tid 51 ligger mellem 90,84985 og 119,8848.
Vi kan med 95% sandsynlighed sige, at kursen til tid 51 ligger mellem 83,16476 og 127,5699, bemærk det højere konfidensniveauKonfidensniveauet 1-α angiver sandsynligheden for ikke at forkaste en sand nulhypotese dvs. korrekt beslutning.
Man kan bestemme konfidensniveauet som 1-α dvs. 1 minus signifikansniveauet.
Dvs. summen af signifikansniveauet og konfidensniveauet giver altid 1 eller 100%

Klik her for at lære mere om konfidensniveauet!
medfører mindre præcision i form af et bredere konfidensintervalKonfidensintervallet beregnes ud fra en stikprøve, og angiver nedre og øvre grænser indenfor hvilke populations parameteren, ligger med en vis sandsynlighed.
Er 95% konfidensintervallet for mænds gennemsnitlige højde fx. 172 cm. og 182 cm. kan vi sige:
Vi kan med 95% sandsynlighed sige den gennemsnitlige højde for mænd i populationen, ligger mellem 172 cm. og 182 cm.
Jo større stikprøve og jo lavere sikkerhed (konfidensniveau), jo mere præcist bliver vore konfidensinterval (interval estimatet), dvs intervallet bliver smallere.
Vi kan beregne konfidensintervaller for parametre vi estimerer, fx. gennemsnittet, standardafvigelsen, andelen etc.
I modsætning til et punktestimat for fx. middelværdien, fortæller konfidensintervallet os noget om kvaliteten af vort estimat/gæt, ud fra bredden af konfidensintervallet.


Klik her for at lære mere om konfidensintervallet!
.

Point Forecast Lo 80 Hi 80 Lo 95 Hi 95 51 105.3673 90.84985 119.8848 83.16476 127.5699 52 104.0177 88.55647 119.4789 80.37180 127.6635 53 103.5232 87.93964 119.1067 79.69021 127.3561 54 103.3420 87.74211 118.9419 79.48403 127.2000 55 103.2756 87.67354 118.8777 79.41429 127.1369 56 103.2513 87.64892 118.8537 79.38952 127.1131 57 103.2424 87.63997 118.8448 79.38055 127.1042 58 103.2391 87.63670 118.8415 79.37728 127.1010 59 103.2379 87.63550 118.8403 79.37608 127.0998 60 103.2375 87.63507 118.8399 79.37564 127.0993 61 103.2373 87.63491 118.8397 79.37548 127.0992 62 103.2373 87.63485 118.8397 79.37542 127.0991

ARIMA(0,1,0) eller I(1) Integrated


Hvis en serie er ikke-stationær (en der ikke nærmer sig en bestemt middelværdi), er den simpleste model en random walk uden drift.

$$\hat{Y_{t}}-Y_{t-1}=0⇔\hat{Y_{t}}=Y_{t-1}+0$$ Dette betyder vi bedst kan forudsige Y ved værdien perioden før.

En ikke-stationær serie med en konstant trend, en såkaldt random walk med drift, kan skrives som:

$$\hat{Y_{t}}-Y_{t-1}=\mu⇔\hat{Y_{t}}=Y_{t-1}+\mu$$ Dette betyder, at Y ændrer sig konstant med $\mu$ i hver periode. Drift betyder, at tidsrækken ændrer sig med et fast beløb pr. periode (stiger, hvis $\mu$ er positiv).

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⇔\hat{Y_{t}}=Y_{t-1}+10$$

Hent ARIMA3.xlsx Excel-filen herunder, filen indeholder 51 perioders historiske aktiekurser.
Importer ARIMA3.xlsx til R via menuen File - Import Dataset - Excel.
Nu skal datasættet rettes til en tidsserie med ts() kommandoen.

ARIMA3.xlsx Excel-filen

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⇔\hat{Y_{t}}-Y_{t-1}=7{,}9⇔\hat{Y_{t}}=Y_{t-1}+7{,}9$$ Vi indsætter drift i stedet for $\mu$. Tolkningen 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$$



Vi kan forecaste med forecast-funktionen som vi så tidligere.

Forecast funktionen er mere stabil end predict, men vi skal huske at have loaded pakken forecast, man kan angive hvor mange perioder frem man ønsker forudsigelsen med h=12 :

      
forecast(auto.arima(ARIMA3), h = 12)

Vi får både forudsagte kurser samt nedre og øvre grænser for 80% og 95% konfidensintervallerKonfidensintervallet beregnes ud fra en stikprøve, og angiver nedre og øvre grænser indenfor hvilke populations parameteren, ligger med en vis sandsynlighed.
Er 95% konfidensintervallet for mænds gennemsnitlige højde fx. 172 cm. og 182 cm. kan vi sige:
Vi kan med 95% sandsynlighed sige den gennemsnitlige højde for mænd i populationen, ligger mellem 172 cm. og 182 cm.
Jo større stikprøve og jo lavere sikkerhed (konfidensniveau), jo mere præcist bliver vore konfidensinterval (interval estimatet), dvs intervallet bliver smallere.
Vi kan beregne konfidensintervaller for parametre vi estimerer, fx. gennemsnittet, standardafvigelsen, andelen etc.
I modsætning til et punktestimat for fx. middelværdien, fortæller konfidensintervallet os noget om kvaliteten af vort estimat/gæt, ud fra bredden af konfidensintervallet.


Klik her for at lære mere om konfidensintervallet!
.

Point Forecast Lo 80 Hi 80 Lo 95 Hi 95 52 503.6609 491.9532 515.3686 485.7556 521.5663 53 511.5758 495.0187 528.1330 486.2538 536.8978 54 519.4908 499.2125 539.7691 488.4778 550.5037 55 527.4057 503.9903 550.8210 491.5950 563.2164 56 535.3206 509.1414 561.4998 495.2830 575.3582 57 543.2355 514.5577 571.9134 499.3765 587.0945 58 551.1504 520.1748 582.1261 503.7773 598.5235 59 559.0654 525.9510 592.1797 508.4214 609.7093 60 566.9803 531.8572 602.1033 513.2642 620.6963 61 574.8952 537.8723 611.9181 518.2735 631.5169 62 582.8101 543.9801 621.6401 523.4248 642.1955 63 590.7250 550.1684 631.2816 528.6991 652.7510

Vi kan også danne et plot af vor 12 perioders forecast efter periode 50, dette kan vi gøre med koden herunder:


plot(forecast(auto.arima(ARIMA3), h = 12))
      

Bemærk den blå linje fra periode 51 til ovenfor er vores forecast, det mørkegrå areal er 80% konfidensbæltet, det lysegrå areal er 95% konfidensbæltet.

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


I stedet for at bruge tidligere aktiekurser til at forudsige aktiekursen kan vi benytte tidligere målefejl (residualerResidualen er forskellen mellem faktisk Y værdi og forudsagt Y værdi i den lineære regressionsanalyse.
Antag fx man bruger X-variablen kvm. til at forudsige Y-variablen ejendomspriser.
En ejendom er faktisk til salg for 4 mio, men den lineære regressionsmodel forudsiger at en 100 kvm ejendom skal koste 5 mio. Da bliver residualen faktisk - forudsagt = 4 - 5 = -1, prisen på ejendommen er altså 1 mio. under den ifølge modellen forventede pris.


Klik her for at lære mere om lineær regressionsanalyse!
) til at forudsige kursen.

Modellen kan skrives som:

$$\hat{Y_{t}}=\mu+θ_{1}e_{t-1}$$ Hvis vi forestiller os $\mu=50$, $θ_{1}=0{,}5$, kursen til tid t-1 var 120, og forudsigelsen til tid t-1 var 100, så målefejlen til tid t-1, $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+θ_{1}e_{t-1}⇔\hat{Y_{t}}=50+0{,}5⋅20=60$$

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

ARIMA4.xlsx Excel-filen

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:

      
forecast(auto.arima(ARIMA4), h = 12)
      
    
> forecast(auto.arima(ARIMA4), h = 12) Point Forecast Lo 80 Hi 80 Lo 95 Hi 95 51 113.64960 101.11384 126.1853 94.47782 132.8214 52 99.01756 82.10791 115.9272 73.15649 124.8786 53 99.01756 82.10791 115.9272 73.15649 124.8786 54 99.01756 82.10791 115.9272 73.15649 124.8786 55 99.01756 82.10791 115.9272 73.15649 124.8786 56 99.01756 82.10791 115.9272 73.15649 124.8786 57 99.01756 82.10791 115.9272 73.15649 124.8786 58 99.01756 82.10791 115.9272 73.15649 124.8786 59 99.01756 82.10791 115.9272 73.15649 124.8786 60 99.01756 82.10791 115.9272 73.15649 124.8786 61 99.01756 82.10791 115.9272 73.15649 124.8786 62 99.01756 82.10791 115.9272 73.15649 124.8786

Bemærk her bliver forecast værdien det samme fra tid 52 og frem, når vi skal finde residualenResidualen er forskellen mellem faktisk Y værdi og forudsagt Y værdi i den lineære regressionsanalyse.
Antag fx man bruger X-variablen kvm. til at forudsige Y-variablen ejendomspriser.
En ejendom er faktisk til salg for 4 mio, men den lineære regressionsmodel forudsiger at en 100 kvm ejendom skal koste 5 mio. Da bliver residualen faktisk - forudsagt = 4 - 5 = -1, prisen på ejendommen er altså 1 mio. under den ifølge modellen forventede pris.


Klik her for at lære mere om lineær regressionsanalyse!
, skal vi bestemme forskellen mellem faktisk og forudsagt, men vi havde jo kun en faktisk kurs til tid 50, derfor bliver residualerneResidualen er forskellen mellem faktisk Y værdi og forudsagt Y værdi i den lineære regressionsanalyse.
Antag fx man bruger X-variablen kvm. til at forudsige Y-variablen ejendomspriser.
En ejendom er faktisk til salg for 4 mio, men den lineære regressionsmodel forudsiger at en 100 kvm ejendom skal koste 5 mio. Da bliver residualen faktisk - forudsagt = 4 - 5 = -1, prisen på ejendommen er altså 1 mio. under den ifølge modellen forventede pris.


Klik her for at lære mere om lineær regressionsanalyse!
0. Vores bedste gæt på faktisk kurs er vores forudsagte kurs, så differencerne bliver 0.

ARIMA af højere orden

ARIMA(2,0,0)



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+ϕ_{1}Y_{t-1}+ϕ_{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.

Hent ARIMA5.xlsx Excel-filen herunder, filen indeholder salgsdata for 118 perioder.

ARIMA5.xlsx Excel-filen

Importer ARIMA5.xlsx til R via menuen File - Import Dataset - Excel. Nu skal datasættet rettes til en tidsserie med ts() kommandoen, før vi benytter auto.arima kommandoen.

        
ts.plot(ARIMA5)
auto.arima(ARIMA5)
        
      
Series: ARIMA5 ARIMA(2,0,0) with non-zero mean Coefficients: ar1 ar2 mean -0.7327 -0.4802 55.0542 s.e. 0.0827 0.0830 0.2654 sigma^2 = 41.2: log likelihood = -385.71 AIC=779.41 AICc=779.77 BIC=790.49
  
forecast(auto.arima(ARIMA5), h = 12)
  
Point Forecast Lo 80 Hi 80 Lo 95 Hi 95 119 64118.66 55892.77 72344.55 51538.24 76699.07 120 57967.70 47770.27 68165.13 42372.08 73563.32 121 48567.10 38359.04 58775.16 32955.22 64178.98 122 58408.11 47885.71 68930.50 42315.50 74500.71 123 55711.92 44983.21 66440.62 39303.78 72120.06 124 52961.90 42228.76 63695.03 36546.98 69376.81 125 56271.38 45509.97 67032.78 39813.23 72729.53 126 55167.14 44381.73 65952.55 38672.28 71662.00 127 54387.04 43600.55 65173.53 37890.53 70883.55 128 55488.82 44699.80 66277.84 38988.44 71989.20 129 55056.17 44264.39 65847.96 38551.56 71560.78 130 54844.11 44052.11 65636.10 38339.18 71349.04
  
plot(forecast(auto.arima(ARIMA5), h = 12))
  

Herunder ses plottet for 118 historiske og 12 forudsagte salg:


ARIMA(0,1,3)

ARIMA-modeller kan indeholde flere forskellige elementer med lag, som fx. ARIMA(0,1,3).
Hent ARIMA6.xlsx Excel-filen herunder, filen indeholder historiske salgsdata for 120 perioder.

ARIMA6.xlsx Excel-filen

Importer ARIMA6.xlsx til R via menuen File - Import Dataset - Excel. Nu skal datasættet rettes til en tidsserie med ts() kommandoen, før vi benytter auto.arima kommandoen.

            
ts.plot(ARIMA6)
auto.arima(ARIMA6)
            
          
Series: ARIMA6 ARIMA(0,1,3) Coefficients: ma1 ma2 ma3 0.0737 -0.8646 -0.1497 s.e. 0.0946 0.0444 0.0923 sigma^2 = 102.5: log likelihood = -444.37 AIC=896.75 AICc=897.1 BIC=907.86
      
forecast(auto.arima(ARIMA6), h = 24)
      
    
Point Forecast Lo 80 Hi 80 Lo 95 Hi 95 121 106.4243 93.45141 119.3972 86.58397 126.2647 122 102.2083 83.17264 121.2439 73.09580 131.3207 123 101.5811 82.35298 120.8092 72.17423 130.9880 124 101.5811 82.33753 120.8247 72.15060 131.0116 125 101.5811 82.32209 120.8401 72.12699 131.0352 126 101.5811 82.30667 120.8555 72.10340 131.0588 127 101.5811 82.29126 120.8709 72.07983 131.0824 128 101.5811 82.27586 120.8863 72.05628 131.1059 129 101.5811 82.26047 120.9017 72.03275 131.1294 130 101.5811 82.24509 120.9171 72.00923 131.1530 131 101.5811 82.22973 120.9325 71.98574 131.1765 132 101.5811 82.21438 120.9478 71.96226 131.1999 133 101.5811 82.19904 120.9632 71.93880 131.2234 134 101.5811 82.18372 120.9785 71.91536 131.2468 135 101.5811 82.16840 120.9938 71.89194 131.2703 136 101.5811 82.15310 121.0091 71.86854 131.2937 137 101.5811 82.13781 121.0244 71.84515 131.3170 138 101.5811 82.12253 121.0397 71.82179 131.3404 139 101.5811 82.10726 121.0549 71.79844 131.3638 140 101.5811 82.09201 121.0702 71.77511 131.3871 141 101.5811 82.07677 121.0854 71.75180 131.4104 142 101.5811 82.06154 121.1007 71.72851 131.4337 143 101.5811 82.04632 121.1159 71.70523 131.4570 144 101.5811 82.03111 121.1311 71.68198 131.4802
      
plot(forecast(auto.arima(ARIMA6), h = 24))
      
    

Herunder ses plottet for 120 historiske og 24 forudsagte salg:

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.

ARIMA eksempler

Traktorer

Hent følgende data for månedligt traktor salg fra januar 2003 til december 2014, med følgende kommandoer i R, bemærk her hentes ikke en Excelfil, derimod findes en csv fil på nettet, der kan læses direkte ind i R med read.csv kommandoen.
Traktor datasættet er 2 søjler med datoer og salget. Her udelader vi datoer og omdanner kun salget i søjle 2 til en tidsserie vha. data[,2] R-kommandoen der kun tager 2. søjle. I ts kommandoen angiver vi starten på tidsserien start = c(2003,1) og hyppigheden dvs. frequency=12 fordi vi har 12 måneder pr. å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, at salget er voksende over tid, og der er ligeledes en sæsonkomponent. Det er her også vigtigt at bemærke, at variansen stiger – der bliver større forskel mellem årets gode og dårlige måneder. I 2003 er der ikke særlig stor variation i forhold til i 2014, og der er derfor ikke varianshomogenitetVarianshomogenitet betyder der er ens varianser for populationerne.
Hvis fx. vi har 2 stikprøver med højder for CBS og Cphbusiness studerende, vil varianshomogenitet betyde, at der er samme variation i de 2 populationer.
Testet kunne se ud som nedenfor, bemærk er der varianshomogenitet, er standardafvigelserne også altid ens.
H0: σCBSCph (Der er Varianshomogenitet)
H1: σCBS≠σCph (Der er ikke varianshomogenitet)

Klik her for at lære mere om varianshomogenitet!
. For at sikre, at auto.arima finder den bedste model, bør vi sikre varianshomogenitetVarianshomogenitet betyder der er ens varianser for populationerne.
Hvis fx. vi har 2 stikprøver med højder for CBS og Cphbusiness studerende, vil varianshomogenitet betyde, at der er samme variation i de 2 populationer.
Testet kunne se ud som nedenfor, bemærk er der varianshomogenitet, er standardafvigelserne også altid ens.
H0: σCBSCph (Der er Varianshomogenitet)
H1: σCBS≠σCph (Der er ikke varianshomogenitet)

Klik her for at lære mere om varianshomogenitet!
. Det kan vi gøre ved at tage titalslogaritmen af data. Det betyder, at vi senere skal huske at transformereTransformer-arkitekturen er den struktur, moderne sprogmodeller bygger på. Den kan behandle hele sætninger på én gang i stedet for ord for ord, hvilket gør træningen meget hurtigere.
Google-forskere introducerede arkitekturen i 2017. Alle moderne sprogmodeller — inklusive ChatGPT, Claude og Gemini — bygger på denne idé.

Klik her for at læse mere om transformer i kapitel 1!
data tilbage ved at opløfte 10 i data'ende potens.

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

Vi log-transformererTransformer-arkitekturen er den struktur, moderne sprogmodeller bygger på. Den kan behandle hele sætninger på én gang i stedet for ord for ord, hvilket gør træningen meget hurtigere.
Google-forskere introducerede arkitekturen i 2017. Alle moderne sprogmodeller — inklusive ChatGPT, Claude og Gemini — bygger på denne idé.

Klik her for at læse mere om transformer i kapitel 1!
data for at sikre stationaritet mht. varians. Læg mærke til, at der nu er samme variation i alle årene. Vi kan se, at den log-transformeredeTransformer-arkitekturen er den struktur, moderne sprogmodeller bygger på. Den kan behandle hele sætninger på én gang i stedet for ord for ord, hvilket gør træningen meget hurtigere.
Google-forskere introducerede arkitekturen i 2017. Alle moderne sprogmodeller — inklusive ChatGPT, Claude og Gemini — bygger på denne idé.

Klik her for at læse mere om transformer i kapitel 1!
y-skala har en anden skala, som vi skal huske at rette tilbage inden vi tolker på tallene.

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

Vi finder bedste model med auto.arima, når der er stationaritet/varianshomogenitet, dvs. efter vi har taget log10 af data. For at sikre højst mulige præcision, benytter vi her parameterenEn parameter betegner en ukendt konstant i en statistisk model eller formel, ud fra en stikprøve estimeres (gættes kvalificeret på) dens værdi.
En parameter kan fx. være β, μ, p, σ etc.
Vi ønsker at udtale os om danske mænds højde, populationen er så danske mænd. Stikprøve gennemsnittet for fx. 100 mænds højde 179,34 cm. er parameter estimatet (gættet på middelværdien i populationen). Den sande ukendte parameter i populationen er altså middelhøjden i populationen μ

I AI-sammenhæng bruges ordet parametre om de tal modellen justerer under træning — som knapper på et kæmpe regneapparat. GPT-1 havde 117 millioner parametre; de største modeller anslås til billioner.
Flere parametre = modellen kan skelne mellem flere sproglige mønstre — men det koster eksponentielt mere at træne.

Klik her for at lære mere om parametre og parameter-estimater!
approximation=FALSE, auto.arima algoritmen arbejder langsommere men mere præcist, da tidsrækken er rimeligt avanceret er dette at foretrække.

    
library(forecast)
ARIMAfit = auto.arima(log10(data), approximation=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, vha. ARIMA(0,1,1)(0,1,1)[12] modellen, der netop har afsløret en sæsonkomponent.
Vi benytter nu forecast for at forudsige traktorsalget 3 år dvs. 36 perioder/måneder.
Inden vi aflæser salget skal både historiske, forudsagte og nedre og øvre grænser transformeresTransformer-arkitekturen er den struktur, moderne sprogmodeller bygger på. Den kan behandle hele sætninger på én gang i stedet for ord for ord, hvilket gør træningen meget hurtigere.
Google-forskere introducerede arkitekturen i 2017. Alle moderne sprogmodeller — inklusive ChatGPT, Claude og Gemini — bygger på denne idé.

Klik her for at læse mere om transformer i kapitel 1!
tilbage fra log10, dvs. vi opløfter data med grundtal 10:

      
# Vi forecaster:
forecast <- forecast(ARIMAfit, h = 36)
# transformer log10 tilbage til oprindelige værdier:
forecast$x <- 10^forecast$x
forecast$mean <- 10^forecast$mean
forecast$lower <- 10^forecast$lower
forecast$upper <- 10^forecast$upper
forecast
      
    

Her ses output, forudsagt traktorsalg de næste 3 år, inklusiv konfidensintervallerKonfidensintervallet beregnes ud fra en stikprøve, og angiver nedre og øvre grænser indenfor hvilke populations parameteren, ligger med en vis sandsynlighed.
Er 95% konfidensintervallet for mænds gennemsnitlige højde fx. 172 cm. og 182 cm. kan vi sige:
Vi kan med 95% sandsynlighed sige den gennemsnitlige højde for mænd i populationen, ligger mellem 172 cm. og 182 cm.
Jo større stikprøve og jo lavere sikkerhed (konfidensniveau), jo mere præcist bliver vore konfidensinterval (interval estimatet), dvs intervallet bliver smallere.
Vi kan beregne konfidensintervaller for parametre vi estimerer, fx. gennemsnittet, standardafvigelsen, andelen etc.
I modsætning til et punktestimat for fx. middelværdien, fortæller konfidensintervallet os noget om kvaliteten af vort estimat/gæt, ud fra bredden af konfidensintervallet.


Klik her for at lære mere om konfidensintervallet!
:

Point Forecast Lo 80 Hi 80 Lo 95 Hi 95 Jan 2015 567.7645 541.5250 595.2756 528.1291 610.3746 Feb 2015 566.4765 536.1251 598.5462 520.7219 616.2514 Mar 2015 670.8226 630.5861 713.6265 610.2726 737.3803 Apr 2015 758.9138 709.0462 812.2886 683.9883 842.0467 May 2015 855.9482 795.2336 921.2982 764.8565 957.8886 Jun 2015 817.2827 755.3662 884.2745 724.5116 921.9328 Jul 2015 938.7239 863.3793 1020.6435 825.9740 1066.8646 Aug 2015 934.5120 855.5481 1020.7640 816.4850 1069.6005 Sep 2015 703.5005 641.2381 771.8083 610.5411 810.6136 Oct 2015 626.9879 569.1093 690.7527 540.6654 727.0925 Nov 2015 571.9988 517.1168 632.7055 490.2289 667.4079 Dec 2015 668.5363 602.0635 742.3483 569.5937 784.6659 Jan 2016 625.2464 556.8982 701.9830 523.7954 746.3470 Feb 2016 623.8280 551.7766 705.2879 517.0674 752.6319 Mar 2016 738.7384 649.1210 840.7282 606.1690 900.3007 Apr 2016 835.7481 729.7701 957.1163 679.2224 1028.3450 May 2016 942.6065 818.1584 1085.9842 759.0754 1170.5122 Jun 2016 900.0265 776.7197 1042.9086 718.4384 1127.5115 Jul 2016 1033.7626 887.2088 1204.5248 818.2359 1306.0599 Aug 2016 1029.1243 878.5226 1205.5430 807.9370 1310.8656 Sep 2016 774.7246 657.9431 912.2342 603.4272 994.6488 Oct 2016 690.4657 583.4556 817.1022 533.6946 893.2877 Nov 2016 629.9094 529.7017 749.0741 483.2792 821.0281 Dec 2016 736.2206 616.1784 879.6490 560.7710 966.5634 Jan 2017 688.5479 570.2801 831.3428 516.1329 918.5584 Feb 2017 686.9859 564.7863 835.6252 509.1598 926.9184 Mar 2017 813.5300 664.0634 996.6385 596.4009 1109.7085 Apr 2017 920.3613 746.1039 1135.3177 667.6404 1268.7443 May 2017 1038.0383 835.9006 1289.0570 745.3547 1445.6521 Jun 2017 991.1474 792.9880 1238.8247 704.6701 1394.0894 Jul 2017 1138.4233 905.1043 1431.8875 801.6242 1616.7270 Aug 2017 1133.3154 895.5404 1434.2221 790.5858 1624.6228 Sep 2017 853.1596 670.1495 1086.1477 589.7431 1234.2345 Oct 2017 760.3701 593.7943 973.6750 520.9400 1109.8450 Nov 2017 693.6830 538.6416 893.3511 471.1323 1021.3607 Dec 2017 810.7573 626.0544 1049.9527 545.9781 1203.9448
      
plot(forecast,xlab = "Tid",ylab = "Traktorsalg")
      
    

Bemærk hvor præcist og flot vor ARIMA-model rent matematisk har forudsagt salget. Konfidensbælterne mørkegrå 80% og lysegrå 95% øges, jo længere ude i fremtiden vi er, da usikkerheden stiger.

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



Vi henter en R-pakke, der hedder fpp. Den indeholder data for månedlige køb i detailhandelen med debitkort på Island for årene 2000 til 2012 målt i millioner islandske kroner. Disse data er interessante, da Island i lighed med Danmark i perioden oplever stigende kortbrug frem for kontanter. Bemærk også sæsonfaktoren forbundet med stigende køb ved juletid.

      
# Installer fpp pakken
install.packages("fpp")
# Load fpp pakken
library(fpp)
# Gemmer debitcards som data
data <- debitcards
# plot data for køb på debitkort
plot(data)

    

Vi kan se at variationen er stigende, vi bør derfor log10 transformereTransformer-arkitekturen er den struktur, moderne sprogmodeller bygger på. Den kan behandle hele sætninger på én gang i stedet for ord for ord, hvilket gør træningen meget hurtigere.
Google-forskere introducerede arkitekturen i 2017. Alle moderne sprogmodeller — inklusive ChatGPT, Claude og Gemini — bygger på denne idé.

Klik her for at læse mere om transformer i kapitel 1!
for at sikre stationaritet, inden vi bestemmer ARIMA-modellen.

          
plot(log10(data))
          
        

Vi finder bedste model med auto.arima, når der er stationaritet/varianshomogenitet, dvs. efter vi har taget log10 af data. For at sikre højst mulige præcision, benytter vi her parameterenEn parameter betegner en ukendt konstant i en statistisk model eller formel, ud fra en stikprøve estimeres (gættes kvalificeret på) dens værdi.
En parameter kan fx. være β, μ, p, σ etc.
Vi ønsker at udtale os om danske mænds højde, populationen er så danske mænd. Stikprøve gennemsnittet for fx. 100 mænds højde 179,34 cm. er parameter estimatet (gættet på middelværdien i populationen). Den sande ukendte parameter i populationen er altså middelhøjden i populationen μ

I AI-sammenhæng bruges ordet parametre om de tal modellen justerer under træning — som knapper på et kæmpe regneapparat. GPT-1 havde 117 millioner parametre; de største modeller anslås til billioner.
Flere parametre = modellen kan skelne mellem flere sproglige mønstre — men det koster eksponentielt mere at træne.

Klik her for at lære mere om parametre og parameter-estimater!
approximation=FALSE, auto.arima algoritmen arbejder langsommere men mere præcist, da tidsrækken er rimeligt avanceret er dette at foretrække.

    
library(forecast)
ARIMAfit = auto.arima(log10(data), approximation=FALSE)
ARIMAfit
    
   
Series: log10(data) 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 de kommende 2 års omsætning på debetkort med ARIMA-modellen. Vi husker at transformereTransformer-arkitekturen er den struktur, moderne sprogmodeller bygger på. Den kan behandle hele sætninger på én gang i stedet for ord for ord, hvilket gør træningen meget hurtigere.
Google-forskere introducerede arkitekturen i 2017. Alle moderne sprogmodeller — inklusive ChatGPT, Claude og Gemini — bygger på denne idé.

Klik her for at læse mere om transformer i kapitel 1!
tilbage.

      
# Vi forecaster:
forecast <- forecast(ARIMAfit, h = 24)
# transformer log10 tilbage til oprindelige værdier:
forecast$x <- 10^forecast$x
forecast$mean <- 10^forecast$mean
forecast$lower <- 10^forecast$lower
forecast$upper <- 10^forecast$upper
forecast
      
    

Forudsagt brug af debetkort de næste 24 måneder bliver:

Point Forecast Lo 80 Hi 80 Lo 95 Hi 95 Jan 2013 19717.77 18532.00 20979.42 17933.43 21679.65 Feb 2013 19162.87 17966.59 20438.79 17363.86 21148.26 Mar 2013 20436.29 19088.78 21878.92 18411.80 22683.38 Apr 2013 20506.84 18963.49 22175.79 18194.09 23113.57 May 2013 23262.14 21429.24 25251.81 20518.17 26373.08 Jun 2013 23545.62 21593.43 25674.30 20626.40 26877.99 Jul 2013 24292.86 22155.56 26636.35 21101.34 27967.10 Aug 2013 25544.16 23203.82 28120.54 22053.01 29587.98 Sep 2013 22267.47 20143.37 24615.56 19102.23 25957.19 Oct 2013 22543.80 20306.69 25027.35 19213.76 26450.98 Nov 2013 22081.63 19815.46 24606.97 18711.54 26058.69 Dec 2013 29090.93 26007.55 32539.87 24509.89 34528.19 Jan 2014 20701.39 18383.06 23312.09 17262.83 24824.87 Feb 2014 20352.57 17998.93 23014.00 16865.25 24560.99 Mar 2014 21886.85 19274.11 24853.78 18019.74 26583.87 Apr 2014 21721.53 19037.07 24784.53 17753.03 26577.14 May 2014 24745.18 21599.74 28348.66 20099.88 30464.05 Jun 2014 25091.09 21813.46 28861.21 20255.43 31081.18 Jul 2014 25806.49 22344.02 29805.51 20703.32 32167.54 Aug 2014 27175.65 23440.05 31506.59 21675.13 34072.04 Sep 2014 23697.15 20363.04 27577.16 18792.39 29882.04 Oct 2014 23970.40 20521.68 27998.68 18901.68 30398.35 Nov 2014 23490.36 20039.02 27536.12 18422.27 29952.71 Dec 2014 30947.83 26308.39 36405.43 24140.98 39673.96

Julehandelen i december 2014 er således ifølge modellen forudsagt til at være på 30.948 mio ISK dvs. 30,9 mia ISK, hvilket svarede til cirka 1,47 mia DKK.
Vi plotter nu historiske og forudsagt omsætning på debetkort på Island, bemærk vi har transformeretTransformer-arkitekturen er den struktur, moderne sprogmodeller bygger på. Den kan behandle hele sætninger på én gang i stedet for ord for ord, hvilket gør træningen meget hurtigere.
Google-forskere introducerede arkitekturen i 2017. Alle moderne sprogmodeller — inklusive ChatGPT, Claude og Gemini — bygger på denne idé.

Klik her for at læse mere om transformer i kapitel 1!
tilbage ovenfor.

  
plot(forecast,xlab = "Tid",ylab = "Salg Debetkort")
  

Teknisk aktieanalyse



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 aktiedata. Husk hvis man bruger Sys.date får man ikke samme model da dags dato ikke er den samme, som da 27/12 2023 da dette er skrevet.
Vi ser her kun på Google aktiedata for 2023 herunder.

      
# Vi loader pakkerne quantmod og forecast
pacman::p_load(quantmod, forecast)
# Vi henter Google aktiedata fra 2023-01-01 til dags dato
# getSymbols.warning4.0=FALSE betyder vi ikke vil have diverse advarsler 
getSymbols("GOOG",from = "2023-01-01", to = Sys.Date(),getSymbols.warning4.0=FALSE)
      
    
[1] "GOOG"

Vi vil her kun plotte justeret lukkekurs for Google dette er den 6. søjle i GOOG datasættet.


plot(GOOG[,6],main = "Google adj. close")

Vi benytter auto.arima på justeret lukkekurs, vi får en ARIMA(0,1,0) serie, vi kan se at isoleret set har 2023 været et fantastisk år for Google aktien, der forudsiges en daglig stigning på 0,2159 USD.


agoog <- auto.arima(GOOG[,6]) 
agoog
Series: GOOG[, 6] ARIMA(0,1,0) with drift Coefficients: drift 0.2159 s.e. 0.1442 sigma^2 = 5.139: log likelihood = -549.88 AIC=1103.76 AICc=1103.81 BIC=1110.77

Vi forudsiger 100 dages aktiekurs baseret på modellen:


forudsagt <- forecast(agoog, h=100)
forudsagt
Point Forecast Lo 80 Hi 80 Lo 95 Hi 95 248 143.0359 140.1309 145.9410 138.5930 147.4789 249 143.2519 139.1435 147.3603 136.9686 149.5351 250 143.4678 138.4361 148.4996 135.7724 151.1632 251 143.6837 137.8736 149.4939 134.7979 152.5696 252 143.8997 137.4037 150.3956 133.9650 153.8344 253 144.1156 136.9997 151.2316 133.2327 154.9985 254 144.3316 136.6454 152.0177 132.5767 156.0865 255 144.5475 136.3307 152.7643 131.9810 157.1140 256 144.7634 136.0482 153.4787 131.4346 158.0922 257 144.9794 135.7927 154.1660 130.9296 159.0292 258 145.1953 135.5602 154.8303 130.4597 159.9308 259 145.4112 135.3477 155.4747 130.0204 160.8020 260 145.6272 135.1527 156.1016 129.6079 161.6464 261 145.8431 134.9733 156.7129 129.2192 162.4670 262 146.0590 134.8077 157.3104 128.8516 163.2664 263 146.2750 134.6547 157.8953 128.5032 164.0467 . . .

plot(forudsagt)
  

Bemærk her skal vi passe på, da vi kun ser på 2023, havde vi fx. set på kursen fra år 2000 og frem havde vi fået en mere kompliceret og knap så optimistisk forudsigelse.


pacman::p_load(quantmod, forecast)
getSymbols("GOOG",from = "2000-01-01", to = Sys.Date(),getSymbols.warning4.0=FALSE)
plot(GOOG[,6],main = "Google adj. close")
agoog <- auto.arima(GOOG[,6])
agoog
forudsagt <- forecast(agoog, h=100)
forudsagt
plot(forudsagt)

Vi ser, at modellen er mere kompliceret end en ARIMA(1,1,1)-model, med en mindre daglig drift på kun 0,0285 USD.

Series: GOOG[, 6] ARIMA(1,1,1) with drift Coefficients: ar1 ma1 drift 0.8459 -0.8800 0.0285 s.e. 0.0543 0.0484 0.0118 sigma^2 = 1.124: log likelihood = -7194.26 AIC=14396.52 AICc=14396.52 BIC=14422.48

Man kan analysere aktier fra hele verden med quantmod pakken. Find symbolet på Yahoo Finance. Bemærk, hvis du fx har et aktiesymbol som Novo Nordisk NOVO-B.CO, hvor der er bindestreg og punktum, skal du bruge backticks `NOVO-B.CO` i referencer.
Så R gemmer aktiedata i filen NOVO-B.CO, men vi skal bruge `NOVO-B.CO` for at refere til data.


getSymbols("NOVO-B.CO",from = "2020-01-01", to = Sys.Date(),getSymbols.warning4.0=FALSE)
anovo <- auto.arima(`NOVO-B.CO`[,6])

Eksporter Aktiekurser til Excel



Man kan eksportere data til fx Excel med pakken rio, herunder dannes en Excel-fil med to ark med hhv. aktiedata og forudsigelser. Funktionen export(), benyttes, man angiver data til de enkelte ark en list() funktion, sidste argument er selve filnavnet. Filen gemmes i arbejdsbiblioteket. Herfra kan den kopieres eller eksporteres.


#Hent rio med install.packages("rio")
#Load rio med library("rio") eller benyt pacman som herunder
pacman::p_load(quantmod, forecast, rio)
getSymbols("GOOG",from = "2017-01-01", to = Sys.Date(),getSymbols.warning4.0=FALSE)
agoog <- auto.arima(GOOG[,6])
fagoog <- forecast(agoog) 
fagoog <- as.data.frame(fagoog)
GOOG <- as.data.frame(GOOG) 
export(list(GOOG,fagoog),overwrite=TRUE,"google.xlsx")
         
      

Ovenstående kode henter Google aktiedata kører en arima analyse på disse, og gemmer kurser og forecast i Excelfilen google.xlsx i arbejdsbiblioteket.

Aktieafkast


I Quantmod pakken ligger også mulighed for at beregne fx. dagligt, ugentligt afkast, dette gør vi vha. funktionen “periodReturn”. Her er angivet period = 'yearly', så vi får angivet det årlige afkast fra 2010 til i år, sidste år er kun år til dato. Man kan benytte andre parametreEn parameter betegner en ukendt konstant i en statistisk model eller formel, ud fra en stikprøve estimeres (gættes kvalificeret på) dens værdi.
En parameter kan fx. være β, μ, p, σ etc.
Vi ønsker at udtale os om danske mænds højde, populationen er så danske mænd. Stikprøve gennemsnittet for fx. 100 mænds højde 179,34 cm. er parameter estimatet (gættet på middelværdien i populationen). Den sande ukendte parameter i populationen er altså middelhøjden i populationen μ

I AI-sammenhæng bruges ordet parametre om de tal modellen justerer under træning — som knapper på et kæmpe regneapparat. GPT-1 havde 117 millioner parametre; de største modeller anslås til billioner.
Flere parametre = modellen kan skelne mellem flere sproglige mønstre — men det koster eksponentielt mere at træne.

Klik her for at lære mere om parametre og parameter-estimater!
som fx. monthly, weekly, daily.


getSymbols("GOOG", from = "2010-01-01", to = Sys.Date())
goog <- periodReturn(GOOG, period = 'yearly', subset = '2010::')
goog
    

Bemærk afkastet er angivet som decimaltal, så 2023 har været et fantastisk år at have haft Google aktier, da disse er steget med 60,96% (bemærk året er ikke helt slut men opgjort ud fra kurs 26. december 2023), året før 2022 var ringe pga. Ukraine krigen, således faldt aktien 38,67% i 2022.

yearly.returns 2010-12-31 -0.05260387 2011-12-30 0.08742859 2012-12-31 0.09518512 2013-12-31 0.58431105 2014-12-31 -0.05965610 2015-12-31 0.44559938 2016-12-30 0.01705144 2017-12-29 0.35575652 2018-12-31 -0.01031156 2019-12-31 0.29104584 2020-12-31 0.31028713 2021-12-31 0.65170560 2022-12-30 -0.38671339 2023-12-26 0.60960219

Vi kunne plotte med linjer med R-kommandoen plot(goog), men herunder er benyttet punkter i stedet man kan bruge forskellige symboler ved at ændre tallet i pch = 10.


# plot med punkter
plot(goog, pch = 10, type = "p", main = "Google årligt afkast siden 2010", ylab="Afkast",ylim = c(-0.3,0.8))
    

Vi kan forudsige det årlige afkast ligesom aktiekursen; vi opstiller en ARIMA-model:

    
auto.arima(goog)

   

Vi får en ARIMA(1,0,0), hvor vi konvergerer mod et gennemsnitligt årligt afkast på 20,56%. Modellen kan ikke forudsige op- og nedture, krige etc. Det er heller ikke muligt at benytte en sæsonkomponent, da årsdata ikke har en sæsonperiode at måle på. Forudsigelsen bliver derfor et flot årligt afkast på aktien.

Series: goog ARIMA(1,0,0) with non-zero mean Coefficients: ar1 mean -0.6934 0.2056 s.e. 0.1955 0.0350 sigma^2 = 0.05399: log likelihood = 1.32 AIC=3.36 AICc=5.76 BIC=5.28

forecast(auto.arima(goog),h=100)

Bemærk, at afkastet konvergerer mod 20,56% pr. år ifølge modellen. Er man længe nok i Google-aktien, er den en god investering ifølge modellen, baseret på historiske data. Vi har dog meget brede konfidensintervallerKonfidensintervallet beregnes ud fra en stikprøve, og angiver nedre og øvre grænser indenfor hvilke populations parameteren, ligger med en vis sandsynlighed.
Er 95% konfidensintervallet for mænds gennemsnitlige højde fx. 172 cm. og 182 cm. kan vi sige:
Vi kan med 95% sandsynlighed sige den gennemsnitlige højde for mænd i populationen, ligger mellem 172 cm. og 182 cm.
Jo større stikprøve og jo lavere sikkerhed (konfidensniveau), jo mere præcist bliver vore konfidensinterval (interval estimatet), dvs intervallet bliver smallere.
Vi kan beregne konfidensintervaller for parametre vi estimerer, fx. gennemsnittet, standardafvigelsen, andelen etc.
I modsætning til et punktestimat for fx. middelværdien, fortæller konfidensintervallet os noget om kvaliteten af vort estimat/gæt, ud fra bredden af konfidensintervallet.


Klik her for at lære mere om konfidensintervallet!
. Vi kan med 95% sikkerhed sige, at det årlige afkast forudsagt 100 år frem i tiden ligger mellem -42,64% og 83,77%.

Point Forecast Lo 80 Hi 80 Lo 95 Hi 95 15 -0.07446757 -0.37225768 0.2233225 -0.5298982 0.3809631 16 0.39987265 0.03749546 0.7622498 -0.1543354 0.9540807 17 0.07096080 -0.31867801 0.4605996 -0.5249403 0.6668619 18 0.29903129 -0.10305788 0.7011205 -0.3159110 0.9139736 19 0.14088513 -0.26705512 0.5488254 -0.4830056 0.7647759 20 0.25054512 -0.16017876 0.6612690 -0.3776028 0.8786931 21 0.17450588 -0.23754971 0.5865615 -0.4556788 0.8046905 . . . 109 0.20564207 -0.20764300 0.6189271 -0.4264229 0.8377070 110 0.20564207 -0.20764300 0.6189271 -0.4264229 0.8377070 111 0.20564207 -0.20764300 0.6189271 -0.4264229 0.8377070 112 0.20564207 -0.20764300 0.6189271 -0.4264229 0.8377070 113 0.20564207 -0.20764300 0.6189271 -0.4264229 0.8377070 114 0.20564207 -0.20764300 0.6189271 -0.4264229 0.8377070


Quiz

Quiz om ARIMA analyse

Spørgsmål

Hent ARIMA22.xlsx Excel-filen

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.


ts.plot(ARIMA22)
auto.arima(ARIMA22)
forecast(auto.arima(ARIMA22),h=15)
plot(forecast(auto.arima(ARIMA22),h=15))
          
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 Point Forecast Lo 80 Hi 80 Lo 95 Hi 95 51 216.7592 199.5524 233.9661 190.4436 243.0748 52 215.7779 198.1270 233.4288 188.7832 242.7727 53 215.5536 197.8798 233.2274 188.5238 242.5833 54 215.5023 197.8273 233.1773 188.4707 242.5339 55 215.4905 197.8155 233.1656 188.4588 242.5222 56 215.4878 197.8128 233.1629 188.4562 242.5195 57 215.4872 197.8122 233.1623 188.4555 242.5189 58 215.4871 197.8120 233.1622 188.4554 242.5188 59 215.4871 197.8120 233.1621 188.4554 242.5188 60 215.4871 197.8120 233.1621 188.4554 242.5188 61 215.4871 197.8120 233.1621 188.4554 242.5187 62 215.4871 197.8120 233.1621 188.4554 242.5187 63 215.4871 197.8120 233.1621 188.4554 242.5187 64 215.4871 197.8120 233.1621 188.4554 242.5187 65 215.4871 197.8120 233.1621 188.4554 242.5187

I Excel-filen herunder er udregnet forudsagte kurser fra tid 51 til tid 65, disse stemmer med de forecastede kurser i R.

Hent ARIMA22_forudsagt.xlsx Excel-filen
ARIMA7.xlsx Excel-filen Importer ARIMA7.xlsx til R via menuen File - Import Dataset - Excel.
Bestem for den fremtidige aktiekurs 24 perioder frem vha. forecast, udregn direkte fx. vha. Excel og tjek dit resultat i R.

ts.plot(ARIMA7)
auto.arima(ARIMA7)
forecast(auto.arima(ARIMA7),h=24)
plot(forecast(auto.arima(ARIMA7),h=24))
          
Series: ARIMA7 ARIMA(0,1,0) with drift Coefficients: drift 0.5426 s.e. 0.1003 sigma^2 = 1.007: log likelihood = -140.3 AIC=284.6 AICc=284.72 BIC=289.79 Point Forecast Lo 80 Hi 80 Lo 95 Hi 95 101 154.2593 152.9735 155.5452 152.2928 156.2259 102 154.8019 152.9835 156.6204 152.0208 157.5830 103 155.3445 153.1174 157.5717 151.9384 158.7507 104 155.8871 153.3154 158.4588 151.9540 159.8202 105 156.4297 153.5545 159.3050 152.0324 160.8270 106 156.9723 153.8226 160.1220 152.1553 161.7893 107 157.5149 154.1129 160.9169 152.3119 162.7179 108 158.0575 154.4206 161.6944 152.4953 163.6197 109 158.6001 154.7425 162.4576 152.7005 164.4997 110 159.1427 155.0765 163.2089 152.9239 165.3614 111 159.6853 155.4206 163.9500 153.1630 166.2076 112 160.2279 155.7735 164.6822 153.4156 167.0402 113 160.7705 156.1343 165.4067 153.6800 167.8609 114 161.3131 156.5018 166.1243 153.9549 168.6712 115 161.8557 156.8756 166.8357 154.2393 169.4720 116 162.3982 157.2548 167.5417 154.5321 170.2644 117 162.9408 157.6391 168.2425 154.8326 171.0491 118 163.4834 158.0280 168.9388 155.1401 171.8268 119 164.0260 158.4211 169.6309 155.4541 172.5980 120 164.5686 158.8181 170.3191 155.7740 173.3633 121 165.1112 159.2187 171.0037 156.0994 174.1230 122 165.6538 159.6226 171.6850 156.4299 174.8777 123 166.1964 160.0297 172.3631 156.7652 175.6276 124 166.7390 160.4396 173.0384 157.1049 176.3730

Herunder er udregnet forudsagte kurser i Excel.

ARIMA7_forudsagt.xlsx Excel-filen
ARIMA7.xlsx Excel-filen Importer ARIMAseason.xlsx til R via menuen File - Import Dataset - Excel.
Hvis du plotter ses at tidsserien synes at have en sæsonkomponent, husk derfor at log10 transformere serien inden ARIMA analysen.
Bestem for den fremtidige aktiekurs 12 perioder frem vha. forecast, plot den forecastede udvikling.

library(forecast)
# Ret kurserne i søjle 2 til en tidsserie.
# Angiv seriens start og frekvens.
data = ts(data[,2],start = c(2013,1),frequency = 12)
plot(data, xlab='Tid', ylab = 'Salg pr måned')
ARIMAfit = auto.arima(log10(data), approximation=FALSE)
ARIMAfit
# Vi forecaster:
forecast <- forecast(ARIMAfit, h = 36)
# transformer log10 tilbage til oprindelige værdier:
forecast$x <- 10^forecast$x
forecast$mean <- 10^forecast$mean
forecast$lower <- 10^forecast$lower
forecast$upper <- 10^forecast$upper
forecast
# plot med forecast
plot(forecast,xlab = "Tid",ylab = "Salg")
Series: log10(data) ARIMA(4,1,2)(1,0,0)[12] with drift Coefficients: ar1 ar2 ar3 ar4 ma1 ma2 sar1 drift 0.6408 0.0930 -0.1961 -0.4404 -1.4199 0.5445 0.4700 0.0079 s.e. 0.1454 0.1205 0.1073 0.1153 0.1605 0.1550 0.1039 0.0016 sigma^2 = 0.005497: log likelihood = 140.69 AIC=-263.39 AICc=-261.73 BIC=-238.37 Point Forecast Lo 80 Hi 80 Lo 95 Hi 95 Jan 2023 1191.717 957.5464 1483.156 852.8305 1665.267 Feb 2023 1303.711 1042.0227 1631.119 925.4808 1836.519 Mar 2023 1306.927 1030.7111 1657.164 908.9742 1879.104 Apr 2023 1236.087 971.7133 1572.389 855.4870 1786.014 May 2023 1124.910 880.4493 1437.246 773.3436 1636.300 Jun 2023 1116.456 871.6208 1430.065 764.5627 1630.310 Jul 2023 1031.309 802.3097 1325.670 702.4512 1514.124 Aug 2023 1068.907 831.3545 1374.338 727.7862 1569.915 Sep 2023 1130.883 876.2796 1459.462 765.6000 1670.451 Oct 2023 1196.778 916.6212 1562.562 795.9331 1799.494 Nov 2023 1329.478 999.3004 1768.750 859.1367 2057.312 Dec 2023 1420.928 1051.3414 1920.440 896.3701 2252.460
Gennemfør en ARIMA analyse af Novo aktien, baseret på historiske data fra 2010 til 27/12 2023.
Forudsig aktiekursen 100 dage frem.
Husk da aktie symbolet er NOVO-B.CO skal du benytte backticks `NOVO-B.CO`
Hent månedligt afkast for Novo aktien for samme tidsperiode.
Plot månedligt afkast i en figur, med afkastet som punkter.
Forudsig de næste 12 måneders afkast baseret på en ARIMA analyse.

pacman::p_load(quantmod, forecast)
getSymbols("NOVO-B.CO",from = "2010-01-01", to = "2023-12-27",getSymbols.warning4.0=FALSE)
plot(`NOVO-B.CO`[,6],main = "Novo adj. close")

anovo <- auto.arima(`NOVO-B.CO`[,6])
anovo
forudsagt <- forecast(anovo, h=100)
forudsagt
plot(forudsagt,main = "Novo adj. close",ylab = "Kurs",xlab = "Dag 2010-01-01 til 2023-12-22")
Series: `NOVO-B.CO`[, 6] ARIMA(5,2,0) Coefficients: ar1 ar2 ar3 ar4 ar5 -0.8592 -0.7271 -0.5864 -0.3818 -0.1790 s.e. 0.0167 0.0212 0.0224 0.0212 0.0167 sigma^2 = 19.56: log likelihood = -10147.77 AIC=20307.53 AICc=20307.56 BIC=20344.48 Point Forecast Lo 80 Hi 80 Lo 95 Hi 95 3497 697.6302 691.959928 703.3006 688.958247 706.3022 3498 701.6942 693.085840 710.3026 688.528829 714.8596 3499 704.8686 693.555354 716.1819 687.566464 722.1708 3500 705.9137 691.845595 719.9819 684.398364 727.4291 3501 706.6432 689.443452 723.8430 680.338447 732.9480 3502 708.7374 687.948762 729.5261 676.943897 740.5310 . . . 3590 895.8878 67.321415 1724.4542 -371.295136 2163.0707 3591 898.0055 56.491534 1739.5195 -388.979062 2184.9901 3592 900.1232 45.594904 1754.6516 -406.765072 2207.0115 3593 902.2410 34.631864 1769.8500 -424.652646 2229.1346 3594 904.3587 23.602752 1785.1146 -442.641270 2251.3586 3595 906.4764 12.507896 1800.4449 -460.730439 2273.6832 3596 908.5941 1.347623 1815.8406 -478.919656 2296.1079

Vi ser nu på det månedlige afkast for Novo aktien


# Afkast pr måned hentes vha. period monthly
novoreturn <- periodReturn(`NOVO-B.CO`, period = 'monthly', subset = '2010::')
novoreturn
# plot med punkter
plot(novoreturn, pch = 10, type = "p", main = "Novo månedligt afkast", ylab="Afkast",ylim = c(-0.3,0.4))
auto.arima(novoreturn)
forecast(auto.arima(novoreturn),h=12)
Series: novoreturn ARIMA(0,0,0) with non-zero mean Coefficients: mean 0.0199 s.e. 0.0046 sigma^2 = 0.003611: log likelihood = 234.51 AIC=-465.03 AICc=-464.95 BIC=-458.78

Vi ser her at den bedste forudsigelse, er et flot månedligt afkast på 0,0199 ≈ 2%

Point Forecast Lo 80 Hi 80 Lo 95 Hi 95 169 0.0199304 -0.05708177 0.09694257 -0.09784955 0.1377103 170 0.0199304 -0.05708177 0.09694257 -0.09784955 0.1377103 171 0.0199304 -0.05708177 0.09694257 -0.09784955 0.1377103 172 0.0199304 -0.05708177 0.09694257 -0.09784955 0.1377103 173 0.0199304 -0.05708177 0.09694257 -0.09784955 0.1377103 174 0.0199304 -0.05708177 0.09694257 -0.09784955 0.1377103 175 0.0199304 -0.05708177 0.09694257 -0.09784955 0.1377103 176 0.0199304 -0.05708177 0.09694257 -0.09784955 0.1377103 177 0.0199304 -0.05708177 0.09694257 -0.09784955 0.1377103 178 0.0199304 -0.05708177 0.09694257 -0.09784955 0.1377103
Gennemfør en ARIMA analyse af Apple aktien, baseret på historiske data fra 2010 til 27/12 2023.
Forudsig aktiekursen 100 dage frem.
Aktie symbolet er AAPL Hent månedligt afkast for Apple aktien for samme tidsperiode.
Plot månedligt afkast i en figur, med afkastet som punkter.
Forudsig de næste 24 måneders afkast baseret på en ARIMA analyse. Plot forudsigelsen af Apple aktien 24 måneder frem.

    # Vi kan undgå scientific notation med nedenstående kommando
options(scipen = 999)
pacman::p_load(quantmod, forecast)
getSymbols("AAPL",from = "2010-01-01", to = "2023-12-27",getSymbols.warning4.0=FALSE)
plot(AAPL[,6],main = "Apple adj. close")
aa <- auto.arima(AAPL[,6])
aa
forudsagt <- forecast(aa, h=100)
forudsagt
plot(forudsagt,main = "Apple adj. close",ylab = "Kurs",xlab = "Dag 2000-01-01 til 2023-12-22")
    
Series: AAPL[, 6] ARIMA(0,1,2) with drift Coefficients: ma1 ma2 drift -0.0384 -0.0247 0.0530 s.e. 0.0169 0.0169 0.0229 sigma^2 = 2.098: log likelihood = -6293.74 AIC=12595.48 AICc=12595.49 BIC=12620.14 Point Forecast Lo 80 Hi 80 Lo 95 Hi 95 3520 193.1578 191.3015 195.0140 190.3188 195.9967 3521 193.2270 190.6517 195.8022 189.2885 197.1655 3522 193.2800 190.1725 196.3875 188.5275 198.0325 3523 193.3331 189.7720 196.8941 187.8869 198.7792 . . . 3615 198.2124 181.1553 215.2696 172.1257 224.2991 3616 198.2655 181.1199 215.4111 172.0435 224.4874 3617 198.3185 181.0849 215.5521 171.9620 224.6750 3618 198.3715 181.0504 215.6927 171.8812 224.8619 3619 198.4246 181.0164 215.8328 171.8010 225.0481

Vi ser nu på det månedlige afkast for Apple aktien


# Afkast pr måned hentes vha. period monthly
return <- periodReturn(AAPL, period = 'monthly', subset = '2010::')
return
# plot med punkter
plot(return, pch = 10, type = "p", main = "Apple månedligt afkast", ylab="Afkast", ylim = c(-0.3,0.3))
auto.arima(return)
forecast(auto.arima(return),h=24)
# Plot af forudsagt månedligt afkast
plot(forecast(auto.arima(return),h=24))
    
Series: return ARIMA(2,0,0) with non-zero mean Coefficients: ar1 ar2 mean 0.0740 -0.1350 0.0224 s.e. 0.0769 0.0769 0.0057 sigma^2 = 0.00616: log likelihood = 190.64 AIC=-373.28 AICc=-373.03 BIC=-360.78

Vi ser her at den gennemsnitlige forudsigelse, er et flot månedligt afkast på 0,022 ≈ 2,2%

Point Forecast Lo 80 Hi 80 Lo 95 Hi 95 169 0.009840806 -0.09074642 0.1104280 -0.1439941 0.1636757 170 0.022316106 -0.07854591 0.1231781 -0.1319390 0.1765712 171 0.024113256 -0.07758615 0.1258127 -0.1314226 0.1796491 172 0.022562634 -0.07915580 0.1242811 -0.1330023 0.1781276 173 0.022205412 -0.07952580 0.1239366 -0.1333790 0.1777899 174 0.022388247 -0.07934369 0.1241202 -0.1331973 0.1779738 175 0.022449979 -0.07928214 0.1241821 -0.1331359 0.1780358 176 0.022429871 -0.07930227 0.1241620 -0.1331560 0.1780157 177 0.022420053 -0.07931209 0.1241522 -0.1331658 0.1780059 178 0.022422040 -0.07931010 0.1241542 -0.1331638 0.1780079 179 0.022423512 -0.07930863 0.1241557 -0.1331624 0.1780094 180 0.022423353 -0.07930879 0.1241555 -0.1331625 0.1780092 181 0.022423142 -0.07930900 0.1241553 -0.1331627 0.1780090 182 0.022423148 -0.07930899 0.1241553 -0.1331627 0.1780090 183 0.022423177 -0.07930896 0.1241553 -0.1331627 0.1780091 184 0.022423179 -0.07930896 0.1241553 -0.1331627 0.1780091 185 0.022423175 -0.07930896 0.1241553 -0.1331627 0.1780091 186 0.022423174 -0.07930896 0.1241553 -0.1331627 0.1780091 187 0.022423175 -0.07930896 0.1241553 -0.1331627 0.1780091 188 0.022423175 -0.07930896 0.1241553 -0.1331627 0.1780091 189 0.022423175 -0.07930896 0.1241553 -0.1331627 0.1780091 190 0.022423175 -0.07930896 0.1241553 -0.1331627 0.1780091 191 0.022423175 -0.07930896 0.1241553 -0.1331627 0.1780091 192 0.022423175 -0.07930896 0.1241553 -0.1331627 0.1780091







Du har nu adgang

Alle kapitler er åbne.