Estoy ajustando numéricamente un proceso AR(1)/GARCH(1,1) a los retornos logarítmicos de índices y acciones, $r_t=\log(P_t/P_{t-1})$ , donde $P_t$ es el precio en el momento $t$ y hasta ahora no tengo claro dónde se utilizarían los rendimientos logarítmicos observados en un algoritmo. Varios grupos de autores han descrito (algunos en parte) los componentes del enfoque AR(1)/GARCH(1,1), por ejemplo:
E. Zivot: $$ r_t=\mu + \phi (r_{t-1} - \mu ) + \epsilon_t $$
Rachev et al: $$ \begin{split} r_t&=\mu+\phi r_{t-1}\\ \epsilon_t&=\sigma_t \delta_t \quad \quad (\delta_t \textrm{ is an innovation})\\ \sigma_t &= \sqrt{\alpha_0 + \alpha_1 \epsilon_{t-1}^2 + \beta_1 \sigma_{t-1}^2}\\ \end{split} $$
Brummelhuis & Kaufman: $$ \begin{split} X_t&=\mu_t+ \sigma_t \epsilon_t\\ \mu_t&=\lambda X_{t-1}\\ \sigma_t &= \sqrt{\alpha_0 + \alpha_1 (X_{t-1}-\mu_{t-1})^2 + \beta_1 \sigma_{t-1}^2}\\ \end{split} $$
Jalal & Rockinger: $$ \begin{split} \mu_t&=\phi X_{t-1}\\ \epsilon_t &=X_t - \mu_t\\ \sigma_t &= \sqrt{\alpha_0 + \alpha_1 \epsilon_{t-1}^2 + \beta_1 \sigma_{t-1}^2}\\ \end{split} $$
Mi enfoque:
$$ \begin{split} \mu_t&=\mu+\phi r_{t-1}\\ \epsilon_t&=r_t - \mu_t\\ \sigma_t &= \sqrt{\alpha_0 + \alpha_1 \epsilon_{t-1}^2 + \beta_1 \sigma_{t-1}^2}\\ \end{split} $$
Dadas las múltiples descripciones anteriores, mi interpretación para un algoritmo sería:
Algoritmo para AR(1)/GARCH(1,1):
-
Inicializar $\mu=0$ , $\sigma_1 = 1$ , $\epsilon_1=0$ , $\mu=\phi=\alpha_0=\alpha_1=\beta_1=U(0,1)* 0.01$
-
Para $t$ = 2 a $T$ :
-
$\quad \mu_t = \mu + \phi r_{t - 1}\quad \quad (\textrm{Log-returns lag-1 input here})$
-
$\quad \epsilon_t = r_t - \mu_t \quad \quad (\textrm{Log-returns lag-0 input here})$
-
$\quad \sigma_t= \sqrt{\alpha_0 + \alpha_1 \epsilon_{t-1}^ 2 + \beta_1 \sigma_{t - 1} ^ 2}$
-
$\quad \hat{r}_t = \phi \mu_{t - 1} + \sigma_t \epsilon_t \quad \quad \textrm{OR}: \hat{r}_t = \mu + \phi \mu_{t - 1} + \sigma_t \epsilon_t \quad \quad ???$
-
Siguiente $t$
-
Calcula el residuo, $e_t=r_t-\hat{r}_t$
-
Determinar $MSE=\frac{1}{T}\sum_t e_t^2$
El algoritmo propuesto anteriormente es esencialmente la parte recursiva para calcular los rendimientos logarítmicos previstos $\hat{r}_t$ a partir de los rendimientos observados de entrada $r_t$ . Innovaciones o cuantiles aleatorios de una distribución de probabilidad [como N(0,1) o $t(\nu)$ no se emplearía aquí, ya que estamos ajustando un modelo, no simulando. Durante cada iteración, la bondad de ajuste basada en los parámetros propuestos para la función objetivo se basaría en $MSE=\frac{1}{T}\sum_t e_t$ que se minimizaría a través de una técnica de optimización mediante regresión no lineal, diferenciación finita o MLE. También podría utilizarse la metaheurística, en la que la inicialización de los valores de los cromosomas (partículas) para $(\mu,\phi,\alpha_0,\alpha_1,\beta_1)$ se produciría en la primera generación.
En términos de comparación de resultados basados en R, MATLAB, SAS, etc. la parametrización sería:
mu= $\mu$
ar1= $\phi$
garch0= $\alpha_0$
garch1= $\alpha_1$
garch2= $\beta_1$
No estoy seguro de si la media incondicional $\mu$ Sin embargo, sería necesario en la línea 6 del algoritmo. Por favor, comente si el algoritmo es correcto, y posiblemente sugiera cambios en la codificación. Una vez más, el objetivo es utilizar algoritmicamente métodos numéricos para resolver los parámetros, no R, MATLAB, o SAS, etc.
3 votos
Buen post Muy útil.
5 votos
Hola PEL, ¿podrías dividir este post en una pregunta y una respuesta? Ahora la pregunta parece no tener respuesta cuando en realidad sí la tiene.
3 votos
En la primera línea de la fórmula de Rachev parece faltar un término de error.
2 votos
¿Alguien sabe por casualidad cómo puedo codificar este loglike en MATLAB, hay alguna función que pueda utilizar, etc.?
0 votos
Tendrías que implementar algún tipo de método de maximización en MATLAB, quizás un método libre de derivadas. O eso, o tomar las derivadas parciales de $loglik$ por ejemplo $\sigma_t$ y $\epsilon_t$ , poner a cero, y luego iterar. Busque maximización de funciones sin derivadas en MATLAB. Si puede acceder a los métodos de algoritmo genético (AG) para MATLAB, entonces trate $loglik$ como la aptitud, y asegurarse de que aumenta con el aumento de iteraciones.