Paso 1: Preparación del Entorno de Trabajo

#### 1.1 Instalación de Librerías:

# Cargar librerías necesarias
library(tidyverse)  # Incluye purrr
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ readr     2.1.4
## ✔ forcats   1.0.0     ✔ stringr   1.5.0
## ✔ ggplot2   3.4.4     ✔ tibble    3.2.1
## ✔ lubridate 1.9.2     ✔ tidyr     1.3.0
## ✔ 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(fs)         # Para dir_ls()
## Warning: package 'fs' was built under R version 4.3.3
library(haven)      # Para read_sav()

Paso 2. Importación y Exploración de la Encuesta

#### 2.1 Lectura del Archivo SPSS:

# Especifica la carpeta donde están los archivos SPSS
carpeta <- "/Users/ahtzirigarcia/Documents/Toma de decisiones bajo condiciones de incertidumbre/EHPM SPSS 2013"

# Obtén la lista de archivos .sav en la carpeta
archivos_spss <- dir_ls(carpeta, glob = "*.sav")

# Leer los archivos y guardarlos en una lista
lista_datos <- map(archivos_spss, read_sav)

# Opcional: Asignar nombres a los elementos de la lista con el nombre del archivo
names(lista_datos) <- basename(archivos_spss)

# Convertir cada elemento de la lista en un objeto en el Environment de R
list2env(lista_datos, envir = .GlobalEnv)
## <environment: R_GlobalEnv>

#### 2.2 Obtención de Etiquetas:

#Asegurar que tienes las paqueterias necesarias
chooseCRANmirror(graphics = FALSE, ind = 1)  # Selecciona un mirror automáticamente
library(haven)
library(labelled)
## Warning: package 'labelled' was built under R version 4.3.3
library(tidyverse)  # Para manipulación de datos

2.3 Extraer etiquetas de variables y guardarlas en un data frame de SOLO UN PRIMER ARCHIVO

library(tibble)
library(purrr)
library(labelled)

# Extraer etiquetas de variables y guardarlas en un data frame
df_etiquetas <- tibble(
  Variable = names(SEC0.sav),
  Etiqueta = map_chr(SEC0.sav, ~ ifelse(is.null(var_label(.x)), NA, var_label(.x)))  # Manejo de valores NULL
)

# Mostrar el data frame con las etiquetas
print(df_etiquetas)
## # A tibble: 99 × 2
##    Variable Etiqueta                           
##    <chr>    <chr>                              
##  1 EDICION  <NA>                               
##  2 LOTE     <NA>                               
##  3 TIPO     <NA>                               
##  4 FOLIO    <NA>                               
##  5 VIV      <NA>                               
##  6 R01A     Algun miembro esta en el extranjero
##  7 R01B     Total en extranjero                
##  8 R01C     Hombres en el extranjero           
##  9 R01D     Mujeres en el extranjero           
## 10 R02A     Tiene pupilos                      
## # ℹ 89 more rows

2.4 Ya funcionó para una sola variable, ahora hagamoslo para el resto de ellas

# Obtener la lista de los objetos en el Environment que son data frames o tibbles
archivos_spss <- ls()  # Lista de nombres de objetos en el Environment

# Filtrar solo los que son data frames (para evitar errores con otros objetos)
archivos_spss <- archivos_spss[sapply(archivos_spss, function(x) inherits(get(x), "data.frame"))]

# Función para extraer etiquetas de cada archivo
extraer_etiquetas <- function(dataset_name) {
  dataset <- get(dataset_name)  # Obtiene el objeto del Environment
  tibble(
    Archivo = dataset_name,
    Variable = names(dataset),
    Etiqueta = map_chr(dataset, ~ ifelse(is.null(var_label(.x)), NA, var_label(.x)))
  )
}

# Aplicar la función a todos los archivos SPSS en el Environment
df_etiquetas_total <- bind_rows(map(archivos_spss, extraer_etiquetas))

