2 votos

Función del intercepto en la estimación beta por MCO

Estoy construyendo una estrategia clásica de negociación de pares en la que utilizo un estimador lineal para modelizar el diferencial de dos activos abriendo una posición long-short market neutral en momentos de divergencia. Me cuesta entender cómo estimar el ratio de cobertura adecuado mediante regresión. En concreto, estoy confundido con respecto al papel del término de intercepción en la ecuación de regresión.

Supongamos que queremos modelizar una beta dinámica utilizando una ventana de regresión móvil. Con un término de intercepción incluido, nuestra estimación beta se vuelve muy inestable (hasta el punto de no ser utilizable). Alternativamente, si el intercepto se fuerza a cero, la beta se vuelve más estable e, intuitivamente, una estimación más razonable. Dicho esto, he leído muchos artículos sobre el tema de las operaciones por pares y la estimación de la beta y parece que el intercepto se incluye en la mayoría de las ecuaciones de regresión para la estimación de la beta. Además, siempre me han dicho que se debería siempre incluir un término de intercepción o un sesgo de riesgo en el modelo. ¿Cuál es entonces la causa de la inestabilidad de beta? ¿Debería incluir un intercepto en la estimación del ratio de cobertura?

Por último, dado que mi estrategia se centra en modelizar el diferencial de activos (es decir, los residuos de mi regresión), me preocupa la posibilidad de que la media de los residuos sea distinta de cero debido a que el intercepto se fuerza a cero. Imagino que podría realizar regresiones paralelas, es decir, una regresión sin intercepto para la estimación óptima del coeficiente de cobertura y una segunda regresión con intercepto para obtener residuos insesgados, pero no he visto que se haga referencia a ello en la bibliografía. Creo que en el fondo me falta una pieza del rompecabezas. Por si sirve de algo, mi modelo real está utilizando el filtro de Kalman para calcular el diferencial y la beta, pero creo que este modelo adolece de las mismas debilidades y preocupaciones que el ejemplo OLS más simple que he dado.

A continuación se muestra un gráfico de la estimación beta diaria de una regresión continua con una ventana retrospectiva de 20 utilizando un intercepto:

enter image description here

Y éste es un gráfico de la estimación beta diaria para la misma regresión con el intercepto forzado a cero:

enter image description here

A continuación se muestra un fragmento de código mínimo reproducible de Python:

import yfinance as yf
import numpy as np
from statsmodels.regression.rolling import RollingOLS

data = yf.download(['AAPL', 'MSFT'], start='2015-01-01').get('Adj Close')
data = np.log(data)

# Model with intercept

rmod = RollingOLS(
    endog=data['AAPL'],
    exog=sm.add_constant(data['MSFT']), # Adding intercept
    window=20,
)
rres = rmod.fit()

beta = rres.params['MSFT']

plt.plot(beta)
plt.title('AAPL/MSFT Rolling Regression (With Intercept)')
plt.show()

# Model with intercept frozen =0

rmod_nointercept = RollingOLS(
    endog=data['AAPL'],
    exog=data['MSFT'],
    window=20,
)
rres_nointercept = rmod_nointercept.fit()

beta = rres_nointercept.params['MSFT']

plt.plot(beta)
plt.title('AAPL/MSFT Rolling Regression (No Intercept)')
plt.show()

1voto

waynecolvin Puntos 110

