Tengo una serie de tiempo mensual con una intervención y me gustaría cuantificar el efecto de esta intervención en el resultado. Me doy cuenta de que la serie es bastante corta y el efecto aún no está concluido.
Los datos
cds <- structure(c(2580L, 2263L, 3679L, 3461L, 3645L, 3716L, 3955L, 3362L,
2637L, 2524L, 2084L, 2031L, 2256L, 2401L, 3253L, 2881L,
2555L, 2585L, 3015L, 2608L, 3676L, 5763L, 4626L, 3848L,
4523L, 4186L, 4070L, 4000L, 3498L),
.Dim=c(29L, 1L),
.Dimnames=list(NULL, "CD"),
.Tsp=c(2012, 2014.33333333333, 12), class="ts")
La metodología
1) La serie previa a la intervención (hasta octubre de 2013) se utilizó con la auto.arima
función. El modelo sugerido fue ARIMA (1,0,0) con una media distinta de cero. La trama de ACF se veía bien.
pre <- window(cds, start=c(2012, 01), end=c(2013, 09))
mod.pre <- auto.arima(log(pre))
# Coefficients:
# ar1 intercept
# 0.5821 7.9652
# s.e. 0.1763 0.0810
#
# sigma^2 estimated as 0.02709: log likelihood=7.89
# AIC=-9.77 AICc=-8.36 BIC=-6.64
2) Dada la trama de la serie completa, la respuesta de pulso se eligió a continuación, con T = Oct 2013,
que según cryer y chan se pueden ajustar de la siguiente manera con la función arimax:
mod.arimax <- arimax(log(cds), order=c(1, 0, 0),
seasonal=list(order=c(0, 0, 0), frequency=12),
include.mean=TRUE,
xtransf=data.frame(Oct13=1 * (seq(cds) == 22)),
transfer=list(c(1, 1)))
mod.arimax
# Series: log(cds)
# ARIMA(1,0,0) with non-zero mean
#
# Coefficients:
# ar1 intercept Oct13-AR1 Oct13-MA0 Oct13-MA1
# 0.7619 8.0345 -0.4429 0.4261 0.3567
# s.e. 0.1206 0.1090 0.3993 0.1340 0.1557
#
# sigma^2 estimated as 0.02289: log likelihood=12.71
# AIC=-15.42 AICc=-11.61 BIC=-7.22
Los residuos de esto parecían estar bien:
La trama de ajustados y reales:
plot(fitted(mod.arimax), col="red", type="b")
lines(window(log(cds), start=c(2012, 02)), type="b")
Las preguntas
1) ¿Es esta metodología correcta para el análisis de intervención?
2) ¿Puedo mirar la estimación / SE para los componentes de la función de transferencia y decir que el efecto de la intervención fue significativo?
3) ¿Cómo se puede visualizar el efecto de la función de transferencia (graficarlo?)
4) ¿Hay alguna manera de estimar cuánto aumentó la intervención la producción después de 'x' meses? Supongo que para esto (y tal vez # 3), estoy preguntando cómo trabajar con una ecuación del modelo; si se tratara de una regresión lineal simple con variables ficticias (por ejemplo), podría ejecutar escenarios con y sin la intervención y medir el impacto. pero no estoy seguro de cómo trabajar este tipo de modelo.
AÑADIR
Por solicitud, aquí están los residuos de las dos parametrizaciones.
Primero del ajuste:
fit <- arimax(log(cds), order=c(1, 0, 0),
xtransf=
data.frame(Oct13a=1 * (seq_along(cds) == 22),
Oct13b=1 * (seq_along(cds) == 22)),
transfer=list(c(0, 0), c(1, 0)))
plot(resid(fit), type="b")
Entonces, de este ajuste
mod.arimax <- arimax(log(cds), order=c(1, 0, 0),
seasonal=list(order=c(0, 0, 0), frequency=12),
include.mean=TRUE,
xtransf=data.frame(Oct13=1 * (seq(cds) == 22)),
transfer=list(c(1, 1)))
mod.arimax
plot(resid(mod.arimax), type="b")
fuente
Respuestas:
Un modelo AR (1) con la intervención definida en la ecuación dada en la pregunta puede ajustarse como se muestra a continuación. Observe cómo
transfer
se define el argumento ; También necesita una variable indicadoraxtransf
para cada una de las intervenciones (el pulso y el cambio transitorio):coeftest
El efecto de la intervención se puede cuantificar de la siguiente manera:
Puede trazar el efecto de la intervención de la siguiente manera:
Numéricamente, estos son los aumentos estimados cuantificados en cada punto de tiempo causado por la intervención en octubre de 2013:
stats::arima
xreg
Estas intervenciones son equivalentes a un valor atípico aditivo (AO) y un cambio transitorio (TC) definido en el paquete
tsoutliers
. Puede usar este paquete para detectar estos efectos como se muestra en la respuesta de @forecaster o para construir los regresores utilizados anteriormente. Por ejemplo, en este caso:Editar 1
He visto que la ecuación que diste puede reescribirse como:
y se puede especificar como lo hizo usando
transfer=list(c(1, 1))
.Como se muestra a continuación, esta parametrización conduce, en este caso, a estimaciones de parámetros que implican un efecto diferente en comparación con la parametrización previa. Me recuerda el efecto de un valor atípico innovador en lugar de un pulso más un cambio transitorio.
No estoy muy familiarizado con la notación de paquete,
TSA
pero creo que el efecto de la intervención ahora se puede cuantificar de la siguiente manera:El efecto se puede describir ahora como un fuerte aumento en octubre de 2013 seguido de una disminución en la dirección opuesta; entonces el efecto de la intervención se desvanece rápidamente alternando los efectos positivos y negativos del peso en descomposición.
Este efecto es algo peculiar, pero puede ser posible en datos reales. En este punto, miraría el contexto de sus datos y los eventos que pueden haber afectado los datos. Por ejemplo, ha habido un cambio de política, campaña de marketing, descubrimiento, ... que pueda explicar la intervención en octubre de 2013. Si es así, ¿es más sensato que este evento tenga un efecto en los datos como se describió anteriormente o como encontramos? con la parametrización inicial?
Editar 2
Los pronósticos se pueden obtener y mostrar de la siguiente manera:
Los primeros pronósticos coinciden relativamente bien con los valores observados (línea punteada gris). Los pronósticos restantes muestran cómo la serie continuará el camino hacia la media original. Sin embargo, los intervalos de confianza son grandes, lo que refleja la incertidumbre. Por lo tanto, debemos ser precavidos y revisar el modelo a medida que se graben nuevos datos.
fuente
A veces menos es más. Con 30 observaciones en mano, envié los datos a AUTOBOX, un software que he ayudado a desarrollar. Presento el siguiente análisis con la esperanza de adquirir la recompensa +200 (¡es broma!). He trazado los valores reales y purificados visualmente sugiriendo el impacto de la "actividad reciente". . El modelo que se desarrolló automáticamente se muestra aquí. y aquí . Aquí se presentan los residuos de esta serie de cambio de nivel bastante simple . Las estadísticas del modelo están aquí . En resumen, hubo intervenciones que podrían identificarse empíricamente para generar un proceso ARIMA; dos pulsos y 1 cambio de nivel . El gráfico Actual / Ajuste y Pronóstico resalta aún más el análisis.
Por mi parte, me gustaría ver la gráfica de los residuos de los modelos previamente especificados y, en mi opinión, potencialmente demasiado especificados.
fuente
Debajo está el código:
A continuación se muestra la estimación, hubo un aumento de ~ 2356.3 unidades en octubre de 2013 con un error estándar de ~ 481.8 y tiene un efecto de descomposición a partir de entonces. La función identificó automáticamente AR (1). Tuve que hacer un par de iteraciones y hacer una diferenciación estacional y no estacional a 0, que se refleja en el método args.ts en la función tso.
A continuación se muestra la trama, tsoutlier es el único paquete que conozco que puede imprimir cambios temporales muy bien en una trama.
Con suerte, este análisis proporcionó respuesta a sus 2, 3 y 4 preguntas, aunque utilizando una metodología diferente. Especialmente la gráfica y los coeficientes proporcionaron el efecto de esta intervención y lo que habría sucedido si no hubiera tenido esta intervención.
También espero que alguien más pueda replicar este gráfico / análisis utilizando el modelado de la función de transferencia en R. No estoy seguro de si esto podría hacerse en R, puede ser que alguien más pueda verificarme al respecto.
fuente