# Mostrar el resultado
print(df_etiquetas_total)
## # A tibble: 942 × 3
##    Archivo      Variable Etiqueta                           
##    <chr>        <chr>    <chr>                              
##  1 df_etiquetas Variable <NA>                               
##  2 df_etiquetas Etiqueta <NA>                               
##  3 SEC0.sav     EDICION  <NA>                               
##  4 SEC0.sav     LOTE     <NA>                               
##  5 SEC0.sav     TIPO     <NA>                               
##  6 SEC0.sav     FOLIO    <NA>                               
##  7 SEC0.sav     VIV      <NA>                               
##  8 SEC0.sav     R01A     Algun miembro esta en el extranjero
##  9 SEC0.sav     R01B     Total en extranjero                
## 10 SEC0.sav     R01C     Hombres en el extranjero           
## # ℹ 932 more rows

Paso 4. Creación de un Resumen de Variables Relacionadas con “Gasto”

#### 4.1 Generación del Resumen:

Tabla que contiene: El nombre de la variable, La descripción o etiqueta asociada, La cantidad de registros en los que se encuentra información (es decir, el número de datos no faltantes).

# Función para extraer la información requerida de cada variable
extraer_info_variables <- function(dataset_name) {
  dataset <- get(dataset_name)  # Obtiene el dataset desde el Environment
  tibble(
    Archivo = dataset_name, 
    Variable = names(dataset),  # Nombre de la variable
    Etiqueta = map_chr(dataset, ~ ifelse(is.null(var_label(.x)), NA, var_label(.x))),  # Etiqueta
    Datos_No_NA = map_int(dataset, ~ sum(!is.na(.x)))  # Cantidad de registros no faltantes
  )
}

# Aplicar la función a todos los archivos SPSS en el Environment
df_info_variables <- bind_rows(map(archivos_spss, extraer_info_variables))

# Mostrar la tabla final
print(df_info_variables)
## # A tibble: 942 × 4
##    Archivo      Variable Etiqueta                            Datos_No_NA
##    <chr>        <chr>    <chr>                                     <int>
##  1 df_etiquetas Variable <NA>                                         99
##  2 df_etiquetas Etiqueta <NA>                                         93
##  3 SEC0.sav     EDICION  <NA>                                      21086
##  4 SEC0.sav     LOTE     <NA>                                      21086
##  5 SEC0.sav     TIPO     <NA>                                      21086
##  6 SEC0.sav     FOLIO    <NA>                                      21086
##  7 SEC0.sav     VIV      <NA>                                      21086
##  8 SEC0.sav     R01A     Algun miembro esta en el extranjero       21086
##  9 SEC0.sav     R01B     Total en extranjero                        3554
## 10 SEC0.sav     R01C     Hombres en el extranjero                   3554
## # ℹ 932 more rows

#### 4.2 Filtrado por Gasto:

De la tabla anterior, selecciona únicamente aquellas variables cuya descripción incluya la palabra “gasto”. Este paso es importante para enfocarse en las variables que corresponden a los gastos del hogar.

library(dplyr)

# Filtrar variables cuya etiqueta contenga "gasto" o "gastos" (sin importar mayúsculas/minúsculas)
df_gasto <- df_info_variables %>%
  filter(grepl("\\bgastos?\\b", Etiqueta, ignore.case = TRUE))

