- あなたは以下の条件に従う場合に限り、自由に
- 共有 – 本作品を複製、頒布、展示、実演できます。
- 再構成 – 二次的著作物を作成できます。
- あなたの従うべき条件は以下の通りです。
- 表示 – あなたは適切なクレジットを表示し、ライセンスへのリンクを提供し、変更があったらその旨を示さなければなりません。これらは合理的であればどのような方法で行っても構いませんが、許諾者があなたやあなたの利用行為を支持していると示唆するような方法は除きます。
- 継承 – もしあなたがこの作品をリミックスしたり、改変したり、加工した場合には、あなたはあなたの貢献部分を元の作品とこれと同一または互換性があるライセンスの下に頒布しなければなりません。
https://creativecommons.org/licenses/by-sa/2.5CC BY-SA 2.5 Creative Commons Attribution-Share Alike 2.5 truetrue
R-source:
## einfachstes bsp, yields in Vasicek, Notation wie Brigo/Mercurio
#übernimmt log(z) als Parameter (nichtnegativ)
yvas<-function(ttm,para,rt) {
lambda=exp(para$lambda)
theta=exp(para$theta)
sigma2=(exp(para$sigma))^2
B=1/lambda*(1-exp(-lambda*ttm))
lnA=(theta-sigma2/(2*lambda^2))*(B-ttm)-sigma2/(4*lambda)*B^2
return( -(lnA-B*rt)/ttm )
}
### OU-levy processes ################################
## starting at time t=0 at Z_0=para$r until time t=T in "steps" equidistant steps; mean reversion "mr"
## parameters of the distribution of the bdlp are stored in param
process.ou<-function(para,type,T=1,steps=500) {
dt=T/(steps-1)
ou=array(para$r,dim=steps)
if (type=="cauchy") {
dLt=rcauchy(steps-1, location=para$location, scale=para$scale*dt)
} else if (type=="gamma") {
dLt=rgamma(n=steps-1, shape=para$shape, scale=para$scale*dt)
} else if (type=="IG") {
dLt=rinvGauss(n=steps-1, nu=(para$delta*dt)/para$gamma, lambda=(para$delta*dt)^2)
} else if (type=="norm") {
dLt=rnorm(n=steps-1, mean=para$lambda*para$theta*dt, sd=para$sigma*dt)
} else {
print("process.ou:: this type of OU-process is not yet implemented")
}
for (tm in 1:(steps-1)) {
ou[tm+1]=ou[tm]-para$lambda*ou[tm]*dt+dLt[tm]
}
return (ou)
}
set.seed(28019180)
time=seq(0,14,length=700)
pa=list(lambda=2,theta=0.04,sigma=0.2,r=0.08)
lpa=list(lambda=log(pa$lambda),theta=log(pa$theta),sigma=log(pa$sigma)) #log-parameter
gou=process.ou(pa,"norm",T=14,steps=length(time))
plot(time,gou,type="l",lwd=2,axes=F,xlab="Zeit",ylab="Zins",main="Zinsen im Vasicek-Modell",cex.main=2)
abline(h=pa$theta-pa$sigma^2/(2*pa$lambda^2),lty="dotted",col="grey")
lines(time,yvas(time,lpa,pa$r),col="purple",lwd=2)
yticks=axTicks(2)
axis(1)
axis(side=2,at=yticks,labels=paste(format(100*yticks,digits=3),"%",sep=""))
text(x=10.4,y=0.0325,expression(paste("d",r[t]==2(0.04-r[t]),"dt+",0.2,r[t],"d", W[t])),cex=1.4)