Suponga que el promedio de una serie temporal es el valor de referencia de largo plazo de la misma, la persistencia mide el tiempo medio que tarda una serie en regresar a ese nivel medio. En la siguiente figura se simulan en R dos series temporales con distintos grados de persistencia, asumiendo que una aproximación se puede obtener a partir del coeficiente autoregresivo de primer orden de la serie, verificándose que la serie con mayor coeficiente, pasa menor cantidad de veces por su promedia y tarda más tiempo en regresar posterior a un choque.
# Establecer
semilla para reproducibilidad
set.seed(123)
library(ggplot)
# Número de
observaciones
n <- 100
# Media y
desviación estándar de las series
media <- 0
volatilidad <-
1
# Coeficientes de
autocorrelación
coef_ar1 <-
c(0.1, 0.95)
# Simulación de
los procesos autoregresivos
serie1 <-
arima.sim(model = list(ar = coef_ar1[1]), n = n, sd = volatilidad)
serie2 <-
arima.sim(model = list(ar = coef_ar1[2]), n = n, sd = volatilidad)
# Calcular el
promedio de las series
promedio <-
mean(c(serie1, serie2))
# Crear el gráfico
datos <-
data.frame(
Tiempo = 1:n,
Serie1 = serie1,
Serie2 = serie2
)
# Graficar las
series con ggplot2
ggplot(datos) +
geom_line(aes(x = Tiempo, y = Serie1, color =
"AR(0.1)")) +
geom_line(aes(x = Tiempo, y = Serie2, color =
"AR(0.9)")) +
geom_hline(yintercept =
mean(serie1), linetype = "dashed", color = "gray") +
geom_hline(yintercept =
mean(serie2), linetype = "dashed", color = "black") +
labs(x = "Tiempo", y = "Valor", title =
element_blank()) +
scale_color_manual(name =
"Modelo", values = c("AR(0.1)" = "gray",
"AR(0.9)" = "black")) +
theme_classic() +
theme(legend.title =
element_blank(),
legend.position = c(0.2,0.8))
Una primera medida de persistencia de las series anteriores, se obtiene a partir de coeficientes autoregresivo de primer orden. En el siguiente ejemplo se colocan una estimación vectorizada del mismo. Primero se crea una matriz de datos con serie1 y serie2, para luego usar la función apply para calcular los coeficientes autorregresivos de primer orden para cada columna. Como ha de esperarse, la serie más persistente ha mostrado mayor persistencia.
arima(serie1, order = c(1,0,0)) |>
coef()
ar1 intercept
0.07822495 0.07983069
datos <- cbind(serie1, serie2)
apply(datos, 2, function(x) coef(arima(x, order = c(1,0,0)))["ar1"])
serie1 serie2
0.07822495 0.91674843
2. Obtener una estimación histórica del nivel de persistencia
Para series largas, igual Podemos estudiar la evolución histórica sobre resistencia usando la función rollapply del paquete zoo. Esta función estima una ventana móvil de tamaño width, donde a cada segmento de la muestra se le aplica una función propia (FUN). Si se aplica para la serie. .
library(zoo)
his_ar1 <- function(x) coef(arima(x, order = c(1,0,0)))["ar1"]
ar_t1 <- rollapply(serie1, width=20, FUN=his_ar1)
arh = ar_t1)
geom_line() +
theme_classic()
plot(ar_t1, type="l")
En caso de sesear estimar la dinámica de la persistencia histórica de múltiples series a la vez, podemos aplicar la misma lógica de la función apply, anidando rollapply.