BONOS Y LOS PARAMETROS DE LA TASA FORWARD

Esmeralda Acuña Neyra

2020-07-20

INTRODUCCIÓN

En el presente trabajo se reproducirá y explicará los códigos utilizados en el siguiente libro virtual https://bookdown.org/wfoote01/faur/term-structure-and-splines.html#the-bond, considerando solo los ejemplos desarrollados de la seccion 5.2 a la 5.4.

Este trabajo constará de tres partes, en la primera parte se replicara los codigos de la sección 5.2 los bonos, también se explicará a detalle los códigos a ejecutar y principalmente siguiendo la formula del valor presente de un bono, se va a construir un objeto tipo función que determine el precio del bono y además se explicará claramente las diferencias entre las tasas de descuento discretos y continuos.

En la segunda parte se replicará los códigos de la sección 5.3 los parametros de la tasa forward, asimismo se explicará los codigos a ejecutar.

En la tercera parte se replicará los códigos de la sección 5.4 para la curva yield maturity.

-

BONO

Primero se dará una breve introducción a los bonos para un mejor entendimiento de los códigos a ejecutar.

Los bonos son instrumentos de deuda que pueden ser emitidos por una empresa o institución pública para financiarse, mediante dicha emisión de bonos materializan la deuda, entregando a sus prestamistas un activo financiero.

El emisor de un bono promete devolver el dinero prestado al comprador de ese bono, normalmente más unos intereses fijados previamente, conocidos como cupón. Por eso se conoce como instrumento de renta fija.

Al comprar un bono estamos haciendo un préstamo. El comprador entrega una cantidad de dinero, llamada capital del bono, a la empresa emisora del bono (empresa que recibe el préstamo). La empresa se compromete a devolver en una fecha de vencimiento, previamente establecida, la cantidad que le han prestado, más un tipo de interés también previamente establecido. Por eso los bonos se consideran activos de renta fija, ya que independientemente de como le vaya a la empresa se va a recibir a final del periodo el interés fijo al cual se ha comprometido la empresa emisora. Aunque a veces tienen tipos de interés variables.A los propietarios o prestamistas de los bonos se les llama «tenedores» o «bonistas».

El valor actual de un bono es igual a los flujos de caja que se van a recibir en el futuro, descontados al momento actual a una tasa de interés (i), es decir, el valor de los cupones y el valor nominal a día de hoy. En otras palabras, tenemos que calcular el valor actual neto (VAN) del bono:

\[V=\sum_{t=0}^{mT} \frac{cP}{(1+y/m)^T}+ \frac{P}{(1+y/m)^mT}\]

Dónde \(V\) es el valor presente del bono, \(T\) es el número de años hasta la madurez, \(m\) es el número de períodos que ocurren los flujos de efectivo por año, \(y\) es el rendimiento del bono por año, \(c\) es la tasa de cupón por año, y \(P\) es el principal del bono (valor nominal o nominal).

Primero vamos crear un objeto tipo una función que determin el precio de un bono, guiandonos de la formula pasada del bono.

# P: valor nominal; tc: tasa cupón; tf: madurez en años; y: yield to maturity; m=periodos de pago


#Primero se crea una función
precio.bono <- function(tc,P,tf,y,m){
t<-tf%*%m #tf se multiplica por m porque tf esta en años y lo que se quiere es los periodos de pago.

#rep se usa para repetir un numero, las veces que se desee
pago <- c(rep(tc*P, (tf*m) - 1),P*(1 + tc))
pago <- as.data.frame(pago)
pago$t <- as.numeric(rownames(pago))
pago$factor_desc <- 1 / (1 + (y/m))^(pago$t)
pago$valor_prese <- pago$factor_desc*pago$pago
sum(pago$valor_prese)
}

Una vez creada la función procedemos a ejecutar, asumiendo en este caso que se tiene la tasa cupon por periodo, quiere decir que la tasa cupon por año fue dividida por m que son los periodos de que se pagaran, por ello en la función ya no se divide por m.Tasa cupon por periodo= 0.05,m= 2, tf= 10 años, y=0.04 anual se tiene que dividir entre m, P(Valor nominal)=100..

precio.bono(0.05,100,10,0.04,2)
## [1] 149.0543

El precio del bono es igual a 149.0543.

Por otro lado, si no se tuviera la tasa cupón por periodo sino por años tendriamos que cambiar la funccion, dividiendo tc/m:

# P: valor nominal; tc: tasa cupón; tf: madurez en años; y: yield to maturity; m=periodos de pago

