【问题标题】:How to estimate static yield curve with 'termstrc' package in R?如何使用 R 中的“termstrc”包估计静态收益率曲线?
【发布时间】:2016-10-13 18:23:27
【问题描述】:

我正在尝试使用 R 中的 termstrc 包估计巴西的静态收益率曲线。我正在使用函数 estim_nss.couponbonds 并设置 0% 的票面利率和 0 美元的现金流,除了最后一个是 1000 美元(到期时的面值)——据我所知,这是执行此操作的函数,因为 estim_nss.zeroyields 仅计算动态曲线。问题是我收到以下错误消息:

“(pos_cf[i] + 1) 中的错误:pos_cf[i + 1]:NA/NaN 参数另外:警告消息:在 max(n_of_cf) 中:max 没有非缺失参数;返回-Inf "

我尝试使用trace(estim_nss.couponbons, edit=T) 跟踪问题,但找不到pos_cf[i]+1 的计算位置。根据名称,我认为它可能来自postpro_bondfunction 并使用了trace(postpro_bond, edit=T),但我再也找不到计算了。我相信“cf”来自现金流,所以在计算现金流时可能会出现一些问题。我用create_cashflows_matrix 来测试这个理论,但效果很好,所以我不确定问题出在现金流上。

代码是:

#Creating the 'couponbond' class
ISIN <- as.character(c('ltn_2017','ltn_2018', 'ltn_2019', 'ltn_2021','ltn_2023')) #Bond's identification

MATURITYDATE <- as.Date(c(42736, 43101, 43466,  44197,  44927), origin='1899-12-30') #Dates are in system's format

ISSUEDATE <- as.Date(c(41288,41666,42395, 42073, 42395), origin='1899-12-30') #Dates are in system's format

COUPONRATE <- rep(0,5) #Coupon rates are 0 because these are zero-coupon bonds

PRICE <- c(969.32,  867.77, 782.48, 628.43, 501.95) #Prices seen 'TODAY'

ACCRUED <- rep(0.1,5) #There is no accrued interest in the brazilian bond's market

#Creating the cashflows sublist
CFISIN <- as.character(c('ltn_2017','ltn_2018', 'ltn_2019', 'ltn_2021', 'ltn_2023')) #Bond's identification

CF <- c(1000,1000,1000,1000,1000)# The face-values

DATE <- as.Date(c(42736,    43101,  43466,  44197,  44927), origin='1899-12-30') #Dates are in system's format

CASHFLOWS <- list(CFISIN,CF,DATE)
names(CASHFLOWS) <- c("ISIN","CF","DATE")

TODAY <- as.Date(42646, origin='1899-12-30')

brasil <- list(ISIN,MATURITYDATE,ISSUEDATE,
               COUPONRATE,PRICE,ACCRUED,CASHFLOWS,TODAY)

names(brasil) <- c("ISIN","MATURITYDATE","ISSUEDATE","COUPONRATE",
                   "PRICE","ACCRUED","CASHFLOWS","TODAY")

mybonds <- list(brasil)

class(mybonds) <- "couponbonds"

#Estimating the zero-yield curve
ns_res <-estim_nss.couponbonds(mybonds, 'brasil' ,method = "ns")

#Testing the hypothesis that the error comes from the cashflow matrix
cf_p <- create_cashflows_matrix(mybonds[[1]], include_price = T)
m_p <- create_maturities_matrix(mybonds[[1]], include_price = T)
b <- bond_yields(cf_p,m_p)

请注意,我知道这个question 报告了同样的问题。但是,它适用于动态曲线。除此之外,没有有用的答案。

【问题讨论】:

    标签: r finance quantitative-finance computational-finance


    【解决方案1】:

    您的代码有两个问题。 (1)没有命名第一个列表(这是错误的直接原因。但如果修改它,则会发生另一个错误)。 (2) 在现金流子表中,至少一级 ISIN 需要多于 1 个数据。

      # ... 
    CFISIN <- as.character(c('ltn_2017','ltn_2018', 'ltn_2019', 
                             'ltn_2021', 'ltn_2023',  'ltn_2023'))   # added a 6th element
    CF <- c(1000,1000,1000,1000,1000,  1000)                         # added a 6th
    DATE <- as.Date(c(42736,43101,43466,44197,44927,  44928), origin='1899-12-30') # added a 6th
    
    CASHFLOWS <- list(CFISIN,CF,DATE)
    names(CASHFLOWS) <- c("ISIN","CF","DATE")
    TODAY <- as.Date(42646, origin='1899-12-30')
    brasil <- list(ISIN,MATURITYDATE,ISSUEDATE,
                   COUPONRATE,PRICE,ACCRUED,CASHFLOWS,TODAY)
    names(brasil) <- c("ISIN","MATURITYDATE","ISSUEDATE","COUPONRATE",
                       "PRICE","ACCRUED","CASHFLOWS","TODAY")
    
    mybonds <- list(brasil = brasil)                      # named the list
    
    class(mybonds) <- "couponbonds"
    ns_res <-estim_nss.couponbonds(mybonds, 'brasil', method = "ns")
    
    注意:错误来自这些行
    bonddata <- bonddata[group]    # prepro_bond()'s 1st line (the direct reason).
    
    # cf <- lapply(bonddata, create_cashflows_matrix)   # the additional error
    create_cashflows_matrix(mybonds[[1]], include_price = F)  # don't run
    

    【讨论】:

    • 我在我的数据集中添加了两个息票债券(到期时间比其他债券长)和附加错误(uniroot 中的错误(pvcashflows, searchint, tol = tol, maxiter = 3000) : f() 端点的值不是相反的符号),现在发生在我身上。请注意,作为息票债券,两者在现金流子列表中都有超过 1 个数据。您知道此类问题的任何其他来源吗? @cuttlefish44
    • @danielkv;我将无法帮助你。可能它来自bond_yields(),并且(至少)在prepro_bond()postpro_bond() 中。当pvchasflows(-1)pvcashflows(1) 是相同符号(pvchashflowsbond_yields() 中定义)时,uniroot(f = pvcashflows, interval = c(-1, 1), ...) 返回错误。但我不知道更多细节,对不起。 (related r-mailing-help)
    • 谢谢@cuttlefish44。我会挖掘你的提示,如果我无法解决它,我会发布一个新问题。
    猜你喜欢
    • 1970-01-01
    • 2015-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-26
    • 1970-01-01
    • 1970-01-01
    • 2020-12-03
    相关资源
    最近更新 更多