Type: Package
Title: Zero Coupon Yield Curve Modelling
Version: 0.1.2
Date: 2025-05-25
Description: Modeling the zero coupon yield curve using the dynamic De Rezende and Ferreira (2011) <doi:10.1002/for.1256> five factor model with variable or fixed decaying parameters. For explanatory purposes, the package also includes various short datasets of interest rates for the BRICS countries.
Depends: R (≥ 3.5.0), xts, stats
License: GPL-2 | GPL-3 [expanded from: GPL (≥ 2)]
Encoding: UTF-8
LazyData: true
RoxygenNote: 6.1.1
NeedsCompilation: no
Packaged: 2025-05-25 21:44:33 UTC; User
Repository: CRAN
Date/Publication: 2025-05-25 22:00:02 UTC
Author: Oleksandr Castello [aut, cre], Marina Resta [ctb]
Maintainer: Oleksandr Castello <alexander-castello@libero.it>

Zero Coupon Yield Curve Modelling

Description

Modeling the zero coupon yield curve using the dynamic De Rezende and Ferreira (2011) <doi:10.1002/for.1256> five factor model with variable or fixed decaying parameters. For explanatory purposes, the package also includes various short datasets of interest rates for the BRICS countries.

Details

Package: DeRezende.Ferreira
Type: Package
Version: 4.1
Date: 2019-04-26
Depends: R (>= 3.5.0), xts, stats
License: GPL (>= 2)
Encoding: UTF-8
LazyData: true
RoxygenNote: 6.1.1

Author(s)

Author: Oleksandr Castello [aut, cre]
Marina Resta [ctb, cre]

Maintainer: Oleksandr Castello <alexander-castello@libero.it>

References

De Rezende R.B., Ferreira M.S., “Modeling and Forecasting the Brazilian Term Structure of Interest Rates by an Extended Nelson-Siegel Class of Models: A Quantile Autoregression Approach” (2008).

De Rezende R.B., Ferreira M.S. (2011), “Modeling and Forecasting the Yield Curve by an Extended Nelson-Siegel Class of Models: A Quantile Autoregression Approach”, Journal of Forecasting , J. Forecast. n. 32, p. 111–123 (2013).

De Rezende R.B., “Giving Flexibility to The Nelson-Siegel Class of Term Structure Models”, Revista Brasileira de Financas Vol. 9, N. 1 (2011), p. 27–49.

Caldeira. J. F., Moura G. V., Portugal M.S., “Efficient Yield Curve Estimation and Forecasting in Brazil”, Revista EconomiA (Brasilia) (January/April 2009) ,v.11, n.1, p.27–51.

Nelson C. R., Siegel A.F., “Parsimonious Modeling of Yield Curves”, The Journal of Business (1987), 60, 473-489.

Diebold F.X., Li C.,” Forecasting the term structure of government bond yields”, Journal of Econometrics n. 130, 337-364 (2005).

Diebold, F.X., Ji, L. and Li, C. , A Three-Factor Yield Curve Model: Non-Affine Structure, Systematic Risk Sources, and Generalized Duration, in L.R. Klein (ed.), Long-Run Growth and Short-Run Stabilization: Essays in Memory of Albert Ando. Cheltenham, U.K.: Edward Elgar, p. 240-274 (2006).

Guirreri S.S., "Modelling and estimation of the yield curve", Package "YieldCurve" - February 19, 2015, CRAN.


Estimation of spot rates with the De Rezende-Ferreira 5 Factor model

Description

The command estimates the spot rates using the De Rezende-Ferreira 5 Factor model

Usage

DRF.5F.rates(beta, maturity)

Arguments

beta

Matrix or Vector of class "zoo", which contains the coefficients of the De Rezende-Ferreira 5 Factor model: \left( \beta_{0t},\beta_{1t}, \beta_{2t}, \beta_{3t}, \beta_{4t}, \tau_{1t}, \tau_{2t} \right)

maturity

Vector of class "numeric", wich contains the maturities

Value

An object of class "xts" - "zoo", which contains fitted interest rates

Examples

#
# Fitting the Chinese spot rates using the De Rezende-Ferreira 5F moodel with Variable tau
#

