9 mar 2023

Obtener el ciclo HP para múltiples series de forma simultánea en R

En la siguiente entrada se crea una función sencilla que combinada con la función vectorizada across, permite obtener el componente cíclico de las series numéricas contenidas en una base de datos. Para tales fines se usan datos de la economía de Canada, disponibles en R en la base de datos con el mismo nombre.

library(dplyr)
library(mFilter)
library(ggplot2)
library(mFilter)
 data("Canada")
Canada %>%  head()
               e     prod       rw    U
1980 Q1 929.6105 405.3665 386.1361 7.53
1980 Q2 929.8040 404.6398 388.1358 7.70
1980 Q3 930.3184 403.8149 390.5401 7.47
1980 Q4 931.4277 404.2158 393.9638 7.27
1981 Q1 932.6620 405.0467 396.7647 7.37
1981 Q2 933.5509 404.4167 400.0217 7.13

Partir de una representación grafica de las series siempre es una buena opción:

 Canada %>% autoplot(facet = T)

Ahora creamos la función cicloHP, que recupera el componente cíclico del logaritmo de un vector de datos, usando la función hpfilter de la librería mFilter.

 cicloHP <- function(x) {
  lnx <- log(x)
  clnx <- mFilter::hpfilter(x,freq=50,type="frequency",drift=T)["cycle"]
  unlist(clnx)
}
 
cdata <- Canada %>%
  data.frame() %>%
  mutate(across(where(is.numeric), ~cicloHP(.x)))

Finalmente usamos la referida función:

 ts(cdata) %>%
  autoplot(facet = T)



Creando variables por grupos en dplyr (group_by + mutate)

  Simulemos una base de hogares, donde se identifica el hogar, el sexo (1 mujer) y provincia y edad para cada miembro.   # Definir la lista ...