Tietokoneharjoitus 5

Tutkitaan aikasarjaa SP500 osakeindeksin päivittäisistä päätoskursseista ajalta 1950-01-03 -- 2014-08-28.

Tehtävä 5

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")

Tehtävä 5

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)