1.En primer lugar es necesario instalar las librerías requeridas para: Leer archivos SPSS,manipular y transformar los datos, crear tablas visualmente atractivas, exportar resultados a Excel e importación y explorar la Encuesta
# Cargar librerías necesarias
library(haven) # Leer archivos SPSS
library(dplyr) # Manipular 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(tidyr) # Transformar datos
library(purrr)
library(writexl)
# Definir la ruta donde están los archivos
ruta_archivos <- "/Users/guillermovaldes/Downloads/EHPM SPSS 2016/Datos incertidumbre"
# Obtener la lista de archivos .sav en la carpeta
archivos_sav <- list.files(path = ruta_archivos, pattern = "\\.sav$", full.names = TRUE)
print(archivos_sav) # Verificar que se listaron correctamente
## [1] "/Users/guillermovaldes/Downloads/EHPM SPSS 2016/Datos incertidumbre/EHPM 2016 SEC0.sav"
## [2] "/Users/guillermovaldes/Downloads/EHPM SPSS 2016/Datos incertidumbre/EHPM 2016 SEC01.sav"
## [3] "/Users/guillermovaldes/Downloads/EHPM SPSS 2016/Datos incertidumbre/EHPM 2016 SEC01A.sav"
## [4] "/Users/guillermovaldes/Downloads/EHPM SPSS 2016/Datos incertidumbre/EHPM 2016 SEC02.sav"
## [5] "/Users/guillermovaldes/Downloads/EHPM SPSS 2016/Datos incertidumbre/EHPM 2016 SEC03.sav"
## [6] "/Users/guillermovaldes/Downloads/EHPM SPSS 2016/Datos incertidumbre/EHPM 2016 SEC04.sav"
## [7] "/Users/guillermovaldes/Downloads/EHPM SPSS 2016/Datos incertidumbre/EHPM 2016 SEC05.sav"
## [8] "/Users/guillermovaldes/Downloads/EHPM SPSS 2016/Datos incertidumbre/EHPM 2016 SEC06.sav"
## [9] "/Users/guillermovaldes/Downloads/EHPM SPSS 2016/Datos incertidumbre/EHPM 2016 SEC07.sav"
## [10] "/Users/guillermovaldes/Downloads/EHPM SPSS 2016/Datos incertidumbre/EHPM 2016 SEC08A.sav"
## [11] "/Users/guillermovaldes/Downloads/EHPM SPSS 2016/Datos incertidumbre/EHPM 2016 SEC08B.sav"
## [12] "/Users/guillermovaldes/Downloads/EHPM SPSS 2016/Datos incertidumbre/EHPM 2016 SEC10.sav"
## [13] "/Users/guillermovaldes/Downloads/EHPM SPSS 2016/Datos incertidumbre/EHPM 2016 SEC11.sav"
# Cargar cada archivo por separado en objetos individuales
datos_1 <- read_sav(archivos_sav[1])
datos_2 <- read_sav(archivos_sav[2])
datos_3 <- read_sav(archivos_sav[3])
datos_4 <- read_sav(archivos_sav[4])
datos_5 <- read_sav(archivos_sav[5])
datos_6 <- read_sav(archivos_sav[6])
datos_7 <- read_sav(archivos_sav[7])
datos_8 <- read_sav(archivos_sav[8])
datos_9 <- read_sav(archivos_sav[9])
datos_10 <- read_sav(archivos_sav[10])
datos_11 <- read_sav(archivos_sav[11])
datos_12 <- read_sav(archivos_sav[12])
datos_13 <- read_sav(archivos_sav[13])
# Crear una lista vacía para almacenar etiquetas
lista_etiquetas <- list()
# Extraer etiquetas de cada archivo de la lista de datos cargados
for (i in 1:13) {
dataset <- get(paste0("datos_", i)) # Obtener cada dataset dinámicamente
# Extraer etiquetas y manejar variables sin etiqueta
etiquetas <- sapply(dataset, function(x) {
label <- attr(x, "label")
ifelse(is.null(label), "Sin etiqueta", label) # Reemplazar NULL por "Sin etiqueta"
})
lista_etiquetas[[paste0("datos_", i)]] <- etiquetas # Guardar etiquetas en la lista
}
3.Creación de un Resumen de Variables Relacionadas con “Gasto”
# Crear una lista vacía para almacenar las tablas de cada archivo
lista_resumen <- list()
for (i in 1:13) {
dataset <- get(paste0("datos_", i)) # Obtener dataset dinámicamente
# Crear un dataframe con la información de cada variable
resumen_df <- data.frame(
Variable = names(dataset), # Nombre de la variable
Etiqueta = sapply(dataset, function(x) {
label <- attr(x, "label")
ifelse(is.null(label), "Sin etiqueta", label) # Manejar valores sin etiqueta
}),
No_NA = sapply(dataset, function(x) sum(!is.na(x))), # Contar valores no faltantes
stringsAsFactors = FALSE
)
# Guardar la tabla en la lista con el nombre del dataset
lista_resumen[[paste0("datos_", i)]] <- resumen_df
}
# Ver la tabla resumen del primer archivo como ejemplo
head(lista_resumen[["datos_1"]])
## Variable Etiqueta No_NA
## edicion edicion Año de levantamiento 20609
## lote lote Lote 20609
## tipo tipo Tipo 20609
## folio folio Folio 20609
## viv viv Vivienda 20609
## idboleta idboleta Identificador de hogar 20609
# Crear una lista vacía para almacenar todas las variables de los 13 archivos
lista_variables <- list()
# Iterar sobre los 13 archivos y extraer la información
for (i in 1:13) {
dataset <- get(paste0("datos_", i)) # Obtener dataset dinámicamente
# Crear un dataframe con la información de cada variable
resumen_df <- data.frame(
Archivo = paste0("datos_", i), # Nombre del archivo
Variable = names(dataset), # Nombre de la variable
Etiqueta = sapply(dataset, function(x) {
label <- attr(x, "label")
ifelse(is.null(label), "Sin etiqueta", label) # Manejar valores sin etiqueta
}),
No_NA = sapply(dataset, function(x) sum(!is.na(x))), # Contar valores no faltantes
stringsAsFactors = FALSE
)
# Agregar a la lista
lista_variables[[i]] <- resumen_df
}
# Unir todas las tablas en un solo dataframe
tabla_final <- do.call(rbind, lista_variables)
# Filtrar variables donde la etiqueta contenga "gasto" o "gastó" (sin distinguir mayúsculas/minúsculas)
tabla_gastos <- tabla_final[grepl("gasto|gastó", tabla_final$Etiqueta, ignore.case = TRUE), ]
4.Preparación y Limpieza de los Datos para el Análisis
# Cargar el archivo 'datos_5' (si no lo has hecho antes)
dataset_datos_5 <- datos_5 # Suponiendo que ya cargaste el archivo 'datos_5'
# Filtrar las variables relacionadas con el gasto para 'datos_5' utilizando 'tabla_gastos'
variables_gasto_datos_5 <- tabla_gastos$Variable[tabla_gastos$Archivo == "datos_5"]
# Obtener las primeras 6 columnas (identificadores del hogar)
columnas_identificadoras <- names(dataset_datos_5)[1:7]
# Filtrar las columnas relacionadas con el gasto
columnas_gasto_datos_5 <- intersect(variables_gasto_datos_5, names(dataset_datos_5))
# Crear el dataframe con las columnas de identificación y las columnas de gasto
columnas_finales_datos_5 <- c(columnas_identificadoras, columnas_gasto_datos_5)
df_datos_5_filtrado <- dataset_datos_5[, columnas_finales_datos_5, drop = FALSE]
# Identificar las columnas cuyas etiquetas contienen la palabra "tipo"
columnas_sin_tipo <- sapply(df_datos_5_filtrado, function(x) {
label <- attr(x, "label")
# Si la etiqueta existe, verificar si contiene "tipo"
if (!is.null(label)) {
!grepl("tipo", label, ignore.case = TRUE) # Mantener columnas cuya etiqueta no contenga "tipo"
} else {
TRUE # Si no hay etiqueta, mantener la columna
}
})
# Filtrar el dataframe para eliminar las columnas con etiquetas que contienen "tipo"
df_datos_5_filtrado_sin_tipo <- df_datos_5_filtrado[, columnas_sin_tipo]
#Gasto total
# Sumar las columnas desde la columna 8 hasta la última para cada fila (cada hogar)
df_datos_5_filtrado_sin_tipo$gasto_total <- rowSums(df_datos_5_filtrado_sin_tipo[, 8:ncol(df_datos_5_filtrado_sin_tipo)], na.rm = TRUE)
# Multiplicar cada columna de gasto (incluyendo la columna 'gasto_total') por el factor de expansión 'fac00'
# Primero, aseguramos que la columna 'fac00' esté presente en el dataframe
if("fac00" %in% names(df_datos_5_filtrado_sin_tipo)) {
# Generar las columnas multiplicadas por el factor de expansión
for (columna in names(df_datos_5_filtrado_sin_tipo)[8:ncol(df_datos_5_filtrado_sin_tipo)]) {
nueva_columna <- paste0(columna, "_exp") # Nombre de la nueva columna con el sufijo "_exp"
df_datos_5_filtrado_sin_tipo[[nueva_columna]] <- df_datos_5_filtrado_sin_tipo[[columna]] * df_datos_5_filtrado_sin_tipo$fac00
}
# También generar la columna de 'gasto_total_exp' multiplicando por 'fac00'
df_datos_5_filtrado_sin_tipo$gasto_total_exp <- df_datos_5_filtrado_sin_tipo$gasto_total * df_datos_5_filtrado_sin_tipo$fac00
# Ver los primeros registros con las nuevas columnas generadas
head(df_datos_5_filtrado_sin_tipo)
} else {
message("La columna 'fac00' no está presente en el dataframe.")
}
## # A tibble: 6 × 49
## edicion lote folio viv idboleta fac00 r33101b r33101b1 r33101b2 r33102b
## <dbl> <dbl> <dbl> <dbl+lbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 2016 19 36 0 [Vivie… 132899 105 11 NA NA 12
## 2 2016 19 37 0 [Vivie… 132900 105 7 NA NA 6
## 3 2016 19 38 0 [Vivie… 132901 105 15.5 NA NA 14
## 4 2016 19 38 0 [Vivie… 134818 105 15.5 NA NA 8
## 5 2016 19 39 0 [Vivie… 132902 105 6 NA NA 7
## 6 2016 19 117 0 [Vivie… 132903 105 25 NA NA 12
## # ℹ 39 more variables: r33103b <dbl>, r33104b <dbl>, r33105b <dbl>,
## # r33106b <dbl>, r33107b <dbl>, r33108b <dbl>, r33109b <dbl>, r33110b <dbl>,
## # r33111b <dbl>, r33112b <dbl>, r33113b <dbl>, r33114b <dbl>, r33115b <dbl>,
## # r33116b <dbl>, r33117b <dbl>, r33118b <dbl>, r331total <dbl>,
## # gasto_total <dbl>, r33101b1_exp <dbl>, r33101b2_exp <dbl>,
## # r33102b_exp <dbl>, r33103b_exp <dbl>, r33104b_exp <dbl>, r33105b_exp <dbl>,
## # r33106b_exp <dbl>, r33107b_exp <dbl>, r33108b_exp <dbl>, …
# Crear un dataframe vacío para almacenar los resultados por categoría
resumen_gasto <- data.frame(
Categoria = character(),
Gasto_Total = numeric(),
Promedio_por_Hogar = numeric(),
Porcentaje = numeric(),
stringsAsFactors = FALSE
)
# Sumar los gastos de todas las categorías de los hogares (columnas con '_exp' excluyendo 'gasto_total_exp' y 'r331total_exp')
for (columna in names(df_datos_5_filtrado_sin_tipo)[grep("_exp$", names(df_datos_5_filtrado_sin_tipo))]) {
# Evitar incluir las columnas 'gasto_total_exp' y 'r331total_exp'
if (columna %in% c("gasto_total_exp", "r331total_exp")) next
# Sumar el gasto total de cada categoría
gasto_total_categoria <- sum(df_datos_5_filtrado_sin_tipo[[columna]], na.rm = TRUE)
# Obtener la etiqueta de la columna (en lugar del nombre de la columna)
etiqueta_categoria <- attr(df_datos_5_filtrado_sin_tipo[[columna]], "label")
if (is.null(etiqueta_categoria)) {
etiqueta_categoria <- "Sin etiqueta"
}
# Agregar el resultado al dataframe resumen
resumen_gasto <- rbind(resumen_gasto, data.frame(
Categoria = etiqueta_categoria, # Usamos la etiqueta como nombre de la categoría
Gasto_Total = gasto_total_categoria,
Promedio_por_Hogar = NA, # Promedio por hogar lo calcularemos más adelante
Porcentaje = NA # Por ahora dejamos el porcentaje en NA
))
}
# Calcular el gasto total de todas las categorías (la suma de todos los gastos ponderados)
gasto_total_general <- sum(resumen_gasto$Gasto_Total, na.rm = TRUE)
# Calcular el porcentaje que representa cada categoría respecto al gasto total general
resumen_gasto$Porcentaje <- (resumen_gasto$Gasto_Total / gasto_total_general) * 100
# Calcular el promedio por hogar (dividir el gasto total de cada categoría por el número de hogares)
# Asumimos que el número de hogares está representado por el número de filas en el dataframe
numero_hogares <- nrow(df_datos_5_filtrado_sin_tipo) # Total de hogares (filas en el dataframe)
resumen_gasto$Promedio_por_Hogar <- resumen_gasto$Gasto_Total / numero_hogares
# Ver la tabla con los totales, promedios y porcentajes sin las filas de 'gasto_total_exp' y 'r331total_exp'
print(resumen_gasto)
## Categoria Gasto_Total Promedio_por_Hogar
## 1 Gasto mensual en agua envasada 2936576.29 142.4899942
## 2 Gasto mensual en agua (otras fuentes) 4496844.52 218.1980940
## 3 Gasto mensual en electricidad 27179807.39 1318.8319370
## 4 Gasto mensual en kerosene 67433.60 3.2720462
## 5 Gasto mensual en gas propano 7797266.21 378.3427731
## 6 Gasto mensual en candela 149581.90 7.2580863
## 7 Gasto mensual en leña 153534.22 7.4498627
## 8 Gasto mensual en carga de batería 14226.25 0.6902931
## 9 Gasto mensual en internet móvil 182665.03 8.8633621
## 10 Gasto mensual en teléfono fijo 1563054.07 75.8432758
## 11 Gasto mensual en celular 14825178.25 719.3545660
## 12 Gasto mensual en cable/cable del vecino 6696878.58 324.9492251
## 13 Gasto mensual en internet (hogar) 1525739.99 74.0327037
## 14 Gasto mensual en cibercafé 413653.90 20.0715173
## 15 Gasto mensual en impuestos municipales 1275388.40 61.8850211
## 16 Gasto mensual en pago de vigilancia 988964.15 47.9870033
## 17 Gasto mensual en recolección de basura 91554.27 4.4424412
## 18 Gasto mensual en paquete de servicios 8143754.06 395.1552264
## 19 Gasto mensual en otro servicio 59198.55 2.8724611
## Porcentaje
## 1 3.73794261
## 2 5.72399456
## 3 34.59694216
## 4 0.08583565
## 5 9.92507284
## 6 0.19040151
## 7 0.19543238
## 8 0.01810847
## 9 0.23251274
## 10 1.98959803
## 11 18.87084139
## 12 8.52439892
## 13 1.94210126
## 14 0.52653648
## 15 1.62343088
## 16 1.25884393
## 17 0.11653864
## 18 10.36611423
## 19 0.07535332
# Sumar todos los porcentajes en la columna 'Porcentaje'
porcentaje_total <- sum(resumen_gasto$Porcentaje, na.rm = TRUE)
# Imprimir el total de los porcentajes
print(porcentaje_total)
## [1] 100