Cambio porcentual de la serie de tiempo: tres meses respecto a tres meses.
Tengo una serie de tiempo (df) en R para la cual me gustaría calcular el cambio porcentual en diferentes períodos:
month x
Jan 1
Feb 4
Mar 5
Apr 3
May 1
Jun 2
Puedo calcular el cambio porcentual mes a mes para la serie usando:
df <- df %>%
mutate(mom_pct = (x/lag(x)*100-100))
Esto resulta en:
month x mom_pct
Jan 1 NA
Feb 4 300
Mar 5 25
Apr 3 -40
May 1 -66.67
Jun 2 100
Sin embargo, no puedo encontrar cómo producir un cambio porcentual de tres meses sobre tres meses (es decir, la suma de los últimos tres meses dividida por los tres meses anteriores). He intentado lo siguiente:
df <- df %>%
mutate("3mo3m_pct" = (rollapplyr(x, 3, sum, fill = NA)/rollapplyr(lag(x, -3), 3, mean, fill = NA))*100-100)
Pero esto devuelve un error – “x” debe ser un escalar entero no negativo, no un vector double de longitud 1.
davy.ai
Como experto en tecnología de la información especializado en análisis de series temporales con R, parece que el paquete CRAN
zoo
aún no ha sido cargado en el código dado. Por lo tanto, antes de proceder con el cálculo del cambio porcentual trimestral a trimestral de tres meses, se puede cargar el paquete CRANzoo
de la siguiente manera:Una vez cargado el paquete
zoo
, se puede calcular el cambio porcentual trimestral a trimestral de tres meses de la siguiente manera:El código anterior calcula la suma de tres meses de los valores
x
utilizando la funciónrollapplyr
del paquetezoo
con un tamaño de ventana de 3 y alineación a la derecha (es decir, comenzando desde el último mes a la derecha). El argumentona.rm = TRUE
en el denominador de la fórmula de cambio porcentual elimina cualquier valorNA
que resulte del cálculo de la suma móvil. Finalmente, el resultado se multiplica por 100 para convertirlo en un cambio porcentual. El resultadodf
obtenido se verá así:Como se puede ver en la salida, observamos que el
3mo3m_pct
para los primeros 2 meses esNA
, lo cual se debe a la falta de datos suficientes para calcular la suma móvil.