【问题标题】:CIR model estimation through MLE通过 MLE 进行 CIR 模型估计
【发布时间】:2013-04-15 11:58:35
【问题描述】:

我想通过 R 中的 ML 来估计 CIR 模型参数。如下所示:

dr=(theta1-theta2*r) + theta3*sqrt(r)*dW。

该方法在 Iacus 的书“Option Pricing and Estimation of Financial Models with R”附带的 sde 包中实现。

在示例 (ch 5) 中,实现了速率估计并计算了系数 theta1-3。 现在我想用我的数据集 (X2) 做同样的事情。

library(quantmod)

library(sde)
library(Ecdat)
data(Irates)
X1=Irates[,"r1"]
getSymbols(Symbols="DTB4WK",src="FRED")
X2=interpNA(coredata(DTB4WK))
X2[X2<0]=0

X=X2
CIR.logistic = function(theta1, theta2,theta3) {
  n=length(X)
  dt=deltat(X)
  cat(theta1,"  ",theta2, "  ",theta3,"  \n")
  return(-sum(dcCIR(x=X[2:n],Dt=dt,x0=X[1:(n-1)], theta=c(theta1,theta2,theta3),log=TRUE)))
}
mle(CIR.logistic,start=list(theta1=0.1, theta2=0.1,theta3=0.1),method='L-BFGS-B',
    lower=c(0.01,0.01,0.01),upper=c(1,1,1))

我将非常感谢任何帮助!

【问题讨论】:

    标签: r estimation stochastic-process


    【解决方案1】:

    在 CIR 模型中,比率几乎肯定是非零:去除负值是不够的。

    # Also remove zeroes (if there are many of them, it is probably not a good idea)
    X[ X <= 0 ] <- .1
    
    # Then, you code works
    mle( CIR.logistic,
         start = list(theta1=0.1, theta2=0.1, theta3=0.1),
         method = 'L-BFGS-B',
         lower = c(0.01,0.01,0.01),
         upper = c(1,1,1) )
    

    【讨论】:

    • 感谢您的回复!但是对于我想用于 CIR 估计 (X2) 的数据,估计的行为很奇怪。如果一个变化的上限,估计也不同。但是使用 X1,它们保持稳定。在实践中用于 CIR 或 CKLS 估计的方法是什么?谢谢
    • 如果您查看数据,您会看到两种截然不同的情况:如果您更改估计期,您应该预期(不可靠的估计和)不稳定。您应该将危机前和危机后的时期分开。此外,解决方案位于您的约束定义的域的边界上,如果您放松它们,似乎会收敛到(infinity,infinity,0):如果在缩小估计期后这种情况仍然存在,则数据无法通过 CIR 模型建模,并且您应该尝试其他型号。
    • 确实,这个危机时期带来了如此多的干扰。我已经将数据分为两个(危机前和危机后),并且还排除了大幅下降的部分,然后当一个采用 400-600-1000 obs-ns 的不同窗口时估计是相似的。谢谢!
    猜你喜欢
    • 2021-06-20
    • 2016-01-23
    • 1970-01-01
    • 1970-01-01
    • 2021-12-11
    • 2019-03-14
    • 1970-01-01
    • 1970-01-01
    • 2021-10-21
    相关资源
    最近更新 更多