1 votos

Duración empírica y convexidad de los bonos mediante regresión lineal

Tengo una serie temporal dada de rendimientos de bonos de Quandl. De la serie temporal, he tomado una muestra para simular una trayectoria de los rendimientos de los bonos por Monte Carlo en Python.

Tengo que hacer la siguiente tarea:

"Calcule la duración empírica media y la convexidad de cualquiera de los índices de bonos para el período de la muestra.

Existe la siguiente relación aproximada entre las variaciones de los rendimientos y los rendimientos totales (variaciones logarítmicas del índice de rendimiento total):

$$\ln \left( \frac{TRI_{t}}{TRI_{t-1}} \right)Q -D(y_{t}-y_{t-1} )+\frac{C}{2} (y_{t}-y_{t-1} )^2$$

Dónde $TRI$ es el índice de rentabilidad total, $y$ es el rendimiento, $Q$ es la carga empírica, $D$ es la duración empírica, y $C$ es la convexidad empírica. Esto puede expresarse como una simple regresión lineal de la forma $y = a + bx + cz$ . La estimación de los parámetros le ayudará a determinar las cantidades necesarias. Nota: los rendimientos se expresan en términos porcentuales, por lo que la conversión a decimales, o bien el escalado del lado izquierdo por 100, dará cifras de duración razonables."

No sé nada de finanzas, ni de regresión. Una simple búsqueda en Google no mostró el significado de "carry empírico", así que no entiendo muy bien cómo enfocar la pregunta. Dado que la relación dada arriba tiene un término cuadrático (en los rendimientos de los bonos $y$ ), ¿cómo puede ajustarse a la forma lineal $y = a +bx + cz$ ?

Se agradecería una explicación general de cómo debo enfocar esto. Necesito hacer esto en Python (usando pandas, numpy, todos los paquetes estándar). Gracias.

2voto

user1011471 Puntos 133

Realmente no importa si el término $(y_t - y_{t-1})^2$ está presente, siempre que no haya términos en el modelo que impliquen operaciones no lineales de los pesos, se puede ir. Por ejemplo, si el modelo es algo así como $u_t = a + b e^a x_t$ entonces estás en problemas, pero afortunadamente este no es tu caso.

Ahora, para cuidar la no linealidad en las características, basta con definir un nuevo conjunto de variables, por ejemplo

\begin{eqnarray} u_t &=& \ln \frac{{\rm TRI}_t}{{\rm TRI}_{t-1}} \\ x_t^{(1)} &=& y_t - y_{t-1} \\ x_t^{(2)} &=& (y_t - y_{t-1})^2 \tag{1} \end{eqnarray}

De modo que el modelo se convierte en

$$ u_t = \beta_0 + \beta_{1} x_t^{(1)} + \beta_2 x_t^{(2)} \tag{2} $$

con

$$ \beta_0 = Q, ~ \beta_1 = -D ~\mbox{and}~ \beta_2 = C/2 \tag{3} $$

El problema ahora es cómo estimar el $\beta$ s. Supongo que tienes un dataframe de pandas df con columnas denominadas $y$ y ${\rm TRI}$ . Esto es lo que debes hacer

import pandas
import numpy as np
import statsmodels.formula.api as sm

# (read data)

# prepare features
u = np.log(df['TRI']).diff(1)[1 : ]
x1 = df['y'].diff(1)[1 : ]
x2 = (df['y'].diff(1)[1 : ]) ** 2
dfnew = pandas.DataFrame({'u' : u, 'x1' : x1, 'x2' : x2})

# fit
result = sm.ols(formula="u ~ x1 + x2", data = dfnew).fit()

# weights
Q = result.params['Intercept']
D = -result.params['x1']
C = 2 * result.params['x2']
print 'Q = {}, D = {}, C = {}'.format(Q, D, C)

Finanhelp.com

FinanHelp es una comunidad para personas con conocimientos de economía y finanzas, o quiere aprender. Puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X