#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")