Hola James: Tu pregunta y tus resultados me parecen interesantes y no puedo responder ni decir nada definitivo, pero en su día experimenté problemas similares cuando intenté utilizar la cointegración para pares. Sólo un par de cosas en cuanto a algunas intuiciones y comentarios. Esperaba que alguien más dijera algo porque dudo que esto ayude de manera específica a tu pregunta.

  1. Creo que la razón de tu resultado es que, cuando permites un intercepto, estás permitiendo que el diferencial tenga más libertad porque puede variar alrededor de un valor distinto de cero, mientras que en el modelo sin intercepto, la variación siempre se mide alrededor de cero. Por lo tanto, lo que esto significa para el modelo de corrección de errores es que el valor de equilibrio a largo plazo (no sé si recuerdo exactamente la terminología, pero cuando digo "término de corrección de errores a largo plazo", me refiero a $Y - X \beta - \mu$ en el modelo de corrección de errores ) tiene una media diferente todo el tiempo. En el caso sin intercepción, el equilibrio a largo plazo en el modelo de corrección del error es siempre cero. Por lo tanto, dado que el valor de equilibrio tiene que ser cero, el $\beta$ no tiene tanto margen para moverse de un periodo a otro en el modelo sin intercepción porque el término de corrección del error, $Y - X \beta$ tiene que estar cerca de cero, porque $\mu = 0$ .

  2. Una cosa que probé ( no sé si te ayudará ) fue no sólo quitar el intercepto ( para reducir la variación en el ratio de cobertura ) sino también poner $\beta$ a 1,0 y comprobar la estacionariedad de esos residuos. Tenga en cuenta que, al hacer esto, tiene que utilizar diferentes tablas porque $\beta$ se supone conocida. Este enfoque proporcionó un automático de reducción de la variación de la estimación porque, si no se puede rechazar la nula que $\beta = 1$ entonces reducirá claramente la variación de la estimación a cero porque no hay ¡¡¡¡¡¡¡ninguna estimación !!!!!!! No recuerdo cuánto ayudó el ajuste del ratio de cobertura a algún valor conocido como 1,0 pero sí recuerdo el $\beta $ estimaciones demasiado volátiles, así que probé con eso en su lugar.

  3. Puede que quiera echar un vistazo a la regresión total por mínimos cuadrados donde $x$ y $y$ se tratan simétricamente. Paul Teetor escribió un artículo sobre este enfoque ( google para su nombre. Creo que tiene un sitio web o aparecerá el artículo. Si no puedes encontrarlo, házmelo saber) y creo que sus resultados fueron prometedores, pero no recuerdo los detalles.

Tenga en cuenta que nunca he probado los mínimos cuadrados totales, pero el hecho de que el enfoque E-G no sea simétrico en torno a $x$ y $y$ siempre me molestó. Nunca fui capaz de justificar en mi mente cómo los resultados de cointegración podían depender de qué variable, $x$ ou $y$ como respuesta.

Buena suerte y espero que esto haya ayudado un poco.

                                            Mark

P.D: Una cosa que hay que pensar es qué implica forzar un valor como $\beta = 1.0$ u otro valor fijo. Al fijar $\beta$ a un valor conocido, ¿qué se dice del proceso de corrección frente a dejar que haya una estimación de $\beta$ que podría ser digamos 2 o 4 o 0,5 ? No sé si puedo responder a eso ahora, pero sí cuando trabajaba en ello.

1voto

Kiah Puntos 53

Como continuación a mi post original, quería proporcionar un ejemplo de Filtro de Kalman, ya que el Filtro de Kalman parece resolver el problema de la beta dinámica como la proporcionada por el OLS rodante, mientras que no sufre de inestabilidad de la estimación como se demuestra en el post original del gráfico OLS rodante.

Estimación beta de filtro Kalman para AAPL/MSFT para el mismo periodo de tiempo e intervalo que el post original. Nótese que elegí valores totalmente arbitrarios para las variables de ruido, delta y Vt:

enter image description here

A continuación se muestra un fragmento de código mínimo reproducible de Python:

import yfinance as yf
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from pykalman import KalmanFilter

data = yf.download(['AAPL', 'MSFT'], start='2015-01-01').get('Adj Close')
data = np.log(data)

H = np.eye(2)
delta = 1e-5
vt = 0.1
Wt = delta / (1 - delta) * np.eye(2) 
R = np.ones((2,2)) 
theta = np.zeros(2) 

F = np.vstack([data.iloc[:, 0], np.ones(data.iloc[:, 0].shape)]).T[:, np.newaxis]

kf = KalmanFilter(
    n_dim_obs=1, n_dim_state=2,     
    initial_state_mean=theta,       
    initial_state_covariance=R,     
    transition_matrices=H,          
    observation_matrices=F,         
    observation_covariance=vt,      
    transition_covariance=Wt,
)

# State means are frequently represented by theta
state_means, state_covs = kf.filter(data.iloc[:, 1].values)

ser = pd.Series(state_means[:,0], index=data.index, name='beta')

ser.plot()
plt.title('AAPL/MSFT Kalman Filter Beta Estimates')

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