6. Tietokoneharjoitukset 6.1 Tiedostossa Const.txt on eräällä Yhdysvaltalaisella asuinalueella aloitettujen rakennusurakoiden määrä kuukausittain, aikavälillä 1966-1974. Urakoiden määrä on skaalattu asuinalueen asukasmäärällä. (a) Visualisoi aineisto. Näyttääkö aikasarja stationaariselta? Mihin komponentteihin aikasarjan voisi yrittää jakaa? (b) Tee aikasarjalle ositus funktion stl avulla. Toisin sanoen jaa aikasarja trendi-, kausija satunnaiskomponentteihin. (c) Käytä seuraavaa suodatinta trendin estimoimiseen: y t = 1 24 (x t 6 + 2x t 5 + 2x t 4 +... + 2x t +... + 2x t+4 + 2x t+5 + x t+6 ). Piirrä saatu estimaatti, funktion stl antama estimaatti ja alkuperäinen aikasarja samaan kuvaan. Miten trendin estimaatit eroavat toisistaan? (d) Poista aikasarjasta trendi ja kausivaihtelu differenssien avulla. Tee saadulle aikasarjalle ositus funktion stl avulla. Ratkaisu. (a) Kuvan 2 perusteella aikasarja ei näytä stationaariselta. Yritetään jakaa aikasarja trendikomponenttiin (m t ), kausikomponenttiin (s t ) ja satunnaiskomponenttiin (e t ): x t = m t + s t + e t, missä m t = β 0 + β 1 t +... + β k t k on jokin polynomi astetta k. (b) Ositus saadaan komennoilla: CONST<- read.table("const.txt",header=t,sep=",",row.names=1) const <- ts(const,start=1966, frequency=12) const.stl <- stl(const[,1], s.window="periodic") # s.window-parametrin avulla voidaan määrät kausivaihtelun # estimoimiseen käyettyä menetelmää plot(const.stl) 1 / 7
remainder 20 10 0 10 20 trend 100 140 180 seasonal data 50 100 150 200 40 20 0 10 20 30 1966 1968 1970 1972 1974 time Kuva 1: Aikasarja Const jaettuna komponentteihin. (c) Suodatin saadaan kätevästi funktion filter avulla. Kuvasta 2 nähdään että funktion stl estimoima trendi on lähes identtinen suhteessa tehtävän suodattimeen. Suodattimen estimaatti on kuitenkin hieman vähemmän sileä suhteessa funktioon stl, joka nähdään kuvaa suurentamalla. const.filt <- filter(const, c(1,rep(2,11),1)/24 ) trend <- const.stl$time.series[,2] plot(const,lty=3) lines(trend, col="blue") lines(const.filt, lty=2, col="red") legend("topleft", legend=c("time series","filter","stl"), col=c(1,"red","blue"), lty=c(3,2,1)) 2 / 7
Time series Filter STL 50 100 150 200 1966 1968 1970 1972 1974 Time Kuva 2: Alkuperäinen aikasarja harmaalla, stl funktion estimoima trendi sinisellä ja tehtävän suodattimen estimaatti punaisella. (d) Lasketaan differenssi DD 12 ja katsotaan miltä ositus näyttää. Kuvan 3 ylimmän kuvan ja Kuvan 4 perusteella aikasarja näyttää stationaariselta. Osituksessa sovitetaan ensin kausikomponentti ja jäljelle jääneestä komponentista estimoidaan trendi. Tästä syystä, trendi ei näytä kovin sileältä. const.diff <- diff(diff(const, lag=12)) const.diff.stl <- stl(const.diff[,1], s.window="periodic") plot(const.diff.stl) 3 / 7
remainder 40 20 0 20 trend 5 0 5 seasonal 3 2 1 0 1 2 3 data 40 20 0 20 1968 1970 1972 1974 time Kuva 3: Aikasarja DD 12 Const jaettuna komponentteihin. Time series STL 40 20 0 20 1968 1970 1972 1974 Time Kuva 4: DD 12 Const harmaalla ja stl funktion estimoima trendi sinisellä. 4 / 7
6.2 Tiedostossa Alkokuolema.txt on alkoholiin liittyvien kuolemien määrä vuosittain Suomessa per 100 000 henkilöä ikäluokalle 40-49 vuotiaat. Aineisto on kerätty vuosilta 1969-2007. Vastaava aineisto löytyy myös Suomen Tilastokeskuksen sivulta. Oletetaan että havainnoille y 1,... y n pätee y t N(µ t, σ 2 w), kaikille t = 1,..., n, missä µ t on satunnaiskävely trendillä muotoa µ t+1 = µ t + ν + ε t, ja ε t N(0, σ 2 ε). Oletetaan että alkutilasta µ 1 ja kulmakertoimesta ν ei tiedetä mitään. Estimoi parametri ν Kalman suodattimen avulla ja ennusta aikasarjaa yksi vuosi eteenpäin. Ratkaisu. Dynaamisen systeemin tila-avaruusesitys on: x t+1 = F x t + Rε t+1, y t = H T x t + w t, missä ylempää yhtälöä kutsutaan tilayhtälöksi ja alempaa havaintoyhtälöksi. Vektori y t sisältää havainnot ajanhetkellä t ja vektori x t on yleensä havaitsematon tilamuuttuja. Matriisi F on tilansiirtomatriisi ajanhetkien t ja t+1 välillä ja ε t+1 on kyseisen tilansiirron satunnainen komponentti. Matriisi H kuvaa havaintovektorin ja tilavektorin välistä yhteyttä ajanhetkellä t ja w t on kyseisen ajanhetken mittausvirhe. Esitystä kutsutaan Gaussiseksi tila-avaruusesitykseksi, kun oletetaan että ε t N(0, T ), w t N(0, Q) ja x 1 N(0, P 1 ). siten että ε t, w s ja x 1 ovat pareittain riippumattomia toisistaan kaikilla ajanhetkillä t ja s. Tehtävässä Gaussinen tila-avaruusesitys on muotoa ( ) ( ) ( ) ( ) µt+1 1 1 µt 1 x t+1 = = + ε ν t+1 0 1 ν t 0 t y t = ( 1 0 ) x t + w t = ( 1 0 ) ( ) µ t + w ν t, t missä ε t N(0, σ 2 ε) ja w t N(0, σ 2 w) ja x 1 = ( µ 1 ν 1 ) T N(0, P1 ). Paketin KFAS käyttämät merkinnät poikkeavat hieman tällä kurssilla käytetyistä. Lisäksi matriisi P 1 määritellään kahdessa osassa. Asettamalla parametrin P 1 nollamatriisiksi ja P identiteettimatriisiksi, vastaa alkuarvausta että kovarianssimatriisi on identiteettimatriisi. Alla määritelty tarvittavat matriisit mallia varten ja suoritettu estimoiminen. install.packages("kfas") library(kfas) alko <-ts(read.table("alkokuolema.txt"),start=1969) 5 / 7
Zt <- matrix(c(1, 0), 1, 2) #Vastaa vektorin H transpoosia Ht <- matrix(na) #Vastaa w_t varianssia Tt <- matrix(c(1, 0, 1, 1), 2, 2) #Vastaa matriisia F Rt <- matrix(c(1, 0), 2, 1) Qt <- matrix(na) #Vastaa epsilon_t varianssia P1 <- matrix(0, 2, 2) P1inf <- diag(2) # -1 kaavassa määrää että mallissa ei estimoida vakiota, model_gaussian <- SSModel(alko~-1+SSMcustom(Z = Zt, T=Tt, R = Rt, Q=Qt, P1=P1, P1inf=P1inf), H=Ht) fit_gaussian <- fitssm(model_gaussian, inits = c(0, 0)) fit_gaussian$model$q # muuttujan epsilon_t varianssin SU-estimaatti fit_gaussian$model$h # muuttujan w_t varianssin SU-estimaatti out_gaussian <- KFS(fit_gaussian$model) plot(alko) lines(out_gaussian$a[,1],col="red") Täten suurimman uskottavuuden estimaateiksi saadaan 9.5 varianssille σ 2 w ja 4.3 varianssille σ 2 ε. Parametrin ν estimaatiksi saadaan 0.84. Huomaa että vaikka mallissa ν on oletettu vakioksi (tilayhtälön alempi rivi), se estimoidaan uudestaan jokaiselle ajanhetkelle. Parametrin estimaatit eri ajanhetkinä saadaan komennolla: out_gaussian$a[,2] Kuvaan 5 on piirretty Kalman suodattimen yhden askeleen ennusteet, ja kuvasta nähdään myös vuoden 2008 ennuste. Huomaa että monen askeleen ennusteet Kalman suodattimella tuottavat yleensä suhteellisen leveät luottamusvälit eli toisin sanoen epäluotettavat pitkän aikavälin ennusteet. Lisää Kalman suodattimista kurssilla MS-E2129 - Systeemien identifiointi. 6.3 Anna kurssipalautetta! Etsi sähköpostistasi kurssin palautekysely ja anna palautetta kurssista. Palautetta hyödynnetään kaikkien tilastotieteen ja stokastiikan kurssien kehittämisessä. 6 / 7
x 20 30 40 50 60 1970 1980 1990 2000 Time Kuva 5: Alkuperäinen aikasarja mustalla ja yhden askeleen ennusteet punaisella. 7 / 7