Estoy estudiando el paquete dlm de R. Hasta ahora parece un paquete muy potente y flexible, con buenas interfaces de programación y buena documentación.
He podido utilizar con éxito dlmMLE y dlmModARMA para estimar los parámetros del proceso AR(1):
u <- arima.sim(list(ar = 0.3), 100)
fit <- dlmMLE(u, parm = c(0.5, sd(u)),
build = function(x)
dlmModARMA(ar = x[1], sigma2 = x[2]^2))
fit$par
Ahora estoy intentando utilizar un código similar para estimar los parámetros de un modelo de regresión lineal simple:
r <- rnorm(100)
u <- -1*r + 0.5*rnorm(100)
fit <- dlmMLE(u, parm = c(0, 1),
build = function(x)
dlmModReg(x[1]*r, FALSE, dV = x[2]^2))
fit$par
Espero que fit$par esté cerca de c(-1, 0.5), pero sigo obteniendo algo como
[1] -0.0002118851 0.4884367070
El coeficiente -1 no se estima correctamente. Sin embargo, lo extraño es que la varianza del ruido se devuelve correctamente.
Entiendo que la estimación de máxima verosimilitud puede fallar dados los malos valores iniciales, pero he observado que la función de verosimilitud devuelta por dlmLL es muy plana en la primera coordenada.
Así que me pregunto: ¿se puede estimar este modelo con dlm? Creo que el modelo es "no singular", sin embargo no estoy seguro de cómo se calcula la función de verosimilitud dentro del dlm.
Se agradece cualquier sugerencia.