# Mostrar la tabla filtrada
print(df_gasto)
## # A tibble: 72 × 4
##    Archivo   Variable Etiqueta                                 Datos_No_NA
##    <chr>     <chr>    <chr>                                          <int>
##  1 SEC00.sav GASTOHOG Gastos del hogar                               21086
##  2 SEC00.sav GHALI    Gasto del Hogar en Alimentos                   21086
##  3 SEC00.sav GHASE    Gasto del Hogar en Artículos y Servicios       21086
##  4 SEC00.sav GHUL6    Gasto del Hogar en Ultimos 6 Meses             21086
##  5 SEC00.sav GHU12    Gasto del Hogar en Ultimos 12 Meses            21086
##  6 SEC00.sav GMED     Gasto del Hogar en Educación                   21086
##  7 SEC00.sav GMVI     Gasto del Hogar en Vivienda                    21086
##  8 SEC00.sav GMEM     Gasto del Hogar en Empleo                      21086
##  9 SEC00.sav GMSA     Gasto del Hogar en Salud                       21086
## 10 SEC00.sav GTMH     Gasto del Hogar en Sección 8                   21086
## # ℹ 62 more rows

#### 4.3 Presentación de la Información: Ahora esta tabla se presenta de forma ordenada y estilizada para facilitar su lectura e interpretación.

install.packages("kableExtra")
## 
## The downloaded binary packages are in
##  /var/folders/5c/t9gj29jj31d5cmjmv558mcch0000gn/T//RtmpsaGswY/downloaded_packages
# Cargar librerías necesarias
library(dplyr)
library(knitr)
library(kableExtra)
## 
## Attaching package: 'kableExtra'
## The following object is masked from 'package:dplyr':
## 
##     group_rows
# Ordenar la tabla por número de datos no faltantes en orden descendente
df_gasto_ordenado <- df_gasto %>%
  arrange(desc(Datos_No_NA)) 

# Crear una tabla estilizada con `kableExtra`
tabla_estilizada <- df_gasto_ordenado %>%
  kable(format = "html", caption = "Variables relacionadas con Gasto") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"))

