Как оценить статическую кривую доходности с пакетом termstrc в R?

Я пытаюсь оценить статическую кривую доходности для Бразилии, используя termstrc пакет в R. Я использую функцию 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_bondфункция и используется 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)

Обратите внимание, что я знаю об этом вопросе, который сообщает ту же проблему. Тем не менее, это для динамической кривой. Кроме того, нет полезного ответа.

1 ответ

Решение

У вашего кода есть две проблемы. (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
Другие вопросы по тегам