data(ZC_China)
real.rate = ZC_China
ZC_China[["Date"]] = NULL
rate = zoo(ZC_China)
index(rate) = as.POSIXct(paste(real.rate[["Date"]]))
maturity <- c(1,2,3,4,5,6,7,8,9,10,12,15,20,30)

RF.5F.Parameters <- DRF.5F.tVar(rate, maturity)
RF.5F.Rates <- DRF.5F.rates(RF.5F.Parameters, maturity )

plot(maturity,rate[5,],xlab="Maturity",ylab="Yields",ylim=c(3.5,4.7),col="black",lwd = 1)
lines(maturity, RF.5F.Rates[5,], col = "blue", lwd = 1)
grid(nx = 12, ny = 12)

#
#
#
#
# Fitting the South African spot rates using the De Rezende-Ferreira 5F model with fixed tau
#

data(ZC_SouthAfrica)
real.rate = ZC_SouthAfrica
ZC_SouthAfrica[["Date"]] = NULL
rate = zoo(ZC_SouthAfrica)
index(rate) = as.POSIXct(paste(real.rate[["Date"]]))
maturity <- c(0.25, 1,2,3,4,5,6,7,8,9,10,12,15,20,25,30)
fixed_tau1 = (1.07612)
fixed_tau2 = (6.23293)

RF.5F.Parameters <- DRF.5F.tFix(rate, maturity, fixed_tau1, fixed_tau2)
RF.5F.Rates <- DRF.5F.rates(RF.5F.Parameters, maturity )

plot(maturity,rate[5,],xlab="Maturity",ylab="Yields",ylim=c(6.5,10.0),col="black",lwd = 1)
lines(maturity, RF.5F.Rates[5,], col = "blue", lwd = 1)
grid(nx = 12, ny = 12)


Estimation of the De Rezende-Ferreira 5 Factor model's parameters with fixed \ \tau

Description

The command estimates the parameters of the De Rezende-Ferreira 5 Factor model using fixed \ \tau_{1} and \ \tau_{2}

Usage

DRF.5F.tFix(rate, maturity, fixed_tau1, fixed_tau2)

Arguments

rate

Vector or matrix of class "zoo", which contains interest rates

maturity

Vector of class "numeric", wich contains the maturities

fixed_tau1

Decaying parameter of class "numeric" (Slope)

fixed_tau2

Decaying parameter of class "numeric" (Curvature)

Value

An object of class "zoo", that contains \ \left (\beta_{0t},\ \beta_{1t},\ \beta_{2t},\ \beta_{3t},\ \beta_{4t},\ \tau_{1t},\ \tau_{2t},\ SSR_{t},\ R^{2}_{t} \right)

Examples

#
# De Rezende-Ferreira 5F model on the Indian Data-Set
#

data(ZC_India)
real.rate = ZC_India
ZC_India[["Date"]] = NULL
rate = zoo(ZC_India)
index(rate) = as.POSIXct(paste(real.rate[["Date"]]))
maturity <- c(0.25, 0.5, 0.75, 1,2,3,4,5,6,7,8,9,10,12,15,20,25,30)
fixed_tau1 = (1.07612)
fixed_tau2 = (6.23293)

RF.5F.Parameters <- DRF.5F.tFix(rate, maturity, fixed_tau1, fixed_tau2)

par(mfrow=c(3,2))
 plot(RF.5F.Parameters[,"beta0"],xlab="Date",ylab="BETA0",ylim=c(7.0,9.0),col="blue",lwd=1)
 grid(nx=12, ny=12)
 plot(RF.5F.Parameters[,"beta1"],xlab="Date",ylab="BETA1",ylim=c(-3.5,0.2),col="blue",lwd=1)
 grid(nx=12, ny=12)
 plot(RF.5F.Parameters[,"beta2"],xlab="Date",ylab="BETA2",ylim=c(-1.5,1.0),col="blue",lwd=1)
 grid(nx=12, ny=12)
 plot(RF.5F.Parameters[,"beta3"],xlab="Date",ylab="BETA3",ylim=c(-2.0,0.5),col="blue",lwd=1)
 grid(nx=12, ny=12)
 plot(RF.5F.Parameters[,"beta4"],xlab="Date",ylab="BETA4",ylim=c(-2.5,5.0),col="blue",lwd=1)
 grid(nx=12, ny=12)
par(mfrow=c(1,1))


