¿Hay alguna forma de usar el paquete strucchange en R en los modelos ARIMA? No he podido encontrar ninguna. Muchas gracias.
Respuesta
¿Demasiados anuncios?El paquete strucchange
requiere como entrada la fórmula de un modelo lineal para pasar a lm
. Creo que no hay una manera sencilla para utilizar el paquete con la función arima
. No sé ni cualquier otro R paquetes de la aplicación de este pero te puedo dar algunas pautas básicas que pueden ser útiles para sus propósitos.
Usted puede llevar a cabo algunos de los diagnósticos basados en la suma total de los cuadrados de los residuos (CUMSUM) y basado en pruebas de F para los parámetros del modelo en las distintas submuestras.
Tomemos como ilustración el siguiente simulado proceso AR, x
. Los primeros 50 observaciones son generados a partir de un AR(1) el modelo y los próximos 100 observaciones
a partir de un AR(2) modelo:
set.seed(135)
x1 <- arima.sim(model = list(order = c(1,0,0), ar = -0.2), n = 50)
x2 <- arima.sim(model = list(order = c(2,0,0), ar = c(0.3, 0.5)), n = 100)
x <- ts(c(x1, x2))
CUMSUM enfoque: una Vez que un modelo de AR está equipado para toda la serie de la CUMSUM proceso puede ser obtenida de la siguiente manera:
fit <- arima(x, order = c(2,0,0), include.mean = FALSE)
e <- residuals(fit)
sigma <- sqrt(fit$sigma2)
n <- length(x)
cs <- cumsum(e) / sigma
Como referencia, los límites de confianza se puede obtener como se ha hecho en el paquete strucchange
para el OLS-basado CUSUM de la prueba. Para ello, podemos crear un objeto de la clase efp
y la trama:
require(strucchange)
retval <- list()
retval$coefficients <- coef(fit)
retval$sigma <- sigma
retval$process <- cs
retval$type.name <- "OLS-based CUSUM test"
retval$lim.process <- "Brownian bridge"
retval$datatsp <- tsp(x)
class(retval) <- c("efp")
plot(retval)
Los límites de confianza son sólo para referencia, no estoy seguro de que ellos son el derecho
los valores para llevar a cabo una formales de prueba en este contexto. Independientemente de esto, un cambio repentino o un cambio en la secuencia cs
puede ser interpretado como una señal de que algo está pasando alrededor de ese punto del tiempo, posiblemente un cambio estructural. En el gráco se observa que en torno a la observación de los 50, donde se introdujo un cambio en los datos de generación de proceso.
Pruebas de F: Otro enfoque se basa en la estadística de prueba F calculada como: $$ Fstat = \frac{RSS - USS}{RSS/n} $$ donde RSS es la suma de cuadrados residual del modelo restringido (el modelo ajustado para el conjunto de los datos) y el USS es la suma residual de los cuadrados de los modelos equipados con dos submuestras. Las estadísticas pueden ser calculadas de forma iterativa para la siguiente secuencia de submuestras: a partir de observaciones de 1 a 20 y 21 a las $n$; luego de 1 a 21 y el próximo submuestra de 22 a $n$, y así sucesivamente como se hace a continuación:
rss <- sum(residuals(fit)^2)
sigma2 <- fit$sigma2
stats <- rep(NA, n)
for (i in seq.int(20, n-20))
{
fit1 <- arima(x[seq(1,i)], order = c(2,0,0), include.mean = FALSE)
fit2 <- arima(x[seq(i+1,n)], order = c(2,0,0), include.mean = FALSE)
ess <- sum(c(residuals(fit1), residuals(fit2))^2)
stats[i] <- (rss - ess)/sigma2
}
De manera similar a la CUMSUM trama, una trama de la F-estadística puede revelar la presencia de un cambio estructural. Un 95% de límite de confianza puede ser obtenida basado en la distribución de la chi cuadrado.
plot(stats)
abline(h = qchisq(0.05, df = length(coef(fit)), lower.tail = FALSE), lty = 2, col = "red")
Si el mínimo valor de p relativa a cada dato está por debajo de un nivel de significación, por ejemplo, 0.05, entonces podemos sospechar que hay un cambio estructural en ese punto. En este simulada de la serie que sucede en la observación de los 50, cuando el AR coeficientes cambiado en los datos de generación de proceso:
which.min(1 - pchisq(stats, df = 2))
#[1] 50
Usted puede encontrar más detalles en la viñeta de la strucchange
paquete
que usted probablemente ya sabe, y en las referencias en el mismo.