Quiero realizar una optimización de restricciones para la Estimación de Máxima Verosimilitud en R para pronosticar la volatilidad de los rendimientos. El problema es que mis valores iniciales no están en la región permitida. ¿Hay algo como un algoritmo EM que pueda utilizar? ¿Alguien tiene idea de cómo encontrar la región de valores?
mi código:
library(quantmod)
getSymbols('^GDAXI', src='yahoo', return.class='ts',from="2005-01-01", to="2015-01-31")
GDAXI.DE=GDAXI[ , "GDAXI.Close"]
log_r1=diff(log(GDAXI.DE[39:2575]))
sigma=matrix(nrow=length(log_r1)-1, ncol=1)
for(i in 2:length(log_r1))
{
sigma[i-1]=var(log_r1[1:i])
}
error=matrix(nrow=length(log_r1), ncol=1)
mu=mean(log_r1)
for(i in 1:length(log_r1))
{
error[i]=log_r1[i]-mu
}
sig=var(log_r1)
er=error
Sigma_garch=matrix(nrow=length(sigma), ncol=1)
garch=function(th)
{
omega.0=th[1]
alpha.0=th[2]
beta.0=th[3]
for(i in 1:length(sigma))
{
if(i==1)
{
Sigma_ga=sig
}else
{
Sigma_ga=Sigma_garch[i-1]
}
Sigma_garch[i]=omega.0+alpha.0*er[i]^2+beta.0*Sigma_ga
}
return(Sigma_garch)
}
LogLik=function(th)
{
input=garch(th)
sig=input
for(i in 1:length(sigma))
{
LL=(-1/2)*log(2*pi)-(1/2)*log(sig[i])-(1/2)*er[i]/sig[i]
}
}
ui=matrix(c(diag(1,3),c(0,(-1),(-1))),4,3, byrow = T)
ci=c(0.01,0,0,(-0.99))
theta=c(0.02,0.01,0.95)
est=constrOptim(c(0.0000029,0.095,0.0888),LogLik, grad=NULL, ui,ci,hessian=TRUE)
1 votos
¿Puede contar un poco más sobre su configuración? Me parece que cualquier valor positivo debería estar en la región permitida.
0 votos
Tengo a >= 0, b >= 0, w > 0 y a+b < 1. Estas son las especificaciones de garch. Estoy mirando las series de retorno. Ahora tengo que encontrar los valores de partida, pero no sé la región en la que están. Así que necesito encontrar esa región y no sé cómo.
1 votos
Por favor, muestra tu configuración, esto es bastante vago. Supongo que podrías hacer algo peor que intentar $\alpha = 0.08, \beta = 0.90$ y $\omega = 0.01$ pero es sólo una suposición.