<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>利率模型 on 格物堂</title><link>https://gewutang.cn/tags/%E5%88%A9%E7%8E%87%E6%A8%A1%E5%9E%8B/</link><description>Recent content in 利率模型 on 格物堂</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><lastBuildDate>Sun, 10 Apr 2011 00:00:00 +0000</lastBuildDate><atom:link href="https://gewutang.cn/tags/%E5%88%A9%E7%8E%87%E6%A8%A1%E5%9E%8B/index.xml" rel="self" type="application/rss+xml"/><item><title>用R拟合Vasicek模型</title><link>https://gewutang.cn/2011/04/10/use-r-to-fit-vasicek-model/</link><pubDate>Sun, 10 Apr 2011 00:00:00 +0000</pubDate><guid>https://gewutang.cn/2011/04/10/use-r-to-fit-vasicek-model/</guid><description>&lt;p&gt;Vasicek模型几乎可以说是最常见的利率模型。在金融领域有着很大的用处，可以用R来做Vasicek模型的人显然不够多。&lt;/p&gt;&#10;&lt;p&gt;这里给出一个拟合Vasicek模型的代码：&lt;/p&gt;&#10;&lt;pre&gt;&lt;code class="language-r"&gt;#Vasicek negloglike函数:&#10;VASICEKnegloglike&amp;lt;-function(param,data,times){ n.obs&amp;lt;-length(data)&#10; dum&amp;lt;-sort.list(times)&#10; data&amp;lt;-data[dum]&#10; times&amp;lt;-times[dum]&#10; delta&amp;lt;-diff(times,1)&#10; mv&amp;lt;-data[1:(n.obs-1)]*exp(-param[2]*delta)+param[1]*(1-exp(-param[2]*delta))&#10; variance&amp;lt;-param[3]^2*(1-exp(-2*param[2]*delta))/(2*param[2])&#10; VASICEKnegloglike&amp;lt;--sum(log(dnorm(data[2:n.obs],mv,sqrt(variance))))/n.obs&#10;}&#10;&#10;# VASICEKyield函数&#10;VASICEKyield&amp;lt;-function(r,tau,Pparam,riskpremium=0)&#10;{ b&amp;lt;-Pparam[1]+riskpremium&#10; a&amp;lt;-Pparam[2]&#10; sig&amp;lt;-Pparam[3]&#10; Btau&amp;lt;-(1-exp(-a*tau))/a&#10; Atau&amp;lt;-((Btau-tau)*(a^2*b-0.5*sig^2)/a^2 - sig^2*Btau^2/(4*a))&#10; VASICEKyield&amp;lt;-r*Btau/tau-Atau/tau&#10;}&#10;&#10;# 数据实例&#10;maturities&amp;lt;-c(0.25,0.5,1,2,5,10)&#10;spliceddata&amp;lt;-matrix(scan(&amp;quot;http://www.math.ku.dk/~rolf/teaching/mfe04/USrates.52to04.dat&amp;quot;),byrow=T,ncol=7)&#10;obs&amp;lt;-spliceddata[,2]&#10;N&amp;lt;-length(obs)-1&#10;dt&amp;lt;-1/12&#10;data&amp;lt;-obs[2:(N+1)]&#10;lagdata&amp;lt;-obs[1:N]&#10;dates&amp;lt;-spliceddata[,1]&#10;&#10;#Closed form estimators&#10;bhat&amp;lt;-(sum(data*lagdata) - sum(data)*sum(lagdata)/N)/(sum(lagdata*lagdata) - sum(lagdata)*sum(lagdata)/N)&#10;kappahat&amp;lt;--log(bhat)/dt&#10;ahat&amp;lt;-sum(data)/N-bhat*sum(lagdata)/N&#10;thetahat&amp;lt;-ahat/(1-bhat)&#10;s2hat&amp;lt;-sum((data-lagdata*bhat-ahat)^2)/N&#10;sigmahat&amp;lt;-sqrt(2*kappahat*s2hat/(1-bhat^2))&#10;#plot the data (or more accurately, the short rate)&#10;plot(dates[2:(N+1)],data,type='l', xlab=&amp;quot;date&amp;quot;, ylab=&amp;quot;US 3M rate&amp;quot;, main=&amp;quot;US short rate 1952-2004&amp;quot;)&#10;abline(h=thetahat, lty=3)&#10;text(dates[10], thetahat, &amp;quot;thetahat&amp;quot;)&#10;&#10;tstVAS&amp;lt;-optim(par=c(thetahat,kappahat,sigmahat),&#10; fn=VASICEKnegloglike,method = &amp;quot;BFGS&amp;quot;, data=obs,times=dates)&#10;#analyze average yield curves&#10;meanyield&amp;lt;-2:7&#10;for(i in 1:6) meanyield[i]&amp;lt;-mean(spliceddata[,i+1])&#10;plot(maturities,meanyield,type='l',ylim=c(0.05,0.068),xlim=c(0,14),&#10; ylab=&amp;quot;mean/average/typical yield&amp;quot;,&#10;&#9; main=&amp;quot;Typical yield curves w/ US 1952-2004 data&amp;quot;)&#10;text(maturities[6],meanyield[6], &amp;quot;Average observed yield curve&amp;quot;)&#10;points(maturities,VASICEKyield(meanyield[1],maturities,tstVAS$par,riskpremium=0),type='l',lty=2)&#10;text(maturities[6],VASICEKyield(meanyield[1],maturities[6],tstVAS$par,riskpremium=0)+0.001,&#10; &amp;quot;Typical Vasicek model curve, I (r0 = avr. short rate, risk premium=0) &amp;quot;)&#10;points(maturities,VASICEKyield(thetahat,maturities,tstVAS$par,riskpremium=0),type='l',lty=2)&#10;text(maturities[6],VASICEKyield(thetahat,maturities[6],tstVAS$par,riskpremium=0)-0.0005,&amp;quot;Typical Vasicek model curve, II (r0 = thetahat, risk premium=0) &amp;quot;)&#10;&#10;rpfit&amp;lt;-function(rp){&#10;rpfit&amp;lt;-sum(abs(meanyield-VASICEKyield(meanyield[1],maturities,tstVAS$par,riskpremium=rp)))&#10;}&#10;&#10;rp&amp;lt;-optim(par=c(0),fn=rpfit,method = &amp;quot;BFGS&amp;quot;)$par&#10;&#10;theory&amp;lt;-VASICEKyield(meanyield[1],maturities,tstVAS$par,riskpremium=rp)&#10;points(maturities,theory,type='l',lty=2)&#10;&#10;text(maturities[6],theory[6],&amp;quot;Typical Vasicek model curve, III (r0=avr. short rate, risk premium='what fits best') &amp;quot;)&#10;&#10;plot(maturities,spliceddata[(N+1),2:7],type='l',ylab=&amp;quot;yield&amp;quot;,ylim=c(0.01,0.06),xlim=c(0,13), main=&amp;quot;On the last day in the sample&amp;quot;)&#10;&#10;text(maturities[6],spliceddata[(N+1),7], &amp;quot;Observed yield curve&amp;quot;)&#10;&#10;points(maturities,VASICEKyield(spliceddata[(N+1),3],maturities,tstVAS$par,riskpremium=rp),type='l',lty=2)&#10;&#10;text(maturities[6],VASICEKyield(spliceddata[(N+1),3],maturities[6],tstVAS$par,riskpremium=rp),&amp;quot;Vasicek model 'prediction' (w/ all the estimates) &amp;quot;)&#10;&lt;/code&gt;&lt;/pre&gt;&#10;</description></item></channel></rss>