precio.bono1 <- function(tc1,P1,tf1,y1,m1){
t1<-tf1%*%m1
#rep se usa para repetir un numero, las veces que se desee
pago1 <- c(rep(tc1/m1*P1, (tf1*m1) - 1),P1*(1 + tc1/m1))
pago1 <- as.data.frame(pago1)
pago1$t1 <- as.numeric(rownames(pago1))
pago1$factor_desc1 <- 1 / (1 + (y1/m1))^(pago1$t1)
pago1$valor_prese1 <- pago1$factor_desc*pago1$pago1
sum(pago1$valor_prese1)
}

Asumiendo los mismos datos del anterior ejercicio:

precio.bono1(0.05,100,10,0.04,2)
## [1] 108.1757

Se observa que este caso el precio del bono disminuyó y sale igual que el libro que se esta usando de guía, ello se debe a que la tasa cúpon en este caso esta siendo divida por m que son los periodos, ello se hace siempre y cuando la tasa cúpon sea una tasa cupon por años y no por periodos, y esto es lo más común.

Este precio obtenido es mayor a al valor nominal y se puede decir que cotiza sobre la par.Además, esto puede estar asociado a que el bono se paga a una tasa mayor que la requerida en el mercado, los compradores pagan mas de lo normal para compensar la diferencia.

Por otro lado, las tasas de interés negativas abundan, por ello se establece lo siguiente: \(y<- c(-0.02, -0.01, 0, 0.01, 0.02)\)

Aquí se puede observar el ejemplo:

c <- 0.05
P <- 100
y <- c(-0.02, -0.01, 0, 0.01, 0.02)
m <- 2
T <- 10
(V <- (c/m) * P * (1/(y/m) - 1/((y/m) * 
    (1 + (y/m))^(m * T))) + P/(1 + (y/m))^(m * 
    T))
## [1] 177.9215 163.2689      NaN 137.9748 127.0683

En este caso se observa que sale NaN porque estan siendo dividos por 0%, además la tasa que se utiliza es un promedio de las tasas forward que utilizan los mercados para valorar los flujos de efectivo futuro durante periodos de tiempo futuro.

¿QUÉ ES UN SPLINE?

Es un modelo de regresión de estructura de plazo, podemos desarrollar tasas a cualquier vencimiento, luego usar las tasas intertemporales(incluso extrapoladas).

Es una funcion que construye por partes a partir del polinomio funciones, pero estos en este caso serian piezas del termino estructura de tasa de interés.

En general un polinomio es una expresión que se ve así:

\[f(x)=a_0x^0+a_1x^1+a_2x^2+...+a_px^p,\]

donde las a son coeficientes constantes, y \(x^0=1\) y \(x^1=x\).

  • Si \(p=0\), entonces se tiene una funcion constante
  • Si \(p=1\), se tiene una función lineal
  • Si \(p=2\), se tiene una función cuadratica
  • si \(p=3\), se tiene una función cubica

En este caso se podría usar una función cubica para construit una regrsion simple, llo se hara más adelante.

EL BONO

TASAS DE DESCUENTO DISCRETOS

Los bonos cupón cero,son aquellos en los que su rentabilidad va implícita en el precio de emisión, en estos bonos no existe pagos periódicos .

El precio de un bono cupón cero, en términos del porcentaje del valor nominal, es esta expresion para la capitalización de la tasa discreta \(y_{T}^{d}\) (digamos, mensualmente obtienes un porcentaje del saldo del mes pasado):

\[PT = \frac{100}{(1 + y^d(T))^T}\] Supongamos que, con la ayuda de Jacob Bernoulli y Leonhard Euler, realizamos este experimento:

  1. Pague hoy al comienzo del año \(P\) para recibir \(\$1\) al final de un año y el interes \(y\) se compone solo una vez al año. Así al final del año recibimos \(P+yP\),pero ese monto es \(\$1\), por lo que

\[P + yP= P(1+y)=1\] y despejando P

\[P=\frac{1}{(1+y)^1}\] donde \((1+y)\) se eleva a un periodo para enfatizar que se modelo un periodo de capitalización.

  1. Ahora suponga que se puede recibir intereses dos veces al año a una tasa de interés anual de \(y\), a mitad del año se recibe la mitad de intereses \(y/2\) para que se tenga en la cuenta del contrato.

\[P(1+\frac{y}{2})\] Podemos dejar que esto permanezca en la cuenta, esta cantidad también genera intereses de \(y/2\) para el fin del año del contrato para que

