ESTRUCTURA TEMPORAL DE LA TASA DE INTERÉS
5.2 UNA INTRODUCCIÓN A LOS BONOS
Los bonos son títulos valor que pagan, generalmente, intereses periódicos, a los cuales se les denomina cupones. Otra característica es que estos títulos son emitidos con vencimientos mayores a un año. En un contrato de bonos se especifican todos los derechos y obligaciones del emisor y tenedor de bonos del activo de renta fija; se definen las bases de todas las futuras transacciones entre el emisor y el inversionista; y e incluye los convenants negativos (prohibiciones del prestatario, como las restricciones en la venta del activo) y covenants positivos (acciones que el prestatario promete cumplir).
Para plasmar la teoría en una expresión matemática debemos definir algunos parámetros propios de dicha expresión
• \(c\): La tasa cupón
• \(P\): El valor facial del bono
• \(y\): La tasa de rendimiento nominal
• \(m\): La capitalización de la tasa de interes de descuento del bono
• \(Tm\): El periodo efectivo
La formula seria la siguiente:
\[ V= \sum_{t=0}^{Tm} \dfrac{cP}{\left(1+\frac{y}{m}\right)^{t}} + \dfrac{P}{\left(1+\frac{y}{m}\right)^{Tm}} \]
Notas:
• Debido a que el termino capitalización (\(m\)) se emplea en estos parámetros debemos aclarar que la capitalización es, desde el modo más simple de ver, el periodo donde se aumentara un monto determinado, esto es, si una cantidad se capitaliza semestralmente a una determinada tasa de interés este aumentara “nominalmente” cada semestre. Entonces la capitalización de la tasa de interés debe ir de la mano con el periodo dato, si es una tasa trimestral y se evalúa un periodo de un año entonces tendrán 4 periodos efectivos donde la tasa se capitalizará, es por ello que aparece la notación.
• De parte de la tasa cupón (\(c\)) se tiene un análisis similar, pues al darse una tasa cupón cada 6 meses y tener una tasa cupón anual, el cálculo correcto es dividir esa tasa entre 2 (debido a que el año tiene 2 periodos de 6 meses). En ese sentido la tasa cupón observada en la ecuación es “la tasa de cupón efectiva” con la que se calcula el valor del cupón.
• El periodo \(Tm\) es dado efectivamente, es decir, es el periodo relativo por la capitalización, si se tiene un periodo de dos años y una capitalización semestral tienes un total de 4 periodos “efectivos” este también se asocia al pago de los cupones que generalmente se dan en pagos semestrales, este tema en específico suele generar confusión, pero esta es brindada por la notación mas no por la práctica.
Esta fórmula se puede operar para no tener una sumatoria, lo que hace más fácil programar una función que no necesite bucles, para ello extraemos el siguiente factor de la formula planteada:
\[ \sum_{t=0}^{Tm} \dfrac{cP}{\left(1+\frac{y}{m}\right)^{t}}\]
Ahora procederemos a operarla
\[ \sum_{t=0}^{Tm} \dfrac{cP}{\left(1+\frac{y}{m}\right)^{t}}= \dfrac{cP}{\left(1+\frac{y}{m}\right)} \sum_{t=0}^{Tm-1} \dfrac{1}{\left(1+\frac{y}{m}\right)^{t}} = \dfrac{cP}{\left(1+\frac{y}{m}\right)} \sum_{t=0}^{Tm-1} \left(\dfrac{1}{\left(1+\frac{y}{m}\right)}\right)^{t}\]
Tomemos atención al siguiente factor:
\[\sum_{t=0}^{Tm-1} \left(\dfrac{1}{\left(1+\frac{y}{m}\right)}\right)^{t} \]
Vemos que tiene la forma de una progresión geométrica cuya resolución es la siguiente:
\[\sum_{i=0}^{I} r^{i} = \dfrac{1-r^{I+1}}{1-r}\]
Aplicamos la formula y tenemos:
\[\sum_{t=0}^{Tm} \dfrac{cP}{\left(1+\frac{y}{m}\right)^{t}}= \dfrac{cP}{\left(1+\frac{y}{m}\right)} \dfrac{1-\frac{1}{\left(1+\tfrac{y}{m}\right)^{Tm}}}{1-\frac{1}{\left(1+\tfrac{y}{m}\right)}} = \dfrac{cP}{\left(1+\frac{y}{m}\right)} \dfrac{\left(1-\left(1+\frac{y}{m}\right)^{-Tm}\right)}{\left(1-\left(1+\frac{y}{m}\right)^{-1}\right)}\]
Desarrollando tenemos:
\[\sum_{t=0}^{Tm} \dfrac{cP}{\left(1+\frac{y}{m}\right)^{t}}= cP \dfrac{\left(1-\left(1+\frac{y}{m}\right)^{-Tm}\right)}{\left(\frac{y}{m}\right)} = cP \left(\dfrac{1}{\left(\frac{y}{m}\right)}-\dfrac{1}{\left(\frac{y}{m}\right)\left(1+\frac{y}{m}\right)^{Tm}}\right)\]
Reemplazando el factor en la formula general del Bono obtenemos:
\[V= cP \left(\dfrac{1}{\left(\frac{y}{m}\right)}-\dfrac{1}{\left(\frac{y}{m}\right)\left(1+\frac{y}{m}\right)^{Tm}}\right) + \dfrac{P}{\left(1+\frac{y}{m}\right)^{Tm}}\]
Nota:
• La notación del libro electrónico brindado en clase introduce la variable \(m\) dividiendo a la tasa cupón \(c\), cabe aclarar que en los ejemplos planteados en el libro asumen una tasa anual del cupón que se paga semestralmente, es por ello que para el cálculo se divide entre \(m\) (número de periodos en un año) que es mismo número que capitaliza el interés en el año, por este motivo también divide a la tasa de interés \(y\). Debemos dar advertencia que esta notación puede generar problemas porque estos dos valores no siempre van a coincidir, basta alterar el ejemplo planteado con indicar que te dan la tasa cupón semestral, con lo cual no hará falta agregar la división entre \(m\); a la vez otro tipo de alteración es la que se podría ocasionar con el aumento de capitalización de la tasa de descuento.
Ahora empleamos el siguiente código para la formula general:
#-----------------------------------------------------------------------------------------
# Primera Formula
#-----------------------------------------------------------------------------------------
v.bond <- function(c,P,y,m,T) { # En esta parte del código se asigna el nombre de la función y los parametros empleados.
Tm <- seq(1,m*T,by=1) # Aca se define una secuencia que va desde uno hasta el número de periodos en los cuale habrá un flujo de caja.
sum((c/m)*P/(1+y/m)^(Tm))+P/((1+y/m)^(m*T)) # Acá se define la formula general descrita anteriormente, aquella que incluye la sumatoria.
}
v.bond(0.05, 100, 0.04, 2, 10) # Esta parte del código simplemente emplea la función definida.## [1] 108.1757
Ahora empleamos el siguiente código para la segunda formula derivada a partir de la primera:
#-----------------------------------------------------------------------------------------
# Segunda Formula
#-----------------------------------------------------------------------------------------
v.bond.1 <- function(c, p, y, m, T){ # En esta parte del código se asigna el nombre de la función y los parámetros empleados.
#Para la segunda formula debido a que no se necesita un ciclo o definir secuencias solo se calculará por separado los valores:
coupon <- ((c/m) * p) * ((1 / (y / m)) - (1 / ((y / m) * (1 + (y / m))^(T * m)))) #En esta parte se calcula el valor asignado al descuento de los cupones
facial.value <- p / ((1 + (y / m))^(T * m)) #En esta parte se calcula el valor asignado al descuento del valor facial.
value.bond <- coupon + facial.value # Con este comando se suman los dos valores anteriormente calculados para obtener el valor presente del bono.
return(value.bond) # Acá retorna el valor resultante de la función.
}
v.bond.1(0.05, 100, 0.04, 2, 10) # Esta parte del código simplemente emplea la función definida.## [1] 108.1757
Como se puede observar los valores son iguales por ello se puede usar ambas formulas.
5.2.1 Un ejemplo rápido
Surge la siguiente duda al ver el ejemplo planteado anteriormente: ¿por qué el precio es mayor que el valor nominal?
En este sentido para clarificar la tendencia del valor presente del bono de acuerdo con la variación de tasa de interés se calculará con los valores :(-0.02, -0.01, 0.00, .01, .02).
Una primera respuesta puede ser la siguiente:
El bono se paga a una tasa mayor que la requerida en el mercado. Los compradores pagan más de lo normal para compensar la diferencia.
Ahora observemos los resultados cuando aplicamos las distintas tasas de interés:
Diferentes.tasas<- c(v.bond(0.05, 100, -0.02, 2, 10), v.bond(0.05, 100, -0.01, 2, 10),v.bond(0.05, 100, 0.00, 2, 10),v.bond(0.05, 100, 0.01, 2, 10),v.bond(0.05, 100, 0.02, 2, 10))
# En este código asignamos los distintos precios de los bonos, obtenidos a través de la función creada, a un vector para mejorar la visualización de los datos.
Diferentes.tasas## [1] 177.9215 163.2689 150.0000 137.9748 127.0683
Como se puede apreciar, a medida que la tasa de interés se acerca a la tasa cupón esta tiende al valor facial, de la misma manera cuando la misma es crecientemente menor que la tasa cupón el valor presente del bono aumenta.
5.2.2 ¿Qué es un Spline?
Las funciones son las herramientas matemáticas básicas para describir y analizar muchos procesos de interés. Si bien en algunos casos estas funciones se conocen explícitamente, con mucha frecuencia es necesario construir aproximaciones a ellas basadas en información limitada sobre los procesos subyacentes. Tales problemas de aproximación son una parte central de las matemáticas aplicadas. Hay dos categorías principales de problemas de aproximación.
La primera categoría consiste en problemas en los que se requiere construir una aproximación a una función desconocida basada en una cantidad finita de datos (a menudo mediciones) sobre la función. Llamamos a estos problemas de ajuste de datos. En tales problemas, los datos a menudo están sujetos a error o ruido, y, además generalmente no determinan la función de manera única. Los problemas de ajuste de datos surgen en prácticamente todas las ramas del esfuerzo científico.
La segunda categoría principal de problemas de aproximación surge de modelos matemáticos para varios procesos. Como estos modelos generalmente involucran ecuaciones de operador que determinan la función desconocida, nos referimos a ellos como problemas de ecuación de operador. Los ejemplos incluyen problemas de valor límite para ecuaciones diferenciales ordinarias y parciales, problemas de función propia de valor propio, ecuaciones integrales, problemas de control óptimo, etc. Si bien hay muchos resultados teóricos sobre la existencia, la unicidad y las propiedades de las soluciones de tales ecuaciones de operador, por lo general, solo los problemas específicos más simples pueden resolverse explícitamente. En la práctica, generalmente tendremos que construir soluciones aproximadas.
En este marco se menciona lo que se conoce como “spline”, que es una función que se construye por partes a partir de funciones polinómicas, donde nuestro tema de interés es la estructura temporal de la tasa de interés. Ahora postulemos que los polinomios son partes de la estructura temporal de la tasa de interés. Cada segmento está marcado por un conjunto de pares de precios y vencimientos. Secciones completas se pueden marcar con un nudo en una ubicación de los datos emparejados. Los nudos se colocan comúnmente en cuantiles para colocar más nudos donde los datos se agrupan juntos. Se estima una función polinómica diferente para cada rango y dominio de datos entre cada nudo: esta es la spline.
Recordemos como es una función polinomial:
\[f(x)=a_0x^0+a_1x^1+a_2x^2+...+a_px^p\]
5.2.3 Volviendo al Bono
Ahora supongamos una bono tal, que no pague los cupones, sino el valor facial al término del contrato, a los bonos con esta característica se les denomina bonos cupón cero y la forma de calcular el valor presente es la siguiente:
\[P_T=\frac{F_{value}}{(1+y^d(T))^T}\]
Donde: \(F_{value}\) es el valor facial \(y^d(T)\) es el interés \(T\) es el periodo de tiempo que se descontará el bono
Haremos una suposición simple, por contrato el valor que se devolverá será de 1$, esto significa que el monto del bono más el interés ganado tendrá el valor de un dólar como lo plantea la siguiente ecuación:
\[P+yP=P(1+y)=1\]
Resolviendo la ecuación tenemos:
\[P=\frac{1}{(1+y)^1}\]
Ahora supongamos que podemos recibir intereses dos años, para ello el interés tendrá que ser la mitad como se muestra en la siguiente expresión:
\[P\left(1+\frac{y}{2}\right)\]
Recordemos que ahora el interés se paga dos veces por ello se plantea la siguiente ecuación:
\[P\left(1+\frac{y}{2}\right)+\frac{y}{2}\left[P\left(1+\frac{y}{2}\right)\right]=P\left(1+\frac{y}{2}\right)\left(1+\frac{y}{2}\right)=P\left(1+\frac{y}{2}\right)^2\]
La resolución al compararlo con el valor presente sería la siguiente:
\[P\left(1+\frac{y}{2}\right)^2=1\]
Al desarrollar la ecuación tenemos el valor de \(P\):
\[P=\frac{1}{\left(1+\frac{y}{2}\right)^2}\]
De manera general podemos asumir que cuando se paga intereses “\(m\)” veces la formula con la que se calcula el valor presente será:
La variable \(m\) es la capitalización de la tasa de interés, este concepto se mencionó al principio del documento y en esta sección se desarrolló de manera intuitiva.
Ahora suponga que la capitalización se hace cada minuto, es decir se tiene un \(m=360 \times 24 \times 60= 525600\), además que se tiene un interés del 100%, la ecuación quedaría de esta manera:
\[P=\dfrac{1}{\left(1+\frac{1}{525600}\right)^{525600}}\]
Para obtener este valor ejecutamos el siguiente código:
m <- (365 * 24 * 60) #se asigna el valor al parámetro m
y <- 1 #se define el interés del 100%
P <- 1/(1 + (y/m))^m ; P #se genera la ecuación para calcular el valor presente y se llama el resultado## [1] 0.3678798
Como se puede intuir a medida que aumenta la capitalización el valor presente (manteniéndose los otros parámetros invariantes) tiende a un monto específico, como se procederá demostrar se puede obtener una formula a partir de que la capitalización tiende al infinito, es decir se tiene una capitalización continua.
El valor presente de un bono cupón cero en términos genéricos con una capitalización “\(m\)” se calcula de la siguiente forma:
\[P_{T_{dis}}= \dfrac{F_{value}}{\left(1+ \frac{y}{m}\right)^{Tm}}\]
Operando un poco se tiene la siguiente expresión:
\[P_{T_{dis}}= F_{value}\left(1+\frac{y}{m}\right)^{-Tm}\]
Para obtener una capitalización continua se toma el límite cuando esta tiende al infinito:
\[P_{T_{cont}}= \lim_{m \to \infty} F_{value} \left(1+ \frac{y}{m}\right)^{-Tm}\]
Realizamos una serie de artificios matemáticos:
\[P_{T_{cont}}= F_{value} \lim_{m \to \infty} \left(1+ \dfrac{1}{\frac{m}{y}}\right)^{-Tm \left(\frac{y}{y}\right)}\]
\[P_{T_{cont}}= F_{value} \left(\lim_{m \to \infty} \left(1+ \dfrac{1}{\frac{m}{y}}\right)^{\frac{m}{y}}\right)^{-Ty}\]
Ahora realizaremos un cambio de variable
\[\frac{m}{y}= n\]
\[\lim_{m \to \infty} \tfrac{m}{y} = n = \lim_{n \to \infty} n = \infty \]
Entonces la ecuación quedará de la siguiente manera:
\[P_{T_{cont}}= F_{value} \left(\lim_{n \to \infty} \left(1+ \dfrac{1}{n}\right)^{n}\right)^{-Ty}\]
Recordemos la definición matemática del número de Euler:
\[\lim_{n \to \infty}\left(1+ \frac{1}{n}\right)^{n}= e \approx 2,71828...\]
Entonces reemplazando en la ecuación obtenemos la fórmula para calcular el valor presente con una capitalización continua:
\[P_{T_{cont}}= F_{value} e^{-Ty}\]
Ahora veremos una aplicación práctica en R para ver la diferencia y como varia el valor actual del bono a medida que aumenta la capitalización, para ello definiremos estas dos funciones:
#-----------------------------------------------------------------------------------------
# Valuación Discreta
p.bond.zero <- function(Fv, y, m, T){
facial.value1 <- Fv / ((1 + (y / m))^(T * m))
value.bond1 <- facial.value1
return(value.bond1)
}
#-----------------------------------------------------------------------------------------
# Valuación Continua
P.bond.cont <- function(Fv, y, T){
facial.value2 <- Fv*exp(-y*T)
value.bond2 <- facial.value2
return(value.bond2)
}Usamos los datos de los ejemplos anteriores y solo variaremos la capitalización:
#-----------------------------------------------------------------------------------------
# Valuación Discreta
x1<- c(p.bond.zero(100, 0.05, 2, 10), p.bond.zero(100, 0.05, 10, 10), p.bond.zero(100, 0.05, 20, 10), p.bond.zero(100, 0.05, 30, 10), p.bond.zero(100, 0.05, 100, 10), p.bond.zero(100, 0.05, 1000, 10)) ; x1## [1] 61.02709 60.72868 60.69092 60.67832 60.66065 60.65382
#-----------------------------------------------------------------------------------------
# Valuación Continua
P.bond.cont(100, 0.05, 10)## [1] 60.65307
Como se observa el valor presente tiende a un valor, en manera de símil, cuando se tiene un interés que se capitaliza continuamente se aumenta el “valor ganado” pero este no tiende al infinito, cuando se descuenta continuamente el valor presente va disminuyendo, pero no hasta hacerse 0, sino que tiende a un valor.
Nota:
• La diferencia clara entre ambos descuentos, continuo y discreto, se da en base a la capitalización que tienen, mientras más capitalización se tiene más descuentos para traerlos al presente, en este sentido a más capitalizaciones se tiene un menor valor presente, lo que implica una valoración más concordante con la realidad. En otras palabras, el descuento discreto tiene periodos discretos para descontar y la continua tiene periodos continuos para descontar.
• Si se tiene un bono con cupones se puede tratar los cupones como flujo independiente, es decir, como “minibonos” que usaran la misma fórmula para traer el valor al presente con capitalización continua.
Salto de Fé:A partir de ahora, para ahorrar la extensión del documento se asumirá que el lector tiene conocimiento del cálculo de las tasas forward, una noción del empleo de esta en tiempo discreto y la vez la derivación hacia el tiempo continuo.
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 toda la 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)}\) de la \(T\) el vencimiento con:
\[-\frac{\Delta\log(P_{(t_i)})}{\Delta T_i}=-\frac{log(P_{(T_i)})-log(P_{(T_{i-1})})}{T_i-T_{i-1}}\]
El \(Δ\) representa la diferencia en un precio o vencimiento \(i\) y el precio y vencimiento anterior \(i − 1\). La función \(log()\) es el logaritmo natural. Más adelante se verá un ejemplo. Cabe recalcar que para el cálculo de tasas en el futuro se usa las tasas forward.
El rendimiento de un bono cupón cero es entonces el promedio de las tasas forward desde la fecha 0 hasta la fecha \(T\). Usamos la integral, que equivale a una suma acumulativa, para calcular este promedio (aca se utiliza la transformación de tasas forward en tiempo discreto a tiempo continuo para demostrar la ecuación).
\[y_T(\theta)=T^{-1}\int_{0}^{T}r_{(t,\theta)}dt.\]
El numerador es la suma acumulativa de las tasas a plazo para cada vencimiento hasta el último vencimiento \(T\). En esta expresión, \(r_{(t,\theta)}dt\) es la tasa a plazo a través de un pequeño movimiento en el vencimiento (la noción de variación en tiempo continuo es la diferencial). El denominador es el número de años de vencimiento \(T\).
5.2.4 Un ejemplo para clarificar
Para el ejemplo práctico seguiremos las indicaciones del libro electrónico.
Se empezará con lo siguiente:
#-----------------------------------------------------------------------------------------
# Primero definimos las variables
maturity <- c(1, 5, 10, 20, 30) # en años
price <- c(99, 98, 96, 93, 89) # en porcentaje del valor facialA. Ahora se procederá a experimentar con estos precios de cupón cero con sus respectivos vencimientos:
- Al calcular \(\frac{log(price)}{100}\). Luego calcularemos las tasas forward usando el siguiente código:
#-----------------------------------------------------------------------------------------
# Ahora se codifica la formula planteada
forward <- -diff(log(price))/diff(maturity) #La función diff hace que se tenga una diferencia con el consecutivo superior inmediato del vector, al hacer eso ejecutamos la formula planteada en la sección anterior.2. Comparar log(price) con price.
- ¿Qué indica la fórmula de tasa a plazo? ¿Para qué lo usaríamos?
B. Encuentre la curva de rendimiento hasta el vencimiento y recupere los precios de los bonos utilizando los siguientes códigos:
forward.initial <- -log(price[1]/100) # Con este comando sacamos el forward inicial, es decir cuando la variación del tiempo es 1, por ello solo se tiene el negativo del logaritmo natural del precio, se divide entre 100 porque tiene que ser expresado en terminos porcencuales
forward.integrate <- c(forward.initial, # Ahora se procedera a calcular "la integral" en este sentido, se crea un vector con el forward inicial como primer valor y el segundo es la suma del primero mencionado y una suma acumulativa entre el froducto de los valores del forward y la diferenciacion de la maduración.
forward.initial + cumsum(forward *
diff(maturity)))
price <- 100 * exp(-forward.integrate) # Es esta expresión del precio ya se utiliza el valor facial del bono y una tasa de interes de 100%1. ¿Cuál es la interpretación del forward.integrate vector?
¿Qué pasó con el primer precio del bono?
¿Recuperamos los precios originales?
Para contestar la sección A, corremos las tasas a plazo. Ejecutemos el logaritmo natural de price:
## [1] 0.01005034 0.02020271 0.04082199 0.07257069 0.11653382
-log(price/100) parece darnos el rendimiento hasta la madurez directamente. Pero mira el -diff(log(price)) siguiente:
## [1] 0.01015237 0.02061929 0.03174870 0.04396312
Estos resultados 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.
Ahora calculemos:
## [1] 0.01010101 0.02040816 0.03125000 0.04301075
Estos son cambios porcentuales discretos que son similares, pero no iguales, que la \(log()\) (versión continua). Observe 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})}\]
5.2.5 Ejecutando la Integración
Al ejecutar el código para la sección B obtenemos:
forward.initial <- -log(price[1]/100)
(forward.integrate <- c(forward.initial,
forward.initial + cumsum(forward *
diff(maturity))))## [1] 0.01005034 0.02020271 0.04082199 0.07257069 0.11653382
# ejecutando la integración de las tasas
# a través de los vencimientos
(price <- 100 * exp(-forward.integrate))## [1] 99 98 96 93 89
La “integración” continua es un proceso acumulativo de agregar más tasas de interés a medida que avanza el vencimiento, por lo tanto, se despliega una suma acumulativa en R o un cumsum().
Los rendimientos son la acumulación de tasas forward. Por lo tanto, el uso de la suma acumulativa es una versión discreta de la integral. Las tarifas se suman (en lugar de multiplicarse: una buena característica) cuando usamos log y exp para hacer nuestros 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 en el proceso de producir forwards a partir de los precios y convirtiéndolos en rendimientos; y nuevamente en precios.
5.2.6 Sobre el rendimiento del bono
Reafirmamos la definición del precio de un bono de cupón cero. El precio de un bono de cupón cero cotizado en porcentaje del valor nominal es esta expresión para capitalización discreta (por ejemplo, mensualmente obtiene un porcentaje del saldo del mes pasado):
\[P_T=\frac{100}{(1+y^d(T))^T}\]
Esto se traduce en capitalización continua (obtienes un porcentaje del saldo del último instante al final de este instante …) como:
\[P_T(\theta)=100exp(-y_TT)=100exp\left(\int_0^Tr(t.\theta)dt\right)\]
Este es el valor presente de recibir un flujo de caja del 100% del valor nominal al vencimiento. Si el bono tiene cupones, podemos considerar cada uno de los pagos de cupones como un mini bono cero, como ya se mencionó anteriormente.
El término con el símbolo \(\int\) es una forma de sumar instante a instante las tasas forward a lo largo del vencimiento del bono. Al igualar las dos afirmaciones y resolver para \({y_T}\), el rendimiento compuesto continuo que obtenemos:
\[P_T=\frac{100}{(1+y(T)_d)^T}=100exp(-y_TT)\]
Reorganizar con algo de álgebra creativa “\(100exp(-y_Tt)=1/exp(y_TT)\)” obtenemos:
\[exp(y_TT)=(1+y(T)_d)^T\]
Luego, tomando logaritmos de ambos tamaños obtenemos:
\[exp(y_TT)^{-T}=(1+y(T)_d)^{T-T}=(1+y(T)_d)\]
Usando los hechos que :\(log(exp(x))=xlog(x^T)=Tlog(x)\)
\[log(exp(y_TT)^{-T})=y_T=log(1+y(T)_d)\]
Ahora calculamos las versiones discretas y continuas de tiempo, del rendimiento:
y.T.d <- 0.2499 # Tasa de interés en el estado de Nueva York; d = discreto, T = vencimiento en años
y.T <- log(1 + y.T.d) #En esta sección se aprecia la codificación de la última formula, donde toma el logaritmo natural de la tasa de interés más la unidad.Observamos que el rendimiento continuo en el tiempo siempre es menor que la tasa discreta porque hay muchos más períodos de capitalización continua. Este resultado vuelve a la derivación de Jacob Bernoulli.
5.3 PARÁMETROS DE TASAS FORWARD
Ahora tenemos al ahora misterioso \(\theta\), incrustado en la secuencia de la tasa forward \(r\). Suponemos que la tasa a plazo se compone de una constante a largo plazo \(\theta_0\) ; un término inclinado con parámetro \(\theta_1\); un término más bien proporcionado, incluso “jorobado” con parámetro \(\theta_2\); y así sucesivamente para \(p\) términos polinomiales:
\[r(t,\theta)=\theta_0+\theta_1t+\theta_2t^2+...+\theta_pt^p\]
Recordamos, del cálculo que cuando integramos cualquier variable a una potencia (la antiderivada), elevamos la variable a la siguiente potencia (y dividimos el término por la siguiente potencia). Aquí integramos la tasa forward para obtener:
\[\int_0^Tr(t,\theta)dt=\theta_0T+\theta_1\frac{T^2}{2}+\theta_2\frac{T^3}{3}+...+\theta_p\frac{T^{p+1}}{p+1}\]
Esto es equivalente, de alguna manera, al cálculo de la suma acumulativa de tasas forward a través de pequeños incrementos en el tiempo \(dt\) desde hoy \(t=0\) a la madurez al vencimiento del plazo en \(t=T\). Luego podemos estimar la curva de rendimiento (y luego el precio del bono de cupón cero) utilizando las tasas forward integradas divididas por el vencimiento \(T\) para obtener el rendimiento como:
\[y_T(\theta)=\theta_0+\theta_1\frac{T}{2}+\theta_2\frac{T^2}{3}+...+\theta_p\frac{T^p}{p+1}\]
Antes de continuar, procuraremos revisar algunos datos de la estructura de términos para ver claramente lo que acabamos de calcular.
5.3.1 Estructura Temporal de la Data
Aquí hay algunos datos (muy antiguos) de los US Treasury STRIPS (También conocido como “Comercio separado de intereses registrados y capital de valores”). 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. Hay más información sobre STRIPS en https://www.newyorkfed.org/aboutthefed/fedpoint/fed42.html.
Ejecutamos en R el siguiente código:
dat <- read.table("https://turing.manhattan.edu/~wfoote01/finalytics/RMD/data/strips_dec95.txt",header = TRUE) # Aca extraemos la data
dat <- dat[order(dat$T), ] # Aca ordenamos la data en orden creciente
head(dat,5) #Vemos una pequeña muestra de la 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
Ahora que la data esta ordenada procederemos a graficarla:
plot(dat$T, dat$price, main = "STRIPS", #Este comando grafica los datos de la madurez vs los precios, esto es posible debido a que ordenamos la data.
xlab = "Maturity", ylab = "Price")5.3.2 La Curva Forward Empírica
Estimamos la curva forward empírica usando:
\[-\frac{\Delta\log(P_{(t_i)})}{\Delta T_i}=-\frac{log(P_{(T_i)})-log(P_{(T_{i-1})})}{T_i-T_{i-1}}\]
Donde \(P_{(t_i)}\) es el precio y \(T_i\) es la maduración.
En R ejecutamos el siguiente código:
t <- seq(0, 30, length = 100) # Esta parte del código está generando una secuencia para poder operar de un largo de 100
emp <- -diff(log(dat$price))/diff(dat$T) # Esta parte del código opera las variables para que sigan la formula vista lineas arriba y las coloca en un vector llamado empLa ecuación se traduce a R con la función \(diff\) Usaremos el vector \(t\) más adelante cuando grafiquemos nuestros modelos de la curva forward.
5.3.3 Probaremos un ejecicio
Tracemos las curvas forward empíricas usando el siguiente código:
plot(dat$T[2:length(dat$T)], emp, ylim = c(0.025,
0.075), xlab = "maturity", ylab = "empirical forward rate",
type = "b", cex = 0.75, lwd = 2,
main = "US Treasury STRIPs - 1995")Intente responder estas preguntas antes de continuar:
¿Qué hará exactamente dat\(\$\)T[2:length(dat\(\$\)T)] cuando se ejecute?
¿Qué efecto tendrán ylim, lwd, xlab, ylab, type, cex, main en la función plot?
¿Hay una ruptura en la curva? Escriba el comando de trazado para ampliar los vencimientos de 10 a 20 años. Obtenemos estos resultados:
¿Qué hará exactamente dat\(\$\)T[2:length(dat\(\$\)T)] cuando se ejecute?
## [1] 117
## [1] 0.3699 0.6219 0.8740 1.1260 1.3699 1.6219
Recuperamos el vector \(T\) del marco de datos “dat” usando dat\(\$\)T. Luego, el comando length devuelve el número de vencimientos de “dat”. dat\(\$\)T[2:length(dat\(\$\)T)] trunca la primera observación. ¿Por qué? Debido a que diferenciamos los precios para adelantar las tasas y necesitamos alinear las tasas forward con sus respectivos vencimientos \(T_i\).
5.3.4 Graficando Parametros
Aquí está la lista:
• ylim amplía el rango de datos del eje 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 línea
• cex cambia la escala de texto y símbolos
• main especifica el título del gráfico.
Podemos ir a http://www.statmethods.net/advgraphs/parameters.html para encontrar más información y la respuesta a la pregunta de acercamiento.
5.3.5 La misma gráfica
plot(dat$T[2:length(dat$T)], emp, ylim = c(0.025,
0.075), xlab = "maturity", ylab = "empirical forward rate",
type = "b", cex = 0.75, lwd = 2,
main = "US Treasury STRIPs - 1995")Ahora el acercamiento:
plot(dat$T[2:length(dat$T)], emp, xlim = c(10,
20), ylim = c(0.025, 0.075), xlab = "maturity",
ylab = "empirical forward rate",
type = "b", cex = 0.75, lwd = 2,
pin = c(3, 2), main = "US Treasury STRIPS - 1995")En \(T_i= 14\) parece haber un valor atípico. Más importante aún, hay un descanso en \(T_i= 15\). Este es un nudo natural. Por lo tanto, existe la posibilidad de usar un spline.
5.4 DE VUELTA A NUESTRA HISTORIA
Agreguemos una linea en la curva de rendimiento que permite dos funciones cuadráticas diferentes: una antes de la curva y otra después de la curva. Supongamos que el nudo es un nudo “\(k\)” en \(T_i= 15\). Evaluamos un nudo como 0 si los vencimientos \(T_i−k<0\), e igual a \(T−k\) si \(T−k>0\). Escribimos esto como \((T−k)_+\). Pasemos ahora al nudo en nuestra integral:
\[\int_0^Tr(t,\theta)dt=\theta_0T+\theta_1\frac{T^2}{2}+\theta_2\frac{T^3}{3}+\theta_2\frac{(T-15)_+^{3}}{3}\]
Podemos dividir por \(T\) para obtener el rendimiento. Pero para calcular el precio del bono tenemos que multiplicar el rendimiento por el vencimiento del bono \(T\), entonces el precio del bono es entonces:
\[P_T(\theta)=100 \space exp\left[-\left(\theta_0T+\theta_1\frac{T^2}{2}+\theta_2\frac{T^3}{3}+\theta_3\frac{(T-15)_+^{3}}{3}\right)\right]\]
Después de toda esa configuración ahora pasamos a estimar las thetas.
5.4.1 Hey!, eso no es muy lineal de tu parte…
Sí, el precio del bono no es lineal en los parámetros \(θ\). Nuestro trabajo estadístico ahora es encontrar un conjunto de \(θ\) tal que la diferencia entre los precios reales de los bonos y nuestro modelo inteligente de precios de los bonos (ecuación larga que finalizó la última diapositiva) sea muy pequeña en el sentido de la suma de las diferencias al cuadrado (“errores”). Así encontramos el \(θ\) que minimiza
\[\sum_{i=0}^{N} \left[-\left(P(T_i) - P(T_1,θ\right)\right]^{2}\]
Para encontrar el mejor conjunto de \(θ\) recurriremos a una búsqueda numérica utilizando la función “nls”, para mínimos cuadrados no lineales.
5.4.2 Probando un ejercicio
Volviendo a los datos: ahora encontramos los \(θs\). La expresión lógica \((T> k)\) es 1 si es VERDADERA y 0 si es FALSA. Ponemos la función del precio del bono en la función nls, junto con una especificación del dato del marco de datos y los valores iniciales.
Ejecute estas declaraciones para calcular la regresión (no lineal) de la estructura temporal:
5.4.3 Solo un par de preguntas:
¿Cuáles son las variables dependientes e independientes?
¿Qué parámetro mide la sensibilidad de las tasas de avance al nudo?
La variable dependiente es el precio. Las variables independientes están dentro del operador \(exp()\) e incluyen potencias de \(T\), los vencimientos de los bonos. El parámetro theta_3 expone el precio del bono a movimientos en el vencimiento alrededor del nudo a \(T = 15\) años. Echemos un vistazo a nuestra obra usando kable del paquete knitr:
| Estimate | Std. Error | t value | Pr(>|t|) | |
|---|---|---|---|---|
| theta_0 | 0.0495 | 0.0001 | 536.5180 | 0 |
| theta_1 | 0.0016 | 0.0000 | 51.5117 | 0 |
| theta_2 | 0.0000 | 0.0000 | -13.6152 | 0 |
| theta_3 | -0.0002 | 0.0000 | -30.6419 | 0 |
## [1] 0.2582649
Todos los coeficientes son significativos y tenemos un error estándar para comparar con otros modelos.
5.4.4 Construye una spline
Ahora produzcamos una gráfica de nuestros resultados usando una secuencia de vencimientos T. Nuestra primera tarea es analizar los coeficientes del ajuste de spline “nls()” y construir la predicción del spline. Aquí construimos la spline de la tasa de interés a través de los vencimientos \(T\).
#---------------------------------------------------------------------------------------------------------------------
# Aca postulamos el spline tomando en cuenta un valor de 15 para el K
#---------------------------------------------------------------------------------------------------------------------
coef.spline <- summary(fit.spline)$coefficients[,1]
forward.spline <- coef.spline[1] + (coef.spline[2] * t)+(coef.spline[3] * t^2)+(t>15) * (coef.spline[4] * (t - 15)^2)
#---------------------------------------------------------------------------------------------------------------------
######################################################################################################################
# Procedemos a graficar
######################################################################################################################
plot(t, forward.spline, type = "p", lwd = 2,
ylim = c(0.03, 0.075), xlab = "Maturity",
ylab = "Forward Rate", main = "US Treasury STRIPs Forward Curve: 1995", col = "black")
points(dat$T[2:length(dat$T)], emp, pch = "*",
cex = 1.5)