Estimation of the De Rezende-Ferreira 5 Factor model's parameters with variable \ \tau

Description

The command estimates the parameters of the De Rezende-Ferreira 5 Factor model using variable \ \tau_{1} and \ \tau_{2}

Usage

DRF.5F.tVar(rate, maturity)

Arguments

rate

Vector or matrix of class "zoo", which contains interest rates

maturity

Vector of class "numeric", wich contains the maturities

Details

The De Rezende-Ferreira model used to fit the forward rates is:

f_{t}\left(m\right) = \beta_{0t} + \beta_{1t} e^{-\frac{m}{\tau_{1t}}} + \beta_{2t} e^{-\frac{m}{\tau_{2t}}} + \beta_{3t} \left ( {\frac{m}{\tau_{1t}}} e^{-\frac{m}{\tau_{1t}}} \right ) + \beta_{4t} \left ( {\frac{m}{\tau_{2t}}} e^{-\frac{m}{\tau_{2t}}} \right )


The spot rates, derived from the forward rates f_{t}\left(m\right), are given by:

y_{t}\left ( m \right ) = \beta_{0t} + \beta_{1t} \left (\frac{1 - e^{-\frac{m}{\tau_{1t}}}}{\frac{m}{\tau_{1t}}}\right) + \beta_{2t} \left (\frac{1 - e^{-\frac{m}{\tau_{2t}}}}{\frac{m}{\tau_{2t}}}\right) + \beta_{3t} \left (\frac{1 - e^{-\frac{m}{\tau_{1t}}}}{\frac{m}{\tau_{1t}}} - e^{-\frac{m}{\tau_{1t}}}\right ) + \beta_{4t} \left (\frac{1 - e^{-\frac{m}{\tau_{2t}}}}{\frac{m}{\tau_{2t}}} - e^{-\frac{m}{\tau_{2t}}}\right )


The set of optimal parameters will be chosen according to the lowest RMSE value:

\left (\widehat{\tau}_{1t},\widehat{\tau}_{2t} \right) = argmin\left \{\frac{1}{N}\sum_{t=1}^{N} \sqrt{\frac{1}{T}\sum_{t=1}^{T}\left [ y_{t}\left (t_{n} \right ) - \widehat{y}_{t}\left (t_{n},\tau_{1t}, \tau_{2t},\widehat{\beta_{t}}\right )\right ]^{2} } \right \}


Value

An object of class "zoo", that contains \ \left (\beta_{0t},\ \beta_{1t},\ \beta_{2t},\ \beta_{3t},\ \beta_{4t},\ \tau_{1t},\ \tau_{2t},\ SSR_{t},\ R^{2}_{t} \right)

Examples

#
# De Rezende-Ferreira 5F model on the Brazilian Data-Set
#

data(ZC_Brazil)
real.rate = ZC_Brazil

ZC_Brazil[["Date"]] = NULL

