keskiviikko 9. joulukuuta 2015

Aikasarjan autokorrelaatio

Autokorrelaatiokuvat ACF ja PACF ovat olennaisessa osassa, kun tutkitaan aikasarjoja ja halutaan ennustaa. On siis tärkeää ymmärtää, miten kuvissa esiintyvät luvut syntyvät. Katsotaan nyt myyntien aikasarjaa, jota käytin SARIMA-esimerkissä ja tutkitaan autokorrelaatiota tarkemmin. Olen lisännyt kuvaan viivan, joka kuvaa myyntien keskiarvoa.


Alla myös aikasarjan autokorrelaatiokuvat.




Autokorrelaatio lasketaan alla olevalla kaavalla. 

Autokorrelaation suuruuteen vaikuttaa etenkin y(t):n ja y(t-1) välinen kovarianssi. Ensimmäistä kuvaa katsomalla näemme, että noin puolet arvoista on keskiarvon alapuolella ja noin puolet keskiarvon yläpuolella. Tästä johtuen, kun laskemme y(t):n autokorrelaatiota ensimmäiselle viiveelle, niin y(t):n ja y(t-1):n kovarianssi on jatkuvasti positiivinen. y(t):n varianssi on luonnollisesti positiivinen, joten tällöin myös autokorrelaatio on ensimmäiselle viiveelle positiivinen. 

Annan esimerkin autokorrelaation laskemisesta ensimmäiselle viiveelle. Ajatellaan, että meillä on aikasarja, joka muodostuu arvoista 1,2,3 ja 4, ja aikaväli on 01/2015-04/2015 (eli tammikuun arvo on 1, helmikuun arvo on 2, maaliskuun arvo on 3 ja huhtikuun arvo on 4). Olemme kiinnostuneita siitä korreloiko aikasarja ensimmäisen viiveensä kanssa, eli selittääkö tammikuun arvo helmikuun arvoa ja helmikuun arvo maaliskuun arvoa ja maaliskuun arvo huhtikuun arvoa. Lasketaan ensin kovarianssi y(t:):lle ja y(t-1):lle. Aikasarjan keskiarvo on (1+2+3+4)/4= 2.5 joten voimme kirjottaa kovarianssin seuraavasti: (2-2.5)(1-2.5)+(3-2.5)(2-2.5)+(4-2.5)(3-2.5)= 1.25
Lasketaan myös varianssi: (1-2.5)^2 + (2-2.5)^2 + (3-2.5)^2 + (4-2.5)^2 = 5
Autokorrelaatio ensimmäiselle viiveelle on siis 1.25/5=0.25

Lasketaan autokorrelaatiot myös viiveille 2 ja 3. Ensimmäiseksi lasketaan kovarianssi 2. viiveelle (huom.varianssi pysyy samana viiveistä riippumatta): (3-2.5)(1-2.5)+(4-2.5)(2-2.5)= -1.5 eli autokorrelaatio 2. viiveelle on: -1.5/5= -0.3

Ja lopuksi 3. viiveen kovarianssi: (4-2.5)(1-2.5)= -2.25 eli autokorrelaatio 3. viiveelle on: -2.25/5= -0.45

Positiivinen autokorrelaatio tarkoittaa sitä, että havainnot valitulla viivellä ovat suureksi osaksi saman merkkisiä, eli joko keskiarvoa pienempiä tai suurempia. Autokorrelaatiota aiheuttavat erityisesti mallista puuttuvat muuttujat sekä vääränlaisen mallin käyttö. Puuttuva muuttuja voi olla esim. AR(1) termi, jota emme ole vielä lisänneet malliin. Vääranlaisella mallillla tarkoitan tässä mallia, jossa on vielä yksikköjuuri. Kuten SARIMA-esimerkissä näimme, niin aikasarjassa on ennen kausidifferensointia vahva autokorrelaatio, joka vähenee huomattavasti tämän toimenpiteen jälkeen. Toisaalta kaikki autokorrelaatio ei katoa mallista ja tarvitsemme puuttuvat muuttujat malliin. On tärkeää tiedostaa, että ARIMA-ennustaminen toimii, koska aikasarjoissa eri havainnot eivät usein ole täysin itsenäisiä. Eli aiemman kuukauden havainto tarjoaa usein informaatiota tulevan kuukauden havainnosta. Itseasiassa "weakly" stationaarisessa AR(1) mallissa ensimmäisen viiveen autokorrelaatio on sama kuin mallissa esiintyvän y(t-1) kerroin, eli ensimmäinen viive vaikuttaa y(t):n aina samalla tavalla. Jos havainnot olisivat täysin itsenäisiä ja riippumattomia toisistaan, eli ns.white noise, niin emme voisi ennustaa kuin, että aikasarja pysyy keskiarvossaan. (White noisella tarkoitetaan sarjaa, jonka havainnot pyörivät keskiarvonsa ympärillä täysin sattumanvaraisesti, joten aikaisemmat arvot eivät tarjoa informaatiota tulevasta). Tämä on hyvä pitää mielessä, jos haluaa ennustaa esim. osakemarkkinoita. Tarjoavatko osakkeen historialliset arvostukset oikeasti relevanttia tietoa tulevista kursseista vai onko paras ennustus vain viimeisin kurssi?

PACF

