Tutkitaan aikasarjaa SP500 osakeindeksin päivittäisistä päätoskursseista ajalta 1950-01-03 -- 2014-08-28.
Lue data R:ään ja muuta hintojen aikasarja tuottojen aikasarjaksi.
file<-"http://cc.oulu.fi/~jklemela/marketrisk/sp500.csv" data<-read.csv(file=file) sp500<-data[,7] sp500<-sp500[length(sp500):1] plot(sp500,type="l") pituus<-length(sp500) tuotto<-log(sp500[2:pituus])-log(sp500[1:(pituus-1)]) plot(tuotto,type="l")
Laske autokorrelaatiofunktio, laske tuottojen itseisarvojen autokorrelaatiofunktio ja vertaa tuottojen aikasarjaa simuloituihin aikasarjoihin. Piirretaan myos QQ-kuvio.
# (a) Laske autokorrelaatiofunktio tuottojen aikasarjalle. tuotto.sp500<-tuotto acf(tuotto.sp500) n<-length(tuotto.sp500) k<-20 cors<-matrix(0,k,1) for (i in 1:k){ x<-tuotto.sp500[1:(n-i)] y<-tuotto.sp500[(1+i):n] cors[i]<-cor(x,y) } cors plot(cors) a<-n^(-1/2)*1.96 # qnorm(0.975) segments(0,a,k,a,col="red") segments(0,-a,k,-a,col="red") # (b) Laske autokorrelaatiofunktio tuottojen itseisarvojen aikasarjalle. acf(abs(tuotto.sp500)) n<-length(tuotto.sp500) k<-20 cors<-matrix(0,k,1) for (i in 1:k){ x<-abs(tuotto.sp500[1:(n-i)]) y<-abs(tuotto.sp500[(1+i):n]) cors[i]<-cor(x,y) } cors plot(cors,ylim=c(0,max(cors))) a<-n^(-1/2)*1.96 # qnorm(0.975) segments(0,a,k,a,col="red") segments(0,-a,k,-a,col="red") # (c) vertaa tuottojen aikasarjaa simuloituihin aikasarjoihin plot(tuotto,type="l") # simuloi i.i.d. N(0,1)-mallia n<-length(tuotto.sp500) mu<-mean(tuotto.sp500) sigma<-sd(tuotto.sp500) set.seed(1) sim.n<-mu+sigma*rnorm(n) plot(sim.n,type="l") qqplot(tuotto.sp500,sim.n) # simuloi i.i.d. t-jakauma-mallia n<-length(tuotto.sp500) set.seed(1) df<-4 sim.t<-rt(n,df=df) sigt<-sd(sim.t) sim.t<-mu+sigma*sim.t/sigt plot(sim.t,type="l") qqplot(tuotto.sp500,sim.t) # simuloi GARCH(1,1)-mallia library(tseries) ga<-garch(tuotto) ga$coef # a0 a1 b1 #7.787275e-07 7.924462e-02 9.144183e-01 alpha0<-as.double(ga$coef[1]) alpha1<-as.double(ga$coef[2]) beta<-as.double(ga$coef[3]) n<-length(tuotto.sp500) #n<-1000 set.seed(3) x<-matrix(0,n,1) sigma.prev<-sd(tuotto) for (t in 2:n){ sigma<-sqrt(alpha0+alpha1*x[t-1]^2+beta*sigma.prev^2) z<-rnorm(1) x[t]<-sigma*z sigma.prev<-sigma } plot(x,type="l") qqplot(tuotto.sp500,x)