rate = zoo(ZC_Brazil)
index(rate) = as.POSIXct(paste(real.rate[["Date"]]))
maturity <- c(0.5, 0.75, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

RF.5F.Parameters <- DRF.5F.tVar(rate, maturity)

par(mfrow=c(3,2))
 plot(RF.5F.Parameters[,"beta0"],xlab="Date",ylab="BETA0",ylim=c(9.5,12.0),col="blue",lwd=1)
 grid(nx=12, ny=12)
 plot(RF.5F.Parameters[,"beta1"],xlab="Date",ylab="BETA1",ylim=c(-18.0,2.3),col= "blue",lwd=1)
 grid(nx=12, ny=12)
 plot(RF.5F.Parameters[,"beta2"],xlab="Date",ylab="BETA2",ylim=c(-6.0,13.0),col= "blue",lwd=1)
 grid(nx=12, ny=12)
 plot(RF.5F.Parameters[,"beta3"],xlab="Date",ylab="BETA3",ylim=c(-10.0,0.0),col= "blue",lwd=1)
 grid(nx=12, ny=12)
 plot(RF.5F.Parameters[,"beta4"],xlab="Date",ylab="BETA4",ylim=c(-5.0,5.0),col="blue",lwd=1)
 grid(nx=12, ny=12)
par(mfrow=c(1,1))

par(mfrow=c(2,1))
 plot(RF.5F.Parameters[,"tau1"],xlab="Date",ylab="TAU1",ylim=c(0.2,1.3),col="blue",lwd=1)
 grid(nx=12, ny=12)
 plot(RF.5F.Parameters[,"tau2"],xlab="Date",ylab="TAU2",ylim=c(2.5,5.5),col="blue",lwd=1)
 grid(nx=12, ny=12)
par(mfrow=c(1,1))

#
# De Rezende-Ferreira 5F on the Russian Data-Set
#

data(ZC_Russia)
real.rate = ZC_Russia

ZC_Russia[["Date"]] = NULL

rate = zoo(ZC_Russia)
index(rate) = as.POSIXct(paste(real.rate[["Date"]]))
maturity <- c(0.25, 0.5, 0.75, 1,2,3,5,7,10,15,20,30)
RF.5F.Parameters <- DRF.5F.tVar(rate, maturity)

par(mfrow=c(3,2))
 plot(RF.5F.Parameters[,"beta0"],xlab="",ylab="BETA0",ylim=c(10.5,12.5),col="blue",lwd=1)
 grid(nx=12, ny=12)
 plot(RF.5F.Parameters[,"beta1"],xlab="Date",ylab="BETA1",ylim=c(-1.5,0.5),col="blue",lwd=1)
 grid(nx=12, ny=12)
 plot(RF.5F.Parameters[,"beta2"],xlab="Date",ylab="BETA2",ylim=c(-7.0,-3.5),col="blue",lwd=1)
 grid(nx=12, ny=12)
 plot(RF.5F.Parameters[,"beta3"],xlab="Date",ylab="BETA3",ylim=c(-1.5,3.5),col="blue",lwd=1)
 grid(nx=12, ny=12)
 plot(RF.5F.Parameters[,"beta4"],xlab="Date",ylab="BETA4",ylim=c(-5.5,-0.1),col="blue",lwd=1)
 grid(nx=12, ny=12)
par(mfrow=c(1,1))


par(mfrow=c(2,1))
 plot(RF.5F.Parameters[,"tau1"],xlab="Date",ylab="TAU1",ylim=c(0.1,1.9),col="blue",lwd=1)
 grid(nx=12, ny=12)
 plot(RF.5F.Parameters[,"tau2"],xlab="Date",ylab="TAU2",ylim=c(7.5,16.8),col="blue",lwd=1)
 grid(nx=12, ny=12)
par(mfrow=c(1,1))


Zero-Coupon interest rates

Description

ZC Government bonds with maturities (0.5, 0.75, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10) expressed in years and with business day frequency, source: Thomson Reuters Datastream. The range date is from 2018-01-01 to 2018-01-12.

Usage

data(ZC_Brazil)

Format

A data frame (txt file) with 12 daily interest rates at different maturities and 10 observed days.


Zero-Coupon interest rates

Description

ZC Government bonds with maturities (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 15, 20, 30) expressed in years and with business day frequency, source: Thomson Reuters Datastream. The range date is from 2018-01-02 to 2018-01-15.

Usage

data(ZC_China)

Format

A data frame (txt file) with 14 daily interest rates at different maturities and 10 observed days.


Zero-Coupon interest rates

Description

ZC Government bonds with maturities (0.25 , 0.5, 0.75, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 15, 20, 25, 30) expressed in years and with business day frequency, source: Thomson Reuters Datastream. The range date is from 2018-01-01 to 2018-01-12.

Usage

data(ZC_India)

Format

A data frame (txt file) with 18 daily interest rates at different maturities and 10 observed days.


Zero-Coupon interest rates

Description

ZC Government bonds with maturities (0.25, 0.5, 0.75, 1,2,3,5,7,10,15,20,30) expressed in years and with business day frequency, source: the Central Bank of the Russian Federation web site. The range date is from 2018-01-03 to 2018-01-17.

Usage

data(ZC_Russia)

Format

A data frame (txt file) with 12 daily interest rates at different maturities and 10 observed days.


Zero-Coupon interest rates

Description

ZC Government bonds with maturities (0.25, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 15, 20, 25, 30) expressed in years and with business day frequency, source: Thomson Reuters Datastream. The range date is from 2018-01-01 to 2018-01-12.

Usage

data(ZC_SouthAfrica)

Format

A data frame (txt file) with 16 daily interest rates at different maturities and 10 observed days.