Introducción

El propósito del presente reporte es presentar un análisis de datos de la Encuesta de Hogares de Propósitos Múltiples para el año 2015.

Con este objetivo en mente se cargarán algunas librerías:

library(tidyverse) ### Librería usada para la limpieza de datos
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ readr     2.1.5
## ✔ forcats   1.0.0     ✔ stringr   1.5.1
## ✔ ggplot2   3.5.1     ✔ tibble    3.2.1
## ✔ lubridate 1.9.3     ✔ tidyr     1.3.1
## ✔ purrr     1.0.2     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(writexl) ### Librería usada para exportar bases de datos de R a excel

Cargado de la base de datos

Una vez hecho esto se procederá con la carga de los archivos. Para lograr lo anterior se llamará a la librería heaven

library(haven)

# Leer los archivos con rutas corregidas
Hogar <- read_sav("C:/Users/emili/OneDrive/Documentos/DIRECTORIO R/EHPM SPSS 2015/EHPM 2015 HOGAR.sav")
Persona <- read_sav("C:/Users/emili/OneDrive/Documentos/DIRECTORIO R/EHPM SPSS 2015/EHPM 2015 PERSONA.sav")

# Ver las primeras filas
head(Hogar)
## # A tibble: 6 × 422
##   edicion  r015  lote tipo       folio viv      r101 area    region  correlativo
##     <dbl> <dbl> <dbl> <dbl+lbl>  <dbl> <dbl+l> <dbl> <dbl+l> <dbl+l>       <dbl>
## 1    2015     6  9844 0 [Muestr…  18.2 0 [Mue…     1 0 [Rur… 4 [Ori…        9844
## 2    2015     2  8256 0 [Muestr…   8   0 [Mue…     1 0 [Rur… 3 [Cen…        8256
## 3    2015    10   557 0 [Muestr… 117   0 [Mue…     1 0 [Rur… 1 [Occ…         557
## 4    2015     3   879 0 [Muestr…  32   0 [Mue…     1 0 [Rur… 1 [Occ…         879
## 5    2015    12 11800 0 [Muestr…  55   0 [Mue…     1 0 [Rur… 4 [Ori…       11800
## 6    2015     1 11427 0 [Muestr…  74   0 [Mue…     1 0 [Rur… 4 [Ori…       11427
## # ℹ 412 more variables: estratoarea <dbl+lbl>, fac00 <dbl>, idboleta <dbl>,
## #   codigomunic <dbl>, municauto <dbl>, autorrepresentado <dbl+lbl>,
## #   r004 <dbl+lbl>, r005 <dbl+lbl>, r006 <dbl+lbl>, r017 <dbl+lbl>, r018 <dbl>,
## #   r019 <dbl+lbl>, r020 <dbl+lbl>, r021a <dbl>, r021b <dbl>, r022 <dbl>,
## #   r023 <dbl>, r024 <dbl>, r027 <dbl>, r033 <dbl>, r034 <dbl>, r035 <dbl>,
## #   r035a <dbl>, r036 <dbl>, r038 <dbl>, r042 <dbl>, r04a <dbl>,
## #   znorte <dbl+lbl>, gasper <dbl>, gastohog <dbl>, ghali <dbl>, ghase <dbl>, …
head(Persona)
## # A tibble: 6 × 557
##   edicion  r015  lote tipo       folio viv      r101 area    region  correlativo
##     <dbl> <dbl> <dbl> <dbl+lbl>  <dbl> <dbl+l> <dbl> <dbl+l> <dbl+l>       <dbl>
## 1    2015     4    19 0 [Muestr…    29 0 [Mue…     1 1 [Urb… 1 [Occ…          19
## 2    2015     4    19 0 [Muestr…    29 0 [Mue…     2 1 [Urb… 1 [Occ…          19
## 3    2015     4    19 0 [Muestr…    31 0 [Mue…     1 1 [Urb… 1 [Occ…          19
## 4    2015     4    19 0 [Muestr…    31 0 [Mue…     2 1 [Urb… 1 [Occ…          19
## 5    2015     4    19 0 [Muestr…    31 0 [Mue…     3 1 [Urb… 1 [Occ…          19
## 6    2015     4    19 0 [Muestr…    31 0 [Mue…     4 1 [Urb… 1 [Occ…          19
## # ℹ 547 more variables: estratoarea <dbl+lbl>, fac00 <dbl>, idboleta <dbl>,
## #   codigomunic <dbl>, municauto <dbl>, autorrepresentado <dbl+lbl>,
## #   r004 <dbl+lbl>, r005 <dbl+lbl>, r006 <dbl+lbl>, r017 <dbl+lbl>, r018 <dbl>,
## #   r019 <dbl+lbl>, r020 <dbl+lbl>, r021a <dbl>, r021b <dbl>, r022 <dbl>,
## #   r023 <dbl>, r024 <dbl>, r027 <dbl>, r033 <dbl>, r034 <dbl>, r035 <dbl>,
## #   r035a <dbl>, r036 <dbl>, r038 <dbl>, r042 <dbl>, r04a <dbl>,
## #   znorte <dbl+lbl>, actpr <dbl+lbl>, actpr2012 <dbl+lbl>, actse <dbl+lbl>, …

