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
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.
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
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.
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)