Osittaisautokorrelaatio mittaa lineaarista riippuvuutta tietyllä viiveellä, kun aikaisempien viiveiden vaikutus on otettu pois. Tästä johtuen aikasarjan autokorrelaatio ensimmäisellä viiveellä on sama kuin osittaisautokorrelaatio ensimmäisellä viiveellä. Osittaisautokorrelaatiokuvat kertovat kannattaako AR-termejä laittaa ARIMA-/SARIMA -malleihin. Osittaisautokorrelaatio siis kertoo, onko esim. aikasarjan 3.viiveellä (y(t-3) lineaarista riippuvuutta y(t):n kanssa. Jos näin ei ole, niin aikasarjamalliin ei kannata laittaa AR(3) termiä.

Osittaisautokorrelaatio kuvataan usein, niin että osittaisiautokorrelaatio viiveellä h olisi sama asia kuin kyseisen viiveen regressiokerroin mallissa, jossa ovat sen lisäksi sitä edeltävät viiveet. AR-malli olisi siis viiveen h=3 tapauksessa seuraava: y(t)=b0+b1y(t-1)+b2y(t-2)+b3y(t-3) ja osittaisautokorrelaatio viiveelle 3 olisi kerroin b3.  Vastaavasti 4.viiveen AR-malli olisi y(t)=b0+b1y(t-1)+b2y(t-2)+b3y(t-3)+b4y(t-4) ja sen osittaisautokorrelaatio olisi kerroin b4. Tätä menetelmää ei kuitenkaan R:ssä käytetä, vaan kyseessä on Durbin-Levinson Rekursio, joka on algoritmi, jolla vastaavat kertoimet (osittaisautokorrelaatiot) lasketaan. Tästä laskentatavasta voit lukea lisää esim. täältä

Seuraavaksi simuloin R:llä ei-stationaarisen aikasarjan, jotta näemme, kuinka perinteisen AR-mallin kertoimet ja R:n osittaisautokorrelaatioluvut eroavat toisistaan huomattavasti. Simuloin myöhemmin myös stationaarisen aikasarjan ja näemme, että AR-mallin kertoimet ovat hyvin lähellä osittaisiautokorrelaatiolukuja.

R-koodi ei- stationaariselle aikasarjalle:

set.seed(1)                                                    #set.seed(1):lla saat samat tulokset kuin tässä
x <- w <- rnorm(500)
for (t in 2:500) x[t]<-x[t-1]+w[t]                 # Tehdään random walk-aikasarja
par(mfrow=c(2,1))                                       #saadaan kaksi kuvaa samaan ruutuun
plot(x,type="l")
Pacf(x,lag.max=3)

Pacf(x,plot=FALSE,lag.max=3)                #saadaan tulostettua arvot kolmelle viiveelle.
Kuva (ylempi) ei-stationaarinen aikasarja. Kuva (alempi) Osittaisautokorrelaatio

Partial autocorrelations of series ‘x’, by lag

     1        2          3
 0.972     0.009   -0.023

Yllä osittaisautokorrelaatioluvut. Nyt lasken R:n Arima-funktiota käyttäen vastaaville viiveille arviot, eli teen AR-mallit 1.viiveelle, 2.viiveelle ja 3.viiveelle.
R-koodi:

Arima(x,order=c(1,0,0))                                       #Saadaan 1.viiveen osittaisautokorrelaatio
Arima(x,order=c(2,0,0))                                       #Saadaan 2.viiveen osittaisautokorrelaatio
Arima(x,order=c(3,0,0))                                       #Saadaan 3. viiveen osittaisautokorrelaatio

Näin saadut osittaisautokorrelaatiot ovat

1          2           3
0.979   0.013   -0.007

Näemme, etteivät arviot ole kovin lähellä toisiaan.

Nyt muodostan stationaarisen aikasarjan ja teen samat toiminnot kuin ei-stationaariselle, eli kuva aikasarjasta ja osittaisautokorrelaatiosta sekä osittaisautokorrelaatioluvut.
R-koodi:

set.seed(1)
w<-rnorm(500)
par(mfrow=c(2,1))
plot(w,type="l")
Pacf(w,lag.max=3)
Pacf(w,plot=FALSE,lag.max=3)

Kuva (ylempi) stationaarinen aikasarja. Kuva (alempi) Osittaisautokorrelaatio

Saadut osittaisautokorrelaatioluvut ovat:

     1         2           3
-0.027    -0.004   -0.040                                                              

Nyt muodostan Arima-funktiota käyttäen AR-mallit, kuten aiemmin. 
R-koodi:

Arima(x,order=c(1,0,0))
Arima(x,order=c(2,0,0))
Arima(x,order=c(3,0,0))

Nyt saadut osittaisautokorrelaatioluvut ovat:

1            2             3
-0.027  -0.004     -0,040

Luvut ovat siis pyöristettyinä samat. Stationaarisessa aikasarjassa osittaisautokorrelaatiot ovat siis lähelle AR-mallin ennustamia, mutta eivät aivan samoja. Esim. 5.viiveelle lasketut arvot ovat 0.022 (Pacf) ja 0.026 (AR(5)). Intuitiivisesti osittaisautokorrelaation voi kuitenkin ymmärtää juuri AR-mallin tavoin. Ajatellaan esimerkiksi kahden mallin eroa, kun haluamme laskea 2.viiveen autokorrelaation. 1. malli: y(t)=y(t-2) ja 2. malli y(t)=y(t-1)+y(t-2)

1.mallissa emme ota huomioon 1.viiveen vaikutusta, kun taas toisessa otamme. Koska haluamme tietää vain 2.viiveen vaikutuksen y(t):hen, pitää y(t-1) ottaa mukaan, jotta sen vaikutus saadaan myös huomioitua.
























Kirjoittaja on rekrytointisivusto: www.dataverkosto.com perustaja. 

Ei kommentteja:

Lähetä kommentti