Con este paso fue posible observar que la carga de archivos fue exitosa.

Creación de Diccionario.

Sin embargo, ahora es necesario crear un diccionario para estas variables. Con este objetivo se ejectutará el siguiente chunk de código:

# Extraer etiquetas de variables de cada data frame
get_variable_labels <- function(df) {
  labels <- map_chr(df, ~ attr(.x, "label", exact = TRUE) %||% NA_character_)
  tibble(variable = names(df), etiqueta = labels)
}

# Crear diccionarios
diccionario_Hogar <- get_variable_labels(Hogar)
diccionario_Persona <- get_variable_labels(Persona)

# Ver los primeros registros
head(diccionario_Hogar)
## # A tibble: 6 × 2
##   variable etiqueta            
##   <chr>    <chr>               
## 1 edicion  Año de levantamiento
## 2 r015     Mes de la entrevista
## 3 lote     Lote                
## 4 tipo     Tipo                
## 5 folio    Folio               
## 6 viv      Vivienda
head(diccionario_Persona)
## # A tibble: 6 × 2
##   variable etiqueta            
##   <chr>    <chr>               
## 1 edicion  Año de levantamiento
## 2 r015     Mes de la entrevista
## 3 lote     Lote                
## 4 tipo     Tipo                
## 5 folio    Folio               
## 6 viv      Vivienda

4. Creación de Variables de solo gasto.

En este paso se seleccionarán las variables que contengan el gasto, ya que únicamente estas serán relevantes para el presente análisis.

# Filtrar variables de diccionario_Hogar que contengan "Gasto" o "Gastos"
gastos_hogar <- diccionario_Hogar %>%
  filter(grepl("Gasto|Gastos", etiqueta, ignore.case = TRUE))

# Filtrar variables de diccionario_Persona que contengan "Gasto" o "Gastos"
gastos_persona <- diccionario_Persona %>%
  filter(grepl("Gasto|Gastos", etiqueta, ignore.case = TRUE))

# Mostrar las primeras filas de cada resultado
head(gastos_hogar)
## # A tibble: 6 × 2
##   variable etiqueta                                
##   <chr>    <chr>                                   
## 1 gasper   Gasto percápita                         
## 2 gastohog Gasto total del hogar                   
## 3 ghali    Gasto del hogar en alimentación         
## 4 ghase    Gasto del hogar en artículos y servicios
## 5 ghu12    Gasto del hogar en los últimos 12 meses 
## 6 ghul6    Gasto del hogar en los últimos 6 meses
head(gastos_persona)
## # A tibble: 6 × 2
##   variable etiqueta                                
##   <chr>    <chr>                                   
## 1 gasper   Gasto percápita                         
## 2 gastohog Gasto total del hogar                   
## 3 ghali    Gasto del hogar en alimentación         
## 4 ghase    Gasto del hogar en artículos y servicios
## 5 ghu12    Gasto del hogar en los últimos 12 meses 
## 6 ghul6    Gasto del hogar en los últimos 6 meses

Aunque estas variables sean todas las que contienen gasto, para este análisis se considerarán únicamente los gastos del hogar. Para esto, se filtrarán de estas tablas las que contengan esta combinación de caracteres.

gasto_hogar_filtro <- gastos_hogar |> 
  filter(grepl("Gasto del hogar", etiqueta, ignore.case = TRUE))

# Filtrar variables en diccionario_Persona con "Gasto del Hogar"
gasto_persona_filtro <- gastos_persona |> 
  filter(grepl("Gasto del hogar", etiqueta, ignore.case = TRUE))

# Mostrar las primeras filas de cada resultado
head(gasto_hogar_filtro)
## # A tibble: 6 × 2
##   variable etiqueta                                
##   <chr>    <chr>                                   
## 1 ghali    Gasto del hogar en alimentación         
## 2 ghase    Gasto del hogar en artículos y servicios
## 3 ghu12    Gasto del hogar en los últimos 12 meses 
## 4 ghul6    Gasto del hogar en los últimos 6 meses  
## 5 gmed     Gasto del hogar en educación            
## 6 gmem     Gasto del hogar en empleo
head(gasto_persona_filtro)
## # A tibble: 6 × 2
##   variable etiqueta                                
##   <chr>    <chr>                                   
## 1 ghali    Gasto del hogar en alimentación         
## 2 ghase    Gasto del hogar en artículos y servicios
## 3 ghu12    Gasto del hogar en los últimos 12 meses 
## 4 ghul6    Gasto del hogar en los últimos 6 meses  
## 5 gmed     Gasto del hogar en educación            
## 6 gmem     Gasto del hogar en empleo

