#1.Descarga de la Información: Encuesta de Hogares de Propósitos Múltiples (EHPM) de El Salvador 2016
#2.Preparación del Entorno de Trabajo
# Cargar las librerías necesarias para la manipulación y análisis de datos
library(haven) # Para leer archivos SPSS (.sav)
library(dplyr) # Para manipulación de datos
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(tidyverse) # Conjunto de herramientas para análisis de datos
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ forcats 1.0.0 ✔ readr 2.1.5
## ✔ ggplot2 3.5.1 ✔ stringr 1.5.1
## ✔ lubridate 1.9.4 ✔ tibble 3.2.1
## ✔ purrr 1.0.4 ✔ tidyr 1.3.1
## ── 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(tidyr) # Para limpiar y transformar datos
library(ggplot2) # Para visualización de datos (aunque no se usa en este código)
library(stargazer) # Para análisis de encuestas y generación de tablas estilizadas
##
## Please cite as:
##
## Hlavac, Marek (2022). stargazer: Well-Formatted Regression and Summary Statistics Tables.
## R package version 5.2.3. https://CRAN.R-project.org/package=stargazer
#3.Importación y Exploración de la Encuesta
# Listar los archivos en la carpeta donde se encuentran los datos
list.files("/Users/michelleromero/Desktop/ACT0/EHPM SPSS 2016")
## [1] "EHPM 2016 RESUMEN.sav" "EHPM 2016 SEC0.sav" "EHPM 2016 SEC01.sav"
## [4] "EHPM 2016 SEC01A.sav" "EHPM 2016 SEC02.sav" "EHPM 2016 SEC03.sav"
## [7] "EHPM 2016 SEC04.sav" "EHPM 2016 SEC05.sav" "EHPM 2016 SEC06.sav"
## [10] "EHPM 2016 SEC07.sav" "EHPM 2016 SEC08A.sav" "EHPM 2016 SEC08B.sav"
## [13] "EHPM 2016 SEC10.sav" "EHPM 2016 SEC11.sav"
# Importar librerías necesarias para la lectura de archivos SPSS
library(haven)
library(purrr)
# Definir la ruta de la carpeta donde están los archivos SPSS
ruta_carpeta <- "/Users/michelleromero/Desktop/ACT0/EHPM SPSS 2016"
# Obtener la lista de archivos con extensión .sav dentro de la carpeta
archivos_spss <- list.files(ruta_carpeta, pattern = "(?i)\\.sav$", full.names = TRUE)
# Leer cada archivo SPSS y guardarlo en una lista de dataframes
lista_datos <- map(archivos_spss, read_sav)
# Extraer los nombres de los archivos sin la extensión .sav y asignarlos a la lista de dataframes
nombres_archivos <- tools::file_path_sans_ext(basename(archivos_spss))
names(lista_datos) <- nombres_archivos
# Mostrar los nombres de los datasets cargados para verificar la importación correcta
print(names(lista_datos))
## [1] "EHPM 2016 RESUMEN" "EHPM 2016 SEC0" "EHPM 2016 SEC01"
## [4] "EHPM 2016 SEC01A" "EHPM 2016 SEC02" "EHPM 2016 SEC03"
## [7] "EHPM 2016 SEC04" "EHPM 2016 SEC05" "EHPM 2016 SEC06"
## [10] "EHPM 2016 SEC07" "EHPM 2016 SEC08A" "EHPM 2016 SEC08B"
## [13] "EHPM 2016 SEC10" "EHPM 2016 SEC11"
#4.Creación de un Resumen de Variables Relacionadas con “Gasto”-Etiquetas
# Cargar librerías necesarias para manipulación de datos y extracción de etiquetas
library(haven)
library(dplyr)
library(tidyr)
# Seleccionar el sexto archivo de la lista para análisis (puedes cambiar índice si se necesita otro archivo)
data_2 <- lista_datos[[6]]
# Extraer las etiquetas de las variables del dataset seleccionado
column_labels_2 <- sapply(data_2, function(col) attr(col, "label"))
# Convertir las etiquetas en un vector para facilitar su manipulación
labels_vector_2 <- sapply(column_labels_2, function(x) {
if (is.null(x)) {
return(NA) # Si la variable no tiene etiqueta, asignar NA
} else {
return(x) # Si tiene etiqueta, devolverla
}
})
# Crear un resumen de datos no faltantes por variable
summary_table_2 <- data_2 %>%
summarise(across(everything(), ~ sum(!is.na(.)))) %>% # Contar valores no faltantes en cada variable
pivot_longer(cols = everything(), names_to = "Variable", values_to = "Non_Null_Count") %>%
mutate(Description = labels_vector_2) %>% # Agregar la descripción de la variable
filter(grepl("gasto", Description, ignore.case = TRUE)) %>% # Filtrar solo variables relacionadas con "gasto"
select(Variable, Description, Non_Null_Count) # Seleccionar columnas relevantes
# Mostrar la tabla resumen de variables de gasto
print(summary_table_2)
## # A tibble: 41 × 3
## Variable Description Non_Null_Count
## <chr> <chr> <int>
## 1 r33101a Tipo de gasto en agua (servicio de ANDA) 20609
## 2 r33101b Gasto mensual en agua (servicio de ANDA) 6335
## 3 r33101a1 Tipo de gasto en agua envasada 20609
## 4 r33101b1 Gasto mensual en agua envasada 1606
## 5 r33101a2 Tipo de gasto en agua (otras fuentes) 20609
## 6 r33101b2 Gasto mensual en agua (otras fuentes) 10082
## 7 r33102a Tipo de gasto en electricidad 20609
## 8 r33102b Gasto mensual en electricidad 18890
## 9 r33103a Tipo de gasto en kerosene 20609
## 10 r33103b Gasto mensual en kerosene 206
## # ℹ 31 more rows
# Cargar librería para mejorar la visualización de tablas
library(kableExtra)
##
## Attaching package: 'kableExtra'
## The following object is masked from 'package:dplyr':
##
## group_rows
# Mostrar la tabla de variables relacionadas con "gasto" de manera estilizada
summary_table_2 %>%
kable("html", col.names = c("Variable", "Descripción", "Registros No Faltantes")) %>%
kable_styling("striped", full_width = F, position = "center") %>%
column_spec(1, bold = TRUE) %>% # Poner en negrita la primera columna
column_spec(2, width = "15em") %>% # Ajustar ancho de la columna de descripción
column_spec(3, width = "8em") # Ajustar ancho de la columna de conteo
Variable | Descripción | Registros No Faltantes |
---|---|---|
r33101a | Tipo de gasto en agua (servicio de ANDA) | 20609 |
r33101b | Gasto mensual en agua (servicio de ANDA) | 6335 |
r33101a1 | Tipo de gasto en agua envasada | 20609 |
r33101b1 | Gasto mensual en agua envasada | 1606 |
r33101a2 | Tipo de gasto en agua (otras fuentes) | 20609 |
r33101b2 | Gasto mensual en agua (otras fuentes) | 10082 |
r33102a | Tipo de gasto en electricidad | 20609 |
r33102b | Gasto mensual en electricidad | 18890 |
r33103a | Tipo de gasto en kerosene | 20609 |
r33103b | Gasto mensual en kerosene | 206 |
r33104a | Tipo de gasto en gas propano | 20609 |
r33104b | Gasto mensual en gas propano | 13584 |
r33105a | Tipo de gasto en candela | 20609 |
r33105b | Gasto mensual en candela | 454 |
r33106a | Tipo de gasto en leña | 20609 |
r33106b | Gasto mensual en leña | 225 |
r33107a | Tipo de gasto en carga de batería | 20609 |
r33107b | Gasto mensual en carga de batería | 36 |
r33108a | Tipo de gasto en internet móvil | 20609 |
r33108b | Gasto mensual en internet móvil | 183 |
r33109a | Tipo de gasto en teléfono fijo | 20609 |
r33109b | Gasto mensual en teléfono fijo | 1711 |
r33110a | Tipo de gasto en celular | 20609 |
r33110b | Gasto mensual en celular | 17058 |
r33111a | Tipo de gasto en cable/cable del vecino | 20609 |
r33111b | Gasto mensual en cable/cable del vecino | 5457 |
r33112a | Tipo de gasto en internet (hogar) | 20609 |
r33112b | Gasto mensual en internet (hogar) | 694 |
r33113a | Tipo de gasto en cibercafé | 20609 |
r33113b | Gasto mensual en cibercafé | 901 |
r33114a | Tipo de gasto en impuestos municipales | 20609 |
r33114b | Gasto mensual en impuestos municipales | 1878 |
r33115a | Tipo de gasto en pago de vigilancia | 20609 |
r33115b | Gasto mensual en pago de vigilancia | 385 |
r33116a | Tipo de gasto en recolección de basura | 20609 |
r33116b | Gasto mensual en recolección de basura | 415 |
r33117a | Tipo de gasto en paquete de servicios | 20609 |
r33117b | Gasto mensual en paquete de servicios | 1610 |
r33118a | Tipo de gasto en otro servicio | 20609 |
r33118b | Gasto mensual en otro servicio | 209 |
r331total | Gasto mensual total en servicios | 20609 |
#5.Análisis de la Estructura del Gasto
library(dplyr)
library(tidyr)
# Seleccionar las columnas de gasto y la columna de factor de expansión
variables_gasto <- data_2 %>%
select(starts_with("r331"), fac00) %>% # Seleccionamos las columnas de gasto y el factor de expansión
pivot_longer(cols = starts_with("r331"), names_to = "Rubro", values_to = "Gasto") %>%
filter(!is.na(Gasto)) # Filtramos las filas donde el gasto no sea NA
# Asegurarnos de que cada rubro de gasto está asociado con el factor de expansión correctamente
# Aquí vamos a repetir el factor de expansión para cada rubro correspondiente, ya que está en la misma fila por hogar
variables_gasto <- variables_gasto %>%
mutate(Gasto_Ponderado = Gasto * fac00) # Calculamos el gasto ponderado
# Calcular el total ponderado de todos los rubros
total_ponderado <- sum(variables_gasto$Gasto_Ponderado, na.rm = TRUE)
# Calcular el porcentaje que aporta cada rubro respecto al total ponderado
variables_gasto <- variables_gasto %>%
group_by(Rubro) %>% # Agrupamos por rubro para realizar cálculos por rubro
summarise(
Gasto = sum(Gasto, na.rm = TRUE), # Sumar el gasto para cada rubro
Gasto_Ponderado = sum(Gasto_Ponderado, na.rm = TRUE), # Sumar el gasto ponderado por cada rubro
Porcentaje_Aporte = (sum(Gasto_Ponderado, na.rm = TRUE) / total_ponderado) * 100 # Porcentaje de aporte
) %>%
ungroup() # Deshacer el agrupamiento
# Asociar las etiquetas descriptivas a cada rubro
variables_gasto$Descripcion <- labels_vector_2[match(variables_gasto$Rubro, names(labels_vector_2))]
# Mostrar la tabla final
print(variables_gasto)
## # A tibble: 42 × 5
## Rubro Gasto Gasto_Ponderado Porcentaje_Aporte Descripcion
## <chr> <dbl> <dbl> <dbl> <chr>
## 1 r33101a 77611 5900952 1.85 Tipo de gasto en agua (se…
## 2 r33101a1 96665 8091433 2.53 Tipo de gasto en agua env…
## 3 r33101a2 62902 6056586 1.89 Tipo de gasto en agua (ot…
## 4 r33101b 49580. 6253934. 1.96 Gasto mensual en agua (se…
## 5 r33101b1 21422. 2936576. 0.919 Gasto mensual en agua env…
## 6 r33101b2 60186. 4496845. 1.41 Gasto mensual en agua (ot…
## 7 r33102a 27447 2347815 0.734 Tipo de gasto en electric…
## 8 r33102b 261474. 27179807. 8.50 Gasto mensual en electric…
## 9 r33103a 102228 8861499 2.77 Tipo de gasto en kerosene
## 10 r33103b 852. 67434. 0.0211 Gasto mensual en kerosene
## # ℹ 32 more rows
#6. Exportación y Revisión de Resultados
library(writexl)
# Exportar la tabla final a un archivo Excel
write_xlsx(variables_gasto, path = "Estructura_Gasto_Hogar 2016.xlsx")