Actualmente estoy intentando calcular la semivida de una serie de reversiones a la media utilizando el lenguaje de programación Python y la teoría del proceso de Ornstein–Uhlenbeck.
Tengo una serie que cuando se grafica se ve así:
Que obviamente parece ser de reversiones a la media. Estoy realizando lo siguiente utilizando código en Python para encontrar la semivida (por cierto, la serie mostrada arriba se encuentra en la variable (z_array)):
import numpy as np
import statsmodels.api as sm
# configurar la serie rezagada de z_array y devolver la serie de z_array
z_lag = np.roll(z_array,1)
z_lag[0] = 0
z_ret = z - z_lag
z_ret[0] = 0
# ejecutar regresión OLS para encontrar el coeficiente de regresión a utilizar como "theta"
modelo = sm.OLS(z_ret,z_lag)
res = modelo.fit()
# calcular semivida
semivida = -log(2) / res.params[0]
print 'Semivida = ',semivida
El código se ejecuta bien, sin embargo, para esta serie estoy obteniendo una semivida de 680.5 días - puedo ver en el gráfico que esto parece muy incorrecto. Las reversiones completas están ocurriendo dentro de una fracción de ese período de tiempo.
¿Alguien podría por favor aconsejarme dónde estoy cometiendo un error con esto?
¡Cualquier ayuda será muy apreciada!
0 votos
Es difícil decir qué valor "se ve bien" al mirar el gráfico, debería trazar el diagrama de dispersión y ver si la línea de regresión a través de él "se ve bien".
0 votos
Descubrí cuál era el problema: tuve que usar el método add_constant para añadir un término de intercepción a la regresión, luego usar res.params[1]. ¡Gracias por tu respuesta de todos modos, la aprecio mucho!