Este código ya nos deja las variables que serán analizadas.

5. Análisis de la estructura de aporte

Estas variables serán seleccionadas de ambas bases de datos a través del siguiente chunk de código:

### Gasto Hogar
Hogar_filtro <- Hogar |> 
  select(ghali, ghase, ghu12, ghul6, gmed, gmem, gmsa, gmvi, gtmh,fac00)

### Gasto Personas
Personas_filtro <- Persona |> 
  select(ghali, ghase, ghu12, ghul6, gmed, gmem, gmsa, gmvi, gtmh, fac00)

head(Hogar_filtro)
## # A tibble: 6 × 10
##   ghali ghase ghu12 ghul6  gmed  gmem  gmsa  gmvi  gtmh fac00
##   <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1  11.2  1.25     0  0        0     0  0     0.5   12.4    31
## 2  39.2  3.1      0  0        0     0  0     4     42.3   134
## 3  21.7 12.2      0  1.67     0     0  1.45  1     35.6    44
## 4  21.8  6.5      0  0        0     0  0     0     28.3    79
## 5  32.0  7.58     0  0        0     0  0     4.95  39.6    46
## 6  41.9  7.52     0  0        0     0  0     5     49.4    43
head(Personas_filtro)
## # A tibble: 6 × 10
##   ghali ghase ghu12 ghul6  gmed  gmem  gmsa  gmvi  gtmh fac00
##   <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1  99.1  20       0  29.2 232.   10.8     0  86    148.    95
## 2  99.1  20       0  29.2 232.   10.8     0  86    148.    95
## 3 217.   23.5     0   0    20.5  32.5     0  39.7  240.    95
## 4 217.   23.5     0   0    20.5  32.5     0  39.7  240.    95
## 5 217.   23.5     0   0    20.5  32.5     0  39.7  240.    95
## 6 217.   23.5     0   0    20.5  32.5     0  39.7  240.    95

Una vez que tenemos las variables que deseamos analizar , es necesario convertirlas en objetos de diseño muestral compleo. Para esto se empleará la librería srvy

library(srvyr) #Librería de diseño muestral complejo.
## 
## Adjuntando el paquete: 'srvyr'
## The following object is masked from 'package:stats':
## 
##     filter
### Diseño muestral para hogares
Hogar_filtro_svy <-  Hogar_filtro |> 
  as_survey_design(weights = fac00)

### Diseño muestral para hogares
Personas_filtro_svy <-  Personas_filtro |> 
  as_survey_design(weights = fac00)

Ya transformados en objetos con factor de expansión se obtendrá el gasto total:

# Crear la columna de total en el diseño muestral de hogares, excluyendo 'fac00'
# Crear la columna de total en el diseño muestral de hogares, excluyendo 'fac00'


# Modificar el diseño muestral para agregar la columna total_gasto en Hogar_filtro_svy
Hogar_filtro_svy <- Hogar_filtro_svy %>%
  mutate(total_gasto = rowSums(across(where(is.numeric), ~ ., .names = "col_{.col}"), na.rm = TRUE) - fac00)

# Modificar el diseño muestral para agregar la columna total_gasto en Personas_filtro_svy
Personas_filtro_svy <- Personas_filtro_svy %>%
  mutate(total_gasto = rowSums(across(where(is.numeric), ~ ., .names = "col_{.col}"), na.rm = TRUE) - fac00)

# Verificar las primeras filas
head(Hogar_filtro_svy)
## Independent Sampling design (with replacement)
## Called via srvyr
## Sampling variables:
##  - ids: `1`
##  - weights: fac00
## Data variables: ghali (dbl), ghase (dbl), ghu12 (dbl), ghul6 (dbl), gmed (dbl),
##   gmem (dbl), gmsa (dbl), gmvi (dbl), gtmh (dbl), fac00 (dbl), total_gasto
##   (dbl)
head(Personas_filtro_svy)
## Independent Sampling design (with replacement)
## Called via srvyr
## Sampling variables:
##  - ids: `1`
##  - weights: fac00
## Data variables: ghali (dbl), ghase (dbl), ghu12 (dbl), ghul6 (dbl), gmed (dbl),
##   gmem (dbl), gmsa (dbl), gmvi (dbl), gtmh (dbl), fac00 (dbl), total_gasto
##   (dbl)