我想使用Nelson-Siegel模型插值收益率曲线。我是R语言的新手但决定使用“收益率曲线”包(此处http://cran.r-project.org/web/packages/YieldCurve/index.html和文档链接:http://cran.r-project.org/web/packages/YieldCurve/YieldCurve.pdf)我遇到了2个问题:
1)我不明白为什么以下代码的第6和第7行中的NSrates的前2个参数(文档中的第6页)采用了这种格式:
data(FedYieldCurve)
tau <- c(3, 6, 12, 60, 84, 120)
mediumTerm <- c(12,60,84)
NSParameters <- Nelson.Siegel(rate=FedYieldCurve[1:10,],
maturity=tau, MidTau=mediumTerm )
y <- NSrates(NSParameters[5,1:3],
NSParameters$lambda[5],tau)
plot(tau,FedYieldCurve[5,],main="Fitting Nelson-Siegel yield curve", type="o")
lines(tau,y, col=2)
legend("topleft",legend=c("observed yield curve","fitted yield curve"),
col=c(1,2),lty=1)
grid()
2)如何从曲线中提取一定的产量?例如,如果我的期限为12个月,那么它的相关收益率是多少?。
非常感谢你花时间回答我的问题。
答案 0 :(得分:4)
查看NSrates
的帮助页面。
需要3个参数:
betaCoeff:β系数的向量或矩阵。
lambdat:估计的lambda的值
到期日:收益率曲线的成熟度,希望返回利率。
对于betaCeff
,您展示的代码使用NSParameters[5, 1:3]
或
beta_0 beta_1 beta_2
5 13.7156 -1.468064 1.237194
是data.frame
。虽然data.frame
未明确声明为可能的输入,但函数的第一行将其转换为matrix
(假设您使用的是CRAN版本)
if(is.vector(betaCoeff)) betaCoeff <- matrix( betaCoeff, 1, 3)
对于lambdat
,您展示的代码使用NSParameters$lambda[5]
,这是用于估算的lambda的numeric
值。
最后一个论点是maturity
。您展示的代码使用的是tau
> tau
[1] 3 6 12 60 84 120
根据文档,该函数将
返回矩阵对象的利率,行数等于nrow(betaCoeff),列数等于length(成熟度)。
在这种情况下,你得到
> y
3 6 12 60 84 120
[1,] 12.7394 13.05852 13.40245 13.6897 13.69721 13.70273
如果您只想要12个月maturity
,则只将12
传递给maturity
参数。
> NSrates(NSParameters[5,1:3], NSParameters$lambda[5], 12)
12
[1,] 13.40245