# Mostrar la tabla estilizada en RMarkdown o en el visor de RStudio
tabla_estilizada
Variables relacionadas con Gasto
Archivo Variable Etiqueta Datos_No_NA
SECCION8A.sav R804 Frecuencia ¿Cuántas veces realiza este gasto o lo adquiere a la SEMANA? 774248
SECCION8A.sav R806 ¿Cuál fue el gasto total de los alimetos que compró o adquirió? (Especificar el valor en dólares) 774248
SEC04.sav GASTOALIMENTO GASTO EN CONSUMO ALIMENTO FUERA DEL HOGAR 74777
SECCION8B.sav R811B1 ¿Cuál fue el valor del gasto? 70728
SEC04.sav R44901 Si / No Tuvo gasto 67521
SEC04.sav R44902 Si / No Tuvo gasto 67521
SEC04.sav R44903 Si / No Tuvo gasto 67521
SEC04.sav R44904 Si / No Tuvo gasto 67521
SECCION8C.sav R811C1 ¿Cuál fue el valor del gasto? 29650
SEC02.sav R2231 Matricula no gasto 23682
SEC02.sav R223A1 Matricula no gasto 23682
SEC02.sav R223B1 No Gasto 23682
SEC00.sav GASTOHOG Gastos del hogar 21086
SEC00.sav GHALI Gasto del Hogar en Alimentos 21086
SEC00.sav GHASE Gasto del Hogar en Artículos y Servicios 21086
SEC00.sav GHUL6 Gasto del Hogar en Ultimos 6 Meses 21086
SEC00.sav GHU12 Gasto del Hogar en Ultimos 12 Meses 21086
SEC00.sav GMED Gasto del Hogar en Educación 21086
SEC00.sav GMVI Gasto del Hogar en Vivienda 21086
SEC00.sav GMEM Gasto del Hogar en Empleo 21086
SEC00.sav GMSA Gasto del Hogar en Salud 21086
SEC00.sav GTMH Gasto del Hogar en Sección 8 21086
SEC03.sav R33117A Otros tipo de gasto 21086
SEC03.sav R33102B Gasto de electricidad en dólares 18924
SEC03.sav R33110B Gasto de celular en dólares 18284
SEC02.sav R223A2 Monto Gasto 15612
SEC03.sav R33101B Gasto de agua en dólares 14161
SEC03.sav R33104B Gasto de gas propano en dólares 12077
SEC06.sav R615 ¿CUÁNTO FUE EL GASTO DE (…) EN MEDICINAS? 9855
SEC02.sav R223B2 Monto Gasto 6701
SEC06.sav R605 ¿CUÁNTO FUE EL GASTO EN CONSULTA DE (…)? 6004
SEC06.sav R606 ¿CUÁNTO FUE EL GASTO EN ANÁLISIS DE LABORATORIO DE (…)? 6004
SEC06.sav R607 ¿CUÁNTO FUE EL GASTO DE (…) EN RAYOS X? 6004
SEC06.sav R608 ¿CUÁNTO FUE EL GASTO DE (…) EN OTROS EXÁMENES? 6004
SEC03.sav R33111B Gasto de cable/cable del vecino en dólares 5184
SEC07.sav R70506A Gastos médicos consulta permanente 5001
SEC07.sav R70507A Gastos médicos internaciòn 5001
SEC07.sav R70508A Otros gastos médicos permanente (exámenes, medicinas, etc) 5001
SEC07.sav R70509A Gastos médicos consulta eventual 5001
SEC07.sav R70510A Otros gastos médicos eventuales (exámenes, medicinas, etc) 5001
SEC07.sav R70511A Gastos en educación 5001
SEC07.sav R70506B Gastos médicos consulta permanente 4846
SEC07.sav R70507B Gastos médicos internaciòn 4846
SEC07.sav R70508B Otros gastos médicos permanente (exámenes, medicinas, etc) 4846
SEC07.sav R70509B Gastos médicos consulta eventual 4846
SEC07.sav R70510B Otros gastos médicos eventuales (exámenes, medicinas, etc) 4846
SEC07.sav R70511B Gastos en educación 4846
SEC06.sav R615A Medicinas monto gasto del hogar 4686
SECCION8D.sav R811D1 ¿Cuál fue el valor del gasto? 4300
SEC03.sav R33109B Gasto de telefono fijo en dólares 3553
SEC03.sav R33101B1 Gasto de agua envasada en dólares 2381
SEC03.sav R33114B Gasto de impuestos municipales en dólares 2262
SEC03.sav R33113B Gasto de cibercafe en dólares 2152
SEC03.sav R33101B2 Gasto de agua envasada en dólares 2034
SEC06.sav R605A Gasto del hogar 1032
SEC03.sav R33112B Gasto de internet en dólares 726
SEC06.sav R606A Gasto del hogar 711
SEC03.sav R33106B Gasto de leña en dólares 707
SEC03.sav R33105B Gasto de candela en dólares 658
SEC03.sav R33116B Gasto de recolección de basura en dólares 512
SEC03.sav R33115B Gasto de pago de vigilancia en dólares 475
SEC03.sav R33103B Gasto de kerosen en dólares 403
SEC03.sav R33117B Otros Ultimo gasto ? 297
SEC06.sav R612 ¿CUÁNTO FUE EL GASTO EN HOSPITALIZACIÓN DE (…)? 297
SEC06.sav R613 ¿CUÁNTO FUE EL GASTO EN MEDICAMENTOS DE (…)? 297
SEC06.sav R614 Examenes no gasto 297
SEC06.sav R607A Gasto del hogar Rayos X 62
SEC03.sav R33107B Gasto de carga de batería en dólares 54
SEC06.sav R608A Gasto del hogar 46
SEC06.sav R613A Gasto del hogar 28
SEC06.sav R612A Gasto del Hogar 19
SEC06.sav R614A Examenes laboratorio rayos “x” gasto del Hogar 5

Paso 5.Preparación y Limpieza de los Datos para el Análisis

#### 5.1 Depuración de Registros: !! El profe Victor dijo que podía saltarme este paso por tener pocas variables!!

