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)
  1. Importar base de datos y obtener etiquetas
# 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