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