#### 5.2 Conversión de Frecuencias: Asegurar que todo está en base mensual, para ello clasificaré las Variables por Periodicidad para decidir cual voy a ocupar.

library(dplyr)

# Asegúrate de que trabajas con un data frame y no con una tabla formateada
df_periodicidad <- df_gasto_ordenado %>%  
  mutate(
    Periodicidad = case_when(
      grepl("\\b(mensual|por mes)\\b", Etiqueta, ignore.case = TRUE) ~ "Mensual",
      grepl("\\b(anual|por año)\\b", Etiqueta, ignore.case = TRUE) ~ "Anual",
      grepl("\\b(Ultimos 12 Meses)\\b", Etiqueta, ignore.case = TRUE) ~ "Últimos 12 meses",
      grepl("\\b(Ultimos 6 Meses)\\b", Etiqueta, ignore.case = TRUE) ~ "Últimos 6 meses",
      TRUE ~ "Mensualmente"
    )
  )

# Contar cuántas variables hay en cada categoría
conteo_periodicidad <- df_periodicidad %>%
  count(Periodicidad)

# Mostrar la tabla con el conteo de periodicidad
print(conteo_periodicidad)
## # A tibble: 3 × 2
##   Periodicidad         n
##   <chr>            <int>
## 1 Mensualmente        70
## 2 Últimos 12 meses     1
## 3 Últimos 6 meses      1

Me quedaré enonces sólo con los datos mensuales ya que el semestral y anual no me interesa por ahora

library(dplyr)

# Crear una nueva tabla donde todo se clasifica como "Mensualmente"
df_Mensualmente <- df_gasto_ordenado %>%
  mutate(Periodicidad = "Mensualmente")  # Todas las variables son "Mensualmente"

# Mostrar la nueva tabla
print(df_Mensualmente)
## # A tibble: 72 × 5
##    Archivo       Variable      Etiqueta                 Datos_No_NA Periodicidad
##    <chr>         <chr>         <chr>                          <int> <chr>       
##  1 SECCION8A.sav R804          Frecuencia ¿Cuántas vec…      774248 Mensualmente
##  2 SECCION8A.sav R806          ¿Cuál fue el gasto tota…      774248 Mensualmente
##  3 SEC04.sav     GASTOALIMENTO GASTO EN CONSUMO ALIMEN…       74777 Mensualmente
##  4 SECCION8B.sav R811B1        ¿Cuál fue el valor del …       70728 Mensualmente
##  5 SEC04.sav     R44901        Si / No  Tuvo gasto            67521 Mensualmente
##  6 SEC04.sav     R44902        Si / No  Tuvo gasto            67521 Mensualmente
##  7 SEC04.sav     R44903        Si / No  Tuvo gasto            67521 Mensualmente
##  8 SEC04.sav     R44904        Si / No  Tuvo gasto            67521 Mensualmente
##  9 SECCION8C.sav R811C1        ¿Cuál fue el valor del …       29650 Mensualmente
## 10 SEC02.sav     R2231         Matricula no gasto             23682 Mensualmente
## # ℹ 62 more rows

5.3 Cálculo de Nuevos Indicadores:

Se muestara el gasto total MENSUAL del hogar sumando los distintos rubros que componen el gasto

library(dplyr)

# Calcular la suma total de los rubros de gasto
gasto_total_hogar <- df_Mensualmente %>%
  summarise(Gasto_Total_Hogar = sum(Datos_No_NA, na.rm = TRUE))

# Mostrar el resultado
print(gasto_total_hogar)
## # A tibble: 1 × 1
##   Gasto_Total_Hogar
##               <int>
## 1           2508617

Paso 6.Análisis de la Estructura del Gasto

#### 6.1 Cálculo del Porcentaje de Aporte Para cada variable relacionada con el gasto, se muestra qué porcentaje representa dentro del gasto total del hogar. Esto para identificar la importancia relativa de cada rubro.