R/organize_panels.R

Defines functions organize_panels

Documented in organize_panels

#'  Pool de Datos en Panel - Base Individudal EPH continua
#'
#'Permite armar un pool de datos en panel de la EPH continua a partir
#'de especificar una serie consecutiva de bases, variables y el largo de la ventana -window- de observación
#'
#' @param bases Lista de bases de microdatos a utilizar para armar el pool de datos
#' @param variables Vector con nombres de las variables de interes
#' @param window Especificar distancia temporal entre las observaciones. anual o trimestral
#' @details
#'Disclaimer: El script no es un producto oficial de INDEC.
#' @return Devuelve el pool de datos de panel
#' @export
#'
#' @examples
#'
#' lista_bases <- list(toybase_individual_2016_03,toybase_individual_2016_04)
#' pool_trimestral <- organize_panels(bases = lista_bases,
#'                     variables =c("P21","ESTADO"),
#'                     window = "trimestral")

organize_panels <- function(bases,variables,window = "anual"){

  assertthat::assert_that(is.list(bases),
                          msg = "El argumento bases requiere un objeto de tipo lista")
  assertthat::assert_that(window %in% c("anual", "trimestral"),
                          msg = "Las opciones para window son: anual y trimestral")

  bases_continua <- dplyr::bind_rows(bases) %>%
    dplyr::select(CODUSU,NRO_HOGAR,COMPONENTE,ANO4,TRIMESTRE,CH04,CH06,variables) %>%
    dplyr::filter(ESTADO !=0) %>%
    dplyr::mutate(Periodo = zoo::as.yearqtr(paste0(ANO4," Q",TRIMESTRE)))

  ##Creo una Replica de la base, y le agrego (_t1) al nombre de cada
  ##variable, excepto a las que voy a usar para "matchear".
  Teuno <-  function(x) {
    paste0(x,"_t1")
  }

  ##En Base a la amplitud del panel que especificaré al correr en la funcion resto en la Base
  ##Replica el identificador de Trimestre construido, para hacer un join  con la Base.

  bases_continua_join <- bases_continua %>%
    dplyr::rename_at(dplyr::vars(-c(1:3,ncol(.))),Teuno) %>%
    dplyr::mutate(Periodo = dplyr::case_when(
      window == "anual"     ~ Periodo-1,
      window == "trimestral"~ Periodo-0.25))

  panel_continua <- dplyr::inner_join(bases_continua,
                                      bases_continua_join,
                                      by = c("CODUSU", "NRO_HOGAR", "COMPONENTE", "Periodo")) %>%
    dplyr::mutate(consistencia = dplyr::case_when(
      abs(CH06_t1-CH06) > 2 |
        CH04 != CH04_t1 ~ FALSE,
      TRUE ~ TRUE))

  consistencias_continua <- panel_continua %>%
    dplyr::group_by(Periodo) %>%
    dplyr::summarise(sin_controles = dplyr::n(),
                     con_controles = sum(consistencia,na.rm = TRUE),
                     perdida = 1 - (con_controles/sin_controles))

  return(panel_continua)
}
Lissette401/Procesamiento-base-usuaria-EPH documentation built on June 27, 2020, 12:14 a.m.