es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  , ,

Answer

  1. Avatar for 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 CRAN zoo de la siguiente manera:

    # Instalar y cargar el paquete zoo
    install.packages("zoo")
    library(zoo)
    

    Una vez cargado el paquete zoo, se puede calcular el cambio porcentual trimestral a trimestral de tres meses de la siguiente manera:

    # Calcular el cambio porcentual trimestral a trimestral de tres meses
    df <- df %>% 
      mutate("3mo3m_pct" = rollapplyr(x, 3, sum, fill = NA, align = "right")/
                            rollapplyr(x, 3, sum, fill = NA, align = "left", na.rm = TRUE)-1)*100
    

    El código anterior calcula la suma de tres meses de los valores x utilizando la función rollapplyr del paquete zoo 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 argumento na.rm = TRUE en el denominador de la fórmula de cambio porcentual elimina cualquier valor NA que resulte del cálculo de la suma móvil. Finalmente, el resultado se multiplica por 100 para convertirlo en un cambio porcentual. El resultado df obtenido se verá así:

      month x   mom_pct 3mo3m_pct
    1   Jan 1        NA        NA
    2   Feb 4 300.00000        NA
    3   Mar 5  25.00000 233.33333
    4   Apr 3 -40.00000 -62.50000
    5   May 1 -66.66667 -57.14286
    6   Jun 2 100.00000   0.00000
    

    Como se puede ver en la salida, observamos que el 3mo3m_pct para los primeros 2 meses es NA, lo cual se debe a la falta de datos suficientes para calcular la suma móvil.

Comments are closed.