Tutkitaan vektoriaikasarjaa SP500 ja Nasdaq-100 osakeindeksien paivittaisist paatoskursseista ajalta 1985-10-01 - 2012-11-16.
Lue data R:ään ja muuta hintojen aikasarja tuottojen aikasarjaksi.
file<-"http://cc.oulu.fi/~jklemela/marketrisk/sp500-ndx100.txt" data<-read.table(file=file,header=TRUE) sp500<-data[,1] ndx100<-data[,2] pituus<-length(sp500) tuotto.sp500<-log(sp500[2:pituus])-log(sp500[1:(pituus-1)]) plot(tuotto.sp500,type="l") tuotto.ndx100<-log(ndx100[2:pituus])-log(ndx100[1:(pituus-1)]) plot(tuotto.ndx100,type="l") # yksiulotteinen menetelma ############# st1<-sp500[pituus] st2<-ndx100[pituus] lambda1<-10 lambda2<-5 losses<--(lambda1*st1*tuotto.sp500+lambda2*st2*tuotto.ndx100) mu<-mean(losses) sigma<-sd(losses) alpha<-0.95 VaR<-mu+sigma*qnorm(alpha) VaR # [1] 595.8292 # moniulotteinen menetelma ############### Mu<-matrix(0,2,1) Mu[1,1]<-mean(tuotto.sp500) Mu[2,1]<-mean(tuotto.ndx100) Sigma<-matrix(0,2,2) Sigma[1,1]<-var(tuotto.sp500) Sigma[2,2]<-var(tuotto.ndx100) Sigma[1,2]<-cov(tuotto.sp500,tuotto.ndx100) Sigma[2,1]<-Sigma[1,2] vec<-matrix(0,2,1) vec[1,1]<--lambda1*st1 vec[2,1]<--lambda2*st2 mub<-t(vec)%*%Mu sigmab<-sqrt(t(vec)%*%Sigma%*%vec) VaR2<-mub+sigmab*qnorm(alpha) VaR2 # [1,] 595.8292 # 1) yksiulotteisessa menetelmassa estimointi pitaa tehda aina uudestaan # kun painoja muutetaan # 2) moniulotteinen mentelma mahdollistaa monipuolisemman mallintamisen # mutta VaR voi olla vaikeampi laskea
n<-length(tuotto.sp500) or<-order(tuotto.sp500) mones<-matrix(0,n,1) for (i in 1:n) mones[or[i]]<-i cop.sp500<-mones/(n+1) or<-order(tuotto.ndx100) mones<-matrix(0,n,1) for (i in 1:n) mones[or[i]]<-i cop.ndx100<-mones/(n+1) plot(cop.sp500,cop.ndx100) cop.sp500.2<-qnorm(cop.sp500) cop.ndx100.2<-qnorm(cop.ndx100) plot(cop.sp500.2,cop.ndx100.2)
# vasen hanta, SP500 R<-tuotto.sp500 Y<-sort(R) N<-1000 alpha<-matrix(0,N-1,1) summa<-matrix(0,N,1) sum<-0 for (i in 1:N){ sum<-sum+log(-Y[i]) summa[i]<-sum } for (i in 2:N) alpha[i-1]<-i/(summa[i]-i*log(-Y[i])) plot(alpha,type="l",xlab="N(c)",ylab="alpha") # vasen hanta, Nasdaq-100 R<-tuotto.ndx100 Y<-sort(R) N<-1000 alpha<-matrix(0,N-1,1) zumma<-matrix(0,N,1) zum<-0 for (i in 1:N){ zum<-zum+log(-Y[i]) zumma[i]<-zum } for (i in 2:N) alpha[i-1]<-i/(zumma[i]-i*log(-Y[i])) plot(alpha,type="l",xlab="N(c)",ylab="alpha") # oikea hanta, SP500 R<-tuotto.sp500 Y<-sort(R,decreasing=TRUE) N<-1000 alpha<-matrix(0,N-1,1) summa<-matrix(0,N,1) sum<-0 for (i in 1:N){ sum<-sum+log(Y[i]) summa[i]<-sum } for (i in 2:N) alpha[i-1]<-i/(summa[i]-i*log(Y[i])) plot(alpha,type="l",xlab="N(c)",ylab="alpha") plot(alpha[10:length(alpha)],type="l",xlab="N(c)",ylab="alpha") # oikea hanta, Nasdaq-100 R<-tuotto.ndx100 Y<-sort(R,decreasing=TRUE) N<-1000 alpha<-matrix(0,N-1,1) zumma<-matrix(0,N,1) zum<-0 for (i in 1:N){ zum<-zum+log(Y[i]) zumma[i]<-zum } for (i in 2:N) alpha[i-1]<-i/(zumma[i]-i*log(Y[i])) plot(alpha,type="l",xlab="N(c)",ylab="alpha") plot(alpha[20:length(alpha)],type="l",xlab="N(c)",ylab="alpha")