\[P ( 1 + \frac{y} {2} ) + \frac{y} {2}[ P ( 1 + \frac{y} {2} )] = P ( 1 + \frac{y} {2} ) (1 +\frac{y} {2} ) = P ( 1 + \frac{y} {2} )^2\] Simplificamos:

\[P(1+\frac{y}{2})^2 = 1\]

Se puede resolver para P, el valor presente de recibir \(\$1\) al final del año del contrato cuando tenemos dos periodos compuestos o

\[P\frac{1}{(1+\frac{y}{2})^2}\] 3. Se puede con la ayuda de Jacob Bernulli, representar en la forma más general para \(m\) periodos compuestos:

\[P\frac{1}{(1+\frac{y}{m})^m}\]

  1. Ahora supongamos que y= 100% de interes \(ym=365*24*60=525600\) periodos de capitalización (capitalización minuto a minuto), luego

\[P=\frac{1}{(1+\frac{1}{525600})^(525600)}\]

(m <- 365 * 24 * 60)
## [1] 525600
#y=tasa de interes
(y <- 1)
## [1] 1
#El precio al valor actual:
(P <- 1/(1 + (y/m))^m)
## [1] 0.3678798

En terminos generales la capitalización discreta es un medio de cálculo de los intereses que se gana sobre los depósitos. El proceso de la capitalización discreta se utiliza en periodos limitados de tiempo específicos, tales como diarios, mensuales o anuales. Este método de interés compuesto hace que sea posible añadir sistemáticamente los intereses calculados al director actual de la cuenta, más los intereses devengados sobre el capital.

y<-0.04 #tasa de interes
Tf<- 10 #años
P<- 100 #valor facial
P0.d<-P/((1+y)^(Tf))
P0.d
## [1] 67.55642

El precio presente del bono es 67.55 descontado a una tasa 4% anual.

TASAS DE DESCUENTO CONTINUOS

La composición continua utiliza una formula natural basada en registros para calcular y volver a agregar intereses devengados en los intervalos más pequeños posibles.

Este tipo de capitalización supone que los intereses se van reinvirtiendo de manera continua. Es decir, implica que los intereses se van generando cada infinitésima de segundo. Y esto es lo que realmente la diferencia de otro tipo de capitalización. De manera que, al capitalizar de esta forma, los intereses generados serán mayor que la capitalización compuesta o simple. Ya que, en la práctica, cuánto mayor es el número de periodos a capitalizar, mayor serán los intereses generados.

Cabe señalar la composición continua se adquiere del porcentaje del equilibrio del ultimo nanosegundo al final de este mismo… a medida que estos se conviertan más pequeños.

\[P_T(θ) = 100exp(−y_T T)\]

Se muestra un ejemplo:

P1<- 100
y1<- 0.04
t1<-10
P0.c<-P1*exp(-y1*10)

P0.c
## [1] 67.032

Esta expresión es el valor presente de recibir un flujo de efectivo del 100% del valor nominal al vencimiento. Si el bono tiene cupones, podemos considerar cada uno de los pagos de cupones como un bono mini cero. Tomar la suma del valor presente de cada uno de los mini ceros nos da el valor del bono, ahora visto como una cartera de mini ceros.

El rendimiento es la tasa desde la fecha 0 hasta la fecha \(T\), vencimiento. Cubre el flujo de tasas para cada vencimiento intermedio de \(0\) a \(T\). Supongamos que definimos tasas a futuro \(r (t, θ)\), donde cada \(t\) es una de las fechas de vencimiento intermedias entre el tiempo \(0\) y el vencimiento \(T\), y \(θ\) contiene todas las información que necesitamos sobre la forma de \(r\) entre los vencimientos. Podemos estimar la curva hacia adelante a partir de los precios de los bonos \(P (T)\) del vencimiento \(T\) con

\[−\frac{∆log(P(Ti))}{∆Ti}= \frac{−log(P(Ti)) − log(P(Ti−1))}{Ti − Ti−1}\]

El \(∆\) representa la diferencia en un precio o vencimiento \(i\) y el precio y vencimiento anteriores \(i - 1\). La función log () es el logaritmo natural.

El rendimiento es entonces el promedio de las tasas a plazo desde la fecha 0 hasta la fecha \(T\) de un bono cero. Usamos la integral, que equivale a una suma acumulativa, para calcular este promedio:

\[y_T^{(θ)} = T^{(−1)} ∫_{t=0}^{0}r(t, θ)dt\] El numerador es la suma acumulativa de las tasas a plazo para cada vencimiento hasta el último vencimiento T. En esta expresión, \(rdt\) es la tasa a plazo a través de un pequeño movimiento en el vencimiento.

El denominador es el número de años de vencimiento \(T\).

Lo expresamos de la siguiente manera para hallar el \(yield maturity\)=\(y\) en este caso se puede corroborar con el anterior codigo del y del P0.c que era igual a y= 0.04 y sale igual ahora.

log(P1/P0.c)/t1
## [1] 0.04

Un ejemplo para aclarar:

Ejecutamos lo siguiente:

Tf <- c(1, 5, 10, 20, 30)  # Años
(P0.d<-P1/((1+y1)^(Tf)))
## [1] 96.15385 82.19271 67.55642 45.63869 30.83187
(P0.c<-P1*exp(-y1*Tf))
## [1] 96.07894 81.87308 67.03200 44.93290 30.11942
Tf <- c(1, 5, 10, 20, 30)  # Años
P0.c <- c(99, 98, 96, 93, 89) #en porcentaje

Para poder desarrollar una muestra se incluye los precios de cupon cero con sus vencimientos:

1.Calcular \(log(P0.c)/100\) y encontrar la tasas de forward utilizando:

(fwd <- -diff(log(P0.c))/diff(Tf))
## [1] 0.002538093 0.004123857 0.003174870 0.004396312

Estos parecen tasas, porque lo son. Son la versión de tiempo continuo de un cambio porcentual, o tasa de crecimiento, de un vencimiento a otro vencimiento. Podemos utilizar estos resultados numéricos para motivar una interpretación: las tasas de interés son simplemente tasas de cambio de los valores actuales en relación con el tiempo que cubren en la madurez.

  1. Compare log(P0.c) con el precio
(-log(P0.c/P1))
## [1] 0.01005034 0.02020271 0.04082199 0.07257069 0.11653382

Parece darnos el rendimiento hasta la madurez directamente.

Ahora ejecutamos lo siguiente:

(-diff(P0.c/P1)/(P0.c[-length(P0.c)]/P1))
## [1] 0.01010101 0.02040816 0.03125000 0.04301075

Estos son cambios porcentuales discretos que son similares, pero no iguales, que la versión continua (usando log ()).

Tenga en cuenta el uso de la indexación de precios para eliminar el último precio, ya que lo que queremos calcular es:

\[\frac{P(T_i)-P(T_i-1)}{P(T_i-1)}\]

  1. Se buscara la curva de rendimiento a vencimiento y se hallará los precios bonos, para ello sirve las tasas forward.
(fwd.i <- -log(P0.c[1]/100))
## [1] 0.01005034

El valor obtenido es una la tasa \(y\) para un P=100 y un cupon de 1 dólar.

(fwd.int <- c(fwd.i,
              fwd.i + cumsum(fwd*diff(Tf))
              )
    )
## [1] 0.01005034 0.02020271 0.04082199 0.07257069 0.11653382
# una integración continua de tarifas
# a través de los vencimientos
(price <- 100 * exp(-fwd.int))
## [1] 99 98 96 93 89

Los valores obtenidos son el valor presente de recibir el 100% del valor nominal.

La “integración” continua es un proceso acumulativo de agregar más tasas a medida que avanza el vencimiento, por lo tanto, se despliega una suma acumulativa o en R a \(cumsum ().\)

  • Los rendimientos son la acumulación de tasas forwad. Por lo tanto, por ello se usa la suma acumulativa como una versión discreta de la integral. Las tarifas se suman (en lugar de multiplicarse cuando usamos log y exp para hallar los precios.

  • La primera tasa forward es solo la tasa de descuento en el bono de vencimiento a 1 año almacenado en \(forward.initial\).

  • Todos los precios de los bonos se recuperan invirtiendo el proceso de producir forwards a partir de los precios y convirtiéndolos en rendimientos y nuevamente en precios.

Finalmente, respecto a los bonos para calcular en tiempo discretos y continuos del rendimiento:

y.T.d <- 0.2499  # Tasa de usura en el estado de Nueva York; d = discreto, T = vencimiento en años 

(y.T <- log(1 + y.T.d))
## [1] 0.2230635
(y.T.d <- exp(y.T) - 1)
## [1] 0.2499

Se puede observar el rendimiento de tiempo continuo menor a la tasa discreta porque incluye más periodos de composición continua.

-

-

-

PARAMETROS DE LA TASA FORWARD

Ahora atendemos al hasta ahora misterioso \(θ\), incrustado en la secuencia de tasas forward \(r\).

Suponemos que la tasa forward se compone de una constante a largo plazo, \(θ_0\); un término inclinado con el parámetro \(θ_1\); un término más bien proporcionado, incluso “jorobado” con el parámetro \(θ_2\); y así sucesivamente para \(p\) términos polinómicos:

\[r(t,θ)=θ_0+θ_1+θ_2t^2+...+θ_pt^p\] Integramos la tasa forward para obtener:

\[∫_{T}^{0} r(t, θ)dt = θ_0T + θ_1\frac{T^2}{2} + θ_2\frac{T^3}{3}+ ... + θ_p \frac{T^{p+1}}{p+1}\]

Esto es equivalente, de alguna manera, al cálculo de la suma acumulativa de las tasas a forward a través de pequeños incrementos en el tiempo \(dt\) desde hoy en el vencimiento \(t = 0\) hasta el vencimiento del término en \(t = T\). Entonces podemos estimar la curva de rendimiento (y luego el precio del bono de cupón cero) usando las tasas forward integradas divididas por el vencimiento \(T\) para obtener el rendimiento como

\[y_T(θ)= θ_0T + θ_1\frac{T^2}{2} + θ_2\frac{T^3}{3}+ ... + θ_p \frac{T^{p+1}}{p+1}\] Antes de continuar, procuraremos algunos datos de estructura de términos para ver más claramente lo que se acaba de calcular.

DATOS DE ESTRUCTURA DE TERMINOS

Aquí hay algunos datos muy antiguos de US Treasury STRIPS (También conocido como “Separate Trading of Registered Interest and Principal of Securities”). El conjunto de datos mostrará los precios y los vencimientos de lo que se conoce como bonos de “cupón cero”, es decir, bonos que solo pagan el valor nominal del bono al vencimiento.

Para ejecutar ello tendremos que importar los datos y en ste caso lo haremos mediante el siguiente link https://turing.manhattan.edu/~wfoote01/finalytics/RMD/data/strips_dec95.txt.

data <- read.table("https://turing.manhattan.edu/~wfoote01/finalytics/RMD/data/strips_dec95.txt",header = TRUE)

Luego, para visualizar previamente la base de datos importada, ejecutamos lo siguiente:

head(data,4)
##        T  price
## 1 0.1260 99.393
## 2 0.6219 96.924
## 3 1.1260 94.511
## 4 1.6219 92.070

Se puede observar que tiene dos columnas T, es el periodo al vencimiento y price, que son los precios de los bonos cupón 0.

Continuando, se procede a ordenar la base de datos según la fecha de venciminto.

data <- data[order(data$T), ]
data
##         T  price
## 1  0.1260 99.393
## 40 0.3699 98.155
## 2  0.6219 96.924
## 41 0.8740 95.717
## 3  1.1260 94.511
## 42 1.3699 93.215
## 4  1.6219 92.070
## 43 1.8740 90.852
## 5  2.1260 89.644
## 44 2.3699 88.481
## 6  2.6219 87.295
## 45 2.8740 86.140
## 7  3.1260 84.949
## 46 3.3699 83.797
## 8  3.6219 82.698
## 47 3.8740 81.549
## 9  4.1260 80.427
## 48 4.3699 79.377
## 10 4.6219 78.293
## 49 4.8740 77.251
## 11 5.1260 76.121
## 50 5.3699 75.033
## 12 5.6219 73.990
## 51 5.8740 72.927
## 13 6.1260 71.905
## 52 6.3699 71.036
## 14 6.6219 69.984
## 53 6.8740 68.868
## 15 7.1260 67.769
## 54 7.3699 66.735
## 16 7.6219 65.733
## 55 7.8740 64.715
## 17 8.1260 63.645
## 56 8.3699 62.633
## 18 8.6219 61.707
## 57 8.8740 60.776
## 19 9.1260 59.828
##  [ reached 'max' / getOption("max.print") -- omitted 80 rows ]

Graficamos la data importada, pero antes llamamos a la libreria correspondiente y renombramos las variables para un mejor entendimiento Price=P0 y T=T.

library(tidyverse)
colnames(data) <- c("T","P0")

data
##         T     P0
## 1  0.1260 99.393
## 40 0.3699 98.155
## 2  0.6219 96.924
## 41 0.8740 95.717
## 3  1.1260 94.511
## 42 1.3699 93.215
## 4  1.6219 92.070
## 43 1.8740 90.852
## 5  2.1260 89.644
## 44 2.3699 88.481
## 6  2.6219 87.295
## 45 2.8740 86.140
## 7  3.1260 84.949
## 46 3.3699 83.797
## 8  3.6219 82.698
## 47 3.8740 81.549
## 9  4.1260 80.427
## 48 4.3699 79.377
## 10 4.6219 78.293
## 49 4.8740 77.251
## 11 5.1260 76.121
## 50 5.3699 75.033
## 12 5.6219 73.990
## 51 5.8740 72.927
## 13 6.1260 71.905
## 52 6.3699 71.036
## 14 6.6219 69.984
## 53 6.8740 68.868
## 15 7.1260 67.769
## 54 7.3699 66.735
## 16 7.6219 65.733
## 55 7.8740 64.715
## 17 8.1260 63.645
## 56 8.3699 62.633
## 18 8.6219 61.707
## 57 8.8740 60.776
## 19 9.1260 59.828
##  [ reached 'max' / getOption("max.print") -- omitted 80 rows ]
plot(data$T, data$P0, main = "STRIPS", 
     xlab = "Maturity", ylab = "Price")

LA CURVA EMPIRICA FORWARD

Se estima de la siguiente manera:

\[\frac{−∆log(P(Ti))}{∆Ti}= \frac{−log(P(Ti)) − log(P(Ti−1))}{Ti − Ti−1}\]

Donde P es el precio del bono y T, es el vencimiento.

A continuación, graficaremos, pero primero creareamos una secuncia de 0 a 30, con una longitud de 100, dicho vector será usado más adelante para graficar los modelos. Por otro lado se ejecuta el codigo mostrado lineas arriba, para poder graficar la curva forward.

t <- seq(0, 30, length = 100)
emp <- -diff(log(data$P0))/diff(data$T)

EJECUTAR EL EJERCICIO

Graficamos

plot(data$T[2:length(data$T)],emp, 
     ylim = c(0.025,0.075), 
     xlab = "maturity", ylab = "empirical forward rate", cex = 0.75, lwd = 1,
     type = "l",
     main = "US Treasury STRIPs - 1995")

Antes de seguir continuadno, es necesario responder a estas preguntas:

  1. ¿Qué hará exactamente \(data\$T[2: length (data\$T)]\) cuando se ejecute?
length(data$T)
## [1] 117
head(data$T[2:length(data$T)])
## [1] 0.3699 0.6219 0.8740 1.1260 1.3699 1.6219

Recuperamos el vector T del marco de datos usando \(data\$T\). Luego, la longitud devuelve el número de vencimientos en el marco de datos. \(data\$T[2: length (data\$T)]\) trunca la primera observación. Debido a que diferenciamos los precios para obtener las tasas forward y necesitamos alinear las tasas forward con sus respectivos vencimientos \(T_i\).

  1. ¿Qué efecto tendrán ylim, lwd, xlab, ylab, type, cex, main en la trama?
  • ylim es el rango de los ejes y
  • lwd cambia el ancho de línea
  • xlab especifica la etiqueta del eje x
  • ylab especifica la etiqueta del eje y
  • type especifica la linea
  • cex cambia la escala de texto y simbolos
  • main especifica el título de la trama
plot(data$T[2:length(data$T)], emp,
      ylim = c(0.025, 0.075), xlab = "maturity",  xlim = c(0,30),
     ylab = "empirical forward rate", cex = 0.75, lwd = 1, type = "b",
     pin = c(3, 2), main = "US Treasury STRIPS - 1995")

  1. ¿Hay una ruptura en la curva? Escriba el comando de trazado para ampliar los vencimientos de 10 a 20 años.
plot(data$T[2:length(data$T)], emp, 
     xlim = c(10,20), ylim = c(0.025, 0.075), xlab = "maturity", 
     ylab = "empirical forward rate", cex = 0.75, lwd = 1, type = "b",
     pin = c(3, 2), main = "US Treasury STRIPS - 1995")

En \(T_i=14\) se puede observar un valor atípico y además en el \(T_i=11\), y hay un corte en \(T_i=15\) en el cual se puede observar que hay punto de quiebre, por lo tanto, exite la posibilidad de una necesidad de un spline, un spline es una curva diferenciable definida en porciones mediante polinomios, esto quiere decir que en la siguiente sección construiremos una curva mediante un spline, ello se ejecutará con la finalidad qu no haya cortes en la curva y se observe una curva más definida.

-

-

-

CONTRUYENDO UNA CURVA MEDIANTE UN SPLINE

En esta sección contruyemos un “kink”(una forma de hacer que se forme un giro o una curva pronunciada) en la curva de rendimiento que permite dos funciones cuadráticas diferentes: una antes del “kink” y una después del “kink”. Supongamos que el “kink” es en el nudo K en \(T_i=15\). Se va evaluar el nudo como 0 si los vencimientos \(T_i-K<0\), e igual a \(T - k\) si \(T-k>0\). Se scribe como \((T-k)+\). Para realizar todo ello pasemos el nudo a nustra integral:

\[ ∫_{T}^{0}r(t,θ)dt=θ_0T+θ_1\frac{T^2}{2}+θ_2\frac{T^3}{3}+θ_2\frac{(T−15)^3+}{3}\]

Ahora se puede divir entre \(T\) para obtener la tasa. Pero para calcular el precio del bono, se tiene que multiplicar la tasa por la madurez del bono \(T\), asi que el precio del bono queda de la siguiente manera:

\[P_T(θ)=100exp[−(θ_0T+θ_1\frac{T^2}{2}+θ_2\frac{T^3}{3}+θ_2\frac{(T−15)^3+}{3})]\] A continuacíón, se pasará a estimar las thetas \(θ\).Pero el precio del bono no es lineal en los parámetros \(θ\), así que ahora se tendrá que encontrar un conjunto de tethas tal que la diferencia entre los precios reales de los bonos \(P\) y nuestro modelo de precios de los bonos sea muy pequeña, esto quiere decir que la suma de las diferencias al cuadrado (los errores) sean minimos, por ello se buscaron los \("θ"\) que minimecen los errores.

\[\sum_{i=0}^{N} [(P(T_i)-P(T_i,θ)]^2\] Ahora para encontrar el mejor conjunto \(θ\) se tiene que utilizar la función \(nls\) esto se utiliza para determinar las estimaciones de mínimos cuadrados no lineals(ponderadas) de los parámetros de un modelo no linenal.

Para encontrar \(θs\), tenemos que tener claro que la expresión logica \((T>k)\) es 1 si es \(TRUE\) y 0 si es \(FALSE\). Ponemos la función \(nls\) en R, seguido del precio del bono \(P0\) junto con las especificaciones de la data de la data frame y los valores iniciales.

Ahora corremos el codigo para calcular la regresión no lineal de la estructura de terminos:

fit.spline<-nls(P0~100*exp(-theta_0*
            T-(theta_1*T^2)/2-(theta_2*
            T^3)/3-(T>15)*(theta_3*(T-
            15)^3)/3),data=data,start=list(theta_0=0.047,
            theta_1 = 0.0024, theta_2 = 0, theta_3 = -7e-05))

A continuación, se contestará algunas preguntas para un mejor entendimiento del codigo ejecutado:

1. ¿Cúales son las variables dependientes e independientes?

La variable dependiente es el precio \(P0\) y las variables independientes son aquellas que están dentro del \(exp()\) e incluyen potencias de T, los vencimientos de los bonos.

2. ¿Qué parámetros mide la sensibilidad de las tasas forward del knot(nudo o punto de quiebre)?

El párametro \(theta\_3\) expone el precio del bono a movimientos en el vencimiento alrededor del “knot” a \(T=15 años\), así que este párametro mide la sensibilidad de la tasa forward del “knot” \(T=15\).

Para un mejor entendimiento de lo explicado, se usará la función \(kable()\), está es una función que devuelve una única tabla para un único objeto de datos y devuelve de una tabla que contiene varias tablas si el objeto de entrada es una lista de objetos de datos, dicha funcíón es del paquete \(knitr\), primero tenemos que llamar la libreria \(knitr\) para luego usar la función.

library(knitr)
kable(summary(fit.spline)$coefficients,
      digits=4)
Estimate Std. Error t value Pr(>|t|)
theta_0 0.0495 1e-04 536.5180 0
theta_1 0.0016 0e+00 51.5117 0
theta_2 0.0000 0e+00 -13.6152 0
theta_3 -0.0002 0e+00 -30.6419 0

Se puede observar que todas las varibles independientes son significativas ya que son menores a 0.05 por lo tanto se puede decir que se rechaza la HO= de no significancia de los \(θs\).

(sigma <- (summary(fit.spline)$sigma)^0.5)
## [1] 0.2582649

Ahora se puede conluir que todos los coeficientes son significativos y se tiene un error estándar para comparar con otros modelos.

CONSTRUIMOS UN “SPLINE”

En esta sección se va construir una gráfica de nuestros resultados obtenidos en las secciones superiores, para ello se usará una secuencia de vencimientos \(T\). Primero se va extraer los coficientes del ajustes del spline \(nls()\) para luego construir la predicción de spline. Ahora construimos un “spline” de la tasa forward a través de la vencimientos \(T\), considerando que el \(k=15\)

summary(fit.spline)$coefficients
##              Estimate   Std. Error   t value      Pr(>|t|)
## theta_0  0.0494733810 9.221198e-05 536.51796 2.635140e-194
## theta_1  0.0016052611 3.116306e-05  51.51166  2.591892e-80
## theta_2 -0.0000247765 1.819773e-06 -13.61516  1.414405e-25
## theta_3 -0.0001763482 5.755135e-06 -30.64188  1.430425e-56
coef.spline <- summary(fit.spline)$coef[,1]
coef.spline
##       theta_0       theta_1       theta_2       theta_3 
##  0.0494733810  0.0016052611 -0.0000247765 -0.0001763482
forward.spline <- coef.spline[1] + (coef.spline[2] *t) +(coef.spline[3] * t^2) +(t > 15 ) * (coef.spline[4] * (t - 15)^2)
plot(t, forward.spline, lwd = 2,
ylim = c(0.03, 0.075), xlab = "Maturity",
ylab = "Forward Rate", main = "US Treasury STRIPs Forward Curve: 1995")

Ahora recordemos que un término “cúbico” representa la integración de los terminos al “cuadrado”:

\[r(t,θ)= θ_0+θ_1+θ_2t^2\]

fit.quad <- nls(P0 ~ 100 * exp(-theta_0 *
            T - (theta_1 * T^2)/2 - (theta_2 * 
            T^3)/3), data = data, start = list(theta_0 = 0.047,
            theta_1 = 0.0024, theta_2 = 0))

Esta estimación nos da una función cuadrática a través de la conjunto de datos de los precios de cupón cero.

A continuación, usamos de nuevo la funcion “kable”, para ver la tabla:

knitr::kable(summary(fit.quad)$coefficients,
digits = 4)
Estimate Std. Error t value Pr(>|t|)
theta_0 0.0475 2e-04 239.0168 0
theta_1 0.0024 1e-04 46.5464 0
theta_2 -0.0001 0e+00 -33.0016 0

Se puede observar que todos los coeficientes son significativos, lo corroboramos de la siguiente ,manera:

(sigma <- (summary(fit.quad)$sigma)^0.5)
## [1] 0.4498518

El modelo cuadrático puro produce una desviación estándar de error más alta que la spline cuadrática.

Ahora graficamos, pero antes se tiene configurar los datos para un gráfico.

coef.quad <- summary(fit.quad)$coef[,1]

forward.quad <- coef.quad[1] + (coef.quad[2] *
t) + (coef.quad[3] * t^2)
plot(t, forward.spline, type = "l", lwd = 2,
ylim = c(0.03, 0.075), xlab = "Maturity",
ylab = "Forward Rate", main = "US Treasury STRIPs Forward Curve: 1995")
lines(t, forward.quad, lty = 2, lwd = 2,
col = "red")

points(data$T[2:length(data$T)], emp, pch = "*",
cex = 1.5)

En base al grafico, se podría analizar que datos se pierden o salen de la curva cuadrática forward. Se puede ver que los arteriscos que salen de la curva roja son aquellos valores atipicos que salen de la curva.

INTERPRETACIÓN

Parece que hay tres componentes en la curva forward:

  • constante
  • Pendiente
  • Curva o “joroba”

Nuestra interpretación sigue lo que podemos visualizar:

  • \(θ_0\) es independiente del vencimiento y, por lo tanto, representa la tasa de interés promedio a largo plazo.

  • \(θ_1\) ayuda a medir la sensibilidad promedio de las tasas forward a un cambio en la madurez.

  • \(θ_2\) ayuda a medir el riesgo de vencimiento de la curva de avance para este instrumento.

La curva forward cuadrática pura parece reducir drásticamente los vencimientos superiores a 15 años. El uso de un “knot” en la madurez correcta agrega un impulso a la reducción del error en esta regresión. Eso significa que las predicciones de futuras estructuras de términos potenciales serán susceptibles de ser más precisa que la hipótesis nula de no “knot”.