Learn R Programming

NMOF (version 2.10-0)

NS: Zero Rates for Nelson--Siegel--Svensson Model

Description

Compute zero yields for Nelson--Siegel (NS)/Nelson--Siegel--Svensson (NSS) model.

Usage

NS(param, tm)
NSS(param, tm)

Value

The function returns a vector of length length(tm).

Arguments

param

a vector. For NS: \(\beta_1\), \(\beta_2\), \(\beta_3\), \(\lambda\). For NSS: a vector: \(\beta_1\), \(\beta_2\), \(\beta_3\), \(\beta_4\), \(\lambda_1\), \(\lambda_2\).

tm

a vector of maturities

Author

Enrico Schumann

Details

See Chapter 14 in Gilli/Maringer/Schumann (2011).

Maturities (tm) need to be given in time (not dates).

References

Gilli, M. and Grosse, S. and Schumann, E. (2010) Calibrating the Nelson-Siegel-Svensson model, COMISEF Working Paper Series No. 031. https://enricoschumann.net/COMISEF/wps031.pdf

Gilli, M., Maringer, D. and Schumann, E. (2019) Numerical Methods and Optimization in Finance. 2nd edition. Elsevier. tools:::Rd_expr_doi("10.1016/C2017-0-01621-X")

Gilli, M. and Schumann, E. (2010) A Note on ‘Good’ Starting Values in Numerical Optimisation, COMISEF Working Paper Series No. 044. https://enricoschumann.net/COMISEF/wps044.pdf

Nelson, C.R. and Siegel, A.F. (1987) Parsimonious Modeling of Yield Curves. Journal of Business, 60(4), pp. 473--489.

Schumann, E. (2023) Financial Optimisation with R (NMOF Manual). https://enricoschumann.net/NMOF.htm#NMOFmanual

Svensson, L.E. (1994) Estimating and Interpreting Forward Interest Rates: Sweden 1992--1994. IMF Working Paper 94/114.

See Also

NSf, NSSf

Examples

Run this code
tm <- c(c(1, 3, 6, 9) / 12, 1:10)  ## in years
param <- c(6, 3, 8, 1)
yM <- NS(param, tm)
plot(tm, yM, xlab = "maturity in years",
             ylab = "yield in percent")

param <- c(6, 3, 5, -5, 1, 3)
yM <- NSS(param, tm)
plot(tm, yM, xlab = "maturity in years",
             ylab = "yield in percent")


# \donttest{
## get Bliss/Diebold/Li data (used in some of the papers in References)
u <- url("https://www.sas.upenn.edu/~fdiebold/papers/paper49/FBFITTED.txt")
BliDiLi <- try(scan(u, skip = 14), silent = TRUE)

if (!inherits(BliDiLi, "try-error")) {
    mat <- NULL
    for (i in 1:372)
        mat <- rbind(mat,BliDiLi[(19*(i-1)+1):(19*(i-1)+19)])
    mats  <- c(1,3,6,9,12,15,18,21,24,30,36,48,60,72,84,96,108,120)/12

    ## the obligatory perspective plot
    persp(x = mat[,1], y = mats, mat[ ,-1L],
          phi = 30, theta = 30, ticktype = "detailed",
          xlab = "time",
          ylab = "time to maturity in years",
          zlab = "zero rates in %")
} else {
    message("==> Bliss/Diebold/Li data could not be accessed; check URL/internet connection")
}
# }

Run the code above in your browser using DataLab