Diego Durán Martínez A00835110

#install.packages(c("haven", "dplyr", "kableExtra", "survey"))  # Solo si no están instaladas
library(haven)  # Para leer archivos SPSS
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(kableExtra)  # Para crear tablas visuales
#library(survey)  # Para exportar resultados a Excel

ruta <- normalizePath("/Users/diegoduran/Desktop/base")
archivos <- list.files(path = ruta, pattern = "\\.sav$", full.names = TRUE)

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

# Opcional: Asignar nombres a cada dataset en la lista según el nombre del archivo
names(lista_datos) <- tools::file_path_sans_ext(basename(archivos))
# Extraer cada elemento de la lista en un objeto individual en el entorno global
list2env(lista_datos, envir = .GlobalEnv)
## <environment: R_GlobalEnv>
#install.packages("writexl")  # Solo la primera vez
#install.packages("kableExtra")
#install.packages("survey")
library(writexl)  # Cargar la librería
## Warning: package 'writexl' was built under R version 4.4.1
library(haven)
library(dplyr)
library(tidyr)
library(kableExtra)
## 
## Attaching package: 'kableExtra'
## The following object is masked from 'package:dplyr':
## 
##     group_rows
library(survey)
## Loading required package: grid
## Loading required package: Matrix
## 
## Attaching package: 'Matrix'
## The following objects are masked from 'package:tidyr':
## 
##     expand, pack, unpack
## Loading required package: survival
## 
## Attaching package: 'survey'
## The following object is masked from 'package:graphics':
## 
##     dotchart
# Filtrar solo las bases que comienzan con "SEC"
sec_bases <- lista_datos[grep("^SEC", names(lista_datos))]

# Crear una lista para almacenar los conteos por base de datos
conteo_gasto <- lapply(names(sec_bases), function(nombre) {
  df <- sec_bases[[nombre]]
  
  # Obtener nombres de columnas y etiquetas
  nombres_columnas <- names(df)
  etiquetas_columnas <- sapply(df, function(var) attr(var, "label"))
  
  # Contar cuántos nombres de columnas contienen "gasto"
  count_nombres <- sum(grepl("gasto", nombres_columnas, ignore.case = TRUE))
  
  # Contar cuántas etiquetas contienen "gasto"
  count_etiquetas <- sum(grepl("gasto", etiquetas_columnas, ignore.case = TRUE), na.rm = TRUE)
  
  # Crear un dataframe con los resultados
  data.frame(Archivo = nombre, Columnas_Gasto = count_nombres, Etiquetas_Gasto = count_etiquetas)
})

# Unir los resultados en una sola tabla
resultado_conteo <- do.call(rbind, conteo_gasto)

# Mostrar la tabla ordenada de mayor a menor aparición de "gasto"
resultado_conteo <- resultado_conteo[order(-resultado_conteo$Columnas_Gasto, -resultado_conteo$Etiquetas_Gasto), ]
print(resultado_conteo)
##    Archivo Columnas_Gasto Etiquetas_Gasto
## 2    SEC00              1              10
## 8    SEC04              1               4
## 7    SEC03              0              19
## 10   SEC06              0              16
## 11   SEC07              0              12
## 5    SEC02              0               5
## 12  SEC08A              0               2
## 13  SEC08B              0               1
## 14  SEC08C              0               1
## 15  SEC08D              0               1
## 1     SEC0              0               0
## 3    SEC01              0               0
## 4   SEC01A              0               0
## 6   SEC02A              0               0
## 9    SEC05              0               0

*analizar SEC03

procesar_datos <- function(data) {
  column_labels <- sapply(data, function(col) attr(col, "label"))
  
  labels_vector <- sapply(column_labels, function(x) {
    if (is.null(x)) {
      return(NA)  # Si no hay etiqueta, asigna NA
    } else {
      return(x)   # Devuelve la etiqueta
    }
  })
  
   # Crear resumen de las variables con "gasto"
  summary_table <- data %>%
    summarise(across(everything(), ~ sum(!is.na(.)))) %>%
    pivot_longer(cols = everything(), names_to = "Variable", values_to = "Non_Null_Count") %>%
    mutate(Description = labels_vector) %>%
    filter(grepl("gasto", Description, ignore.case = TRUE)) %>%
    select(Variable, Description, Non_Null_Count)

  return(summary_table)
}

# Aplicar la función a cada dataset en la lista
resultados <- lapply(lista_datos, procesar_datos)
# Convertir todas las columnas 'Description' a tipo character
resultados <- lapply(resultados, function(df) {
  df %>% mutate(Description = as.character(Description))
})

# Unir todas las tablas en una sola
tabla_final <- bind_rows(resultados)
kable(tabla_final, format = "html") %>%
  kable_styling(full_width = FALSE)
Variable Description Non_Null_Count
GASTOHOG Gastos del Hogar 21710
GHALI Gasto del Hogar en Alimentos 21710
GHASE Gasto del Hogar en Artículos y Servicios 21710
GHUL6 Gasto del Hogar en Ultimos 6 Meses 21710
GHU12 Gasto del Hogar en Ultimos 12 Meses 21710
GMED Gasto del Hogar en Educación 21710
GMVI Gasto del Hogar en Vivienda 21710
GMEM Gasto del Hogar en Empleo 21710
GMSA Gasto del Hogar en Salud 21710
GTMH Gasto del Hogar en Sección 8 21710
R2231 Matricula no gasto 25155
R223A1 Matricula no gasto 25156
R223A2 Monto Gasto 16200
R223B1 No Gasto 25156
R223B2 Monto Gasto 5350
R33101B Gasto de agua en dólares 14754
R33102B Gasto de electricidad en dólares 19018
R33103B Gasto de kerosen en dólares 661
R33104B Gasto de gas propano en dólares 10202
R33105B Gasto de candela en dólares 786
R33106B Gasto de leña en dólares 546
R33107B Gasto de carga de batería en dólares 87
R33109B Gasto de telefono fijo en dólares 3696
R33110B Gasto de celular en dólares 18142
R33111B Gasto de cable/cable del vecino en dólares 4805
R33112B Gasto de internet en dólares 777
R33113B Gasto de cibercafe en dólares 2054
R33114B Gasto de impuestos municipales en dólares 2131
R33115B Gasto de pago de vigilancia en dólares 406
R33116B Gasto de recolección de basura en dólares 482
R33117A Otros tipo de gasto 21710
R33117B Otros Ultimo gasto ? 403
R33101B1 Gasto de agua envasada en dólares 1946
R33101B2 Gasto de agua envasada en dólares 1569
R44901 Si / No Tuvo gasto 70326
R44902 Si / No Tuvo gasto 70327
R44903 Si / No Tuvo gasto 70327
R44904 Si / No Tuvo gasto 70327
R605 ¿CUÁNTO FUE EL GASTO EN CONSULTA DE (…)? 6019
R605A Gasto del hogar 937
R606 ¿CUÁNTO FUE EL GASTO EN ANÁLISIS DE LABORATORIO DE (…)? 6019
R606A Gasto del hogar 577
R607 ¿CUÁNTO FUE EL GASTO DE (…) EN RAYOS X? 6019
R607A Gasto del hogar Rayos X 55
R608 ¿CUÁNTO FUE EL GASTO DE (…) EN OTROS EXÁMENES? 6019
R608A Gasto del hogar 28
R612 ¿CUÁNTO FUE EL GASTO EN HOSPITALIZACIÓN DE (…)? 281
R612A Gasto del Hogar 18
R613 ¿CUÁNTO FUE EL GASTO EN MEDICAMENTOS DE (…)? 281
R613A Gasto del hogar 9
R614 Examenes no gasto 281
R614A Examenes laboratorio rayos “x” gasto del Hogar 6
R615 ¿CUÁNTO FUE EL GASTO DE (…) EN MEDICINAS? 10367
R615A Medicinas monto gasto del hogar 4781
R70506A Gastos médicos consulta permanente 4840
R70506B Gastos médicos consulta permanente 4747
R70507A Gastos médicos internaciòn 4840
R70507B Gastos médicos internaciòn 4747
R70508A Otros gastos médicos permanente (exámenes, medicinas, etc) 4839
R70508B Otros gastos médicos permanente (exámenes, medicinas, etc) 4746
R70509A Gastos médicos consulta eventual 4839
R70509B Gastos médicos consulta eventual 4747
R70510A Otros gastos médicos eventuales (exámenes, medicinas, etc) 4840
R70510B Otros gastos médicos eventuales (exámenes, medicinas, etc) 4747
R70511A Gastos en educación 4840
R70511B Gastos en educación 4747
R804 Frecuencia ¿Cuántas veces realiza este gasto o lo adquiere a la SEMANA? 779382
R806 ¿Cuál fue el gasto total de los alimetos que compró o adquirió? (Especificar el valor en dólares) 779382
R811B1 ¿Cuál fue el valor del gasto? 70144
R811C1 ¿Cuál fue el valor del gasto? 28357
R811D1 ¿Cuál fue el valor del gasto? 4664
# Cargar la librería necesaria
library(haven)
library(dplyr)
library(tidyr)

# Leer la base de datos SEC03 desde lista_datos
data_SEC03 <- lista_datos[["SEC03"]]

# Obtener las etiquetas de las columnas
column_labels_SEC03 <- sapply(data_SEC03, function(col) attr(col, "label"))

# Obtener las etiquetas de las columnas (Value) de la lista column_labels
labels_vector_SEC03 <- sapply(column_labels_SEC03, function(x) {
  if (is.null(x)) {
    return(NA)  # Si no hay etiqueta, asigna NA
  } else {
    return(x)   # Devuelve la etiqueta
  }
})

# Convertir a tabla con nombres de columnas, etiquetas y conteo de datos no nulos
summary_table_SEC03 <- data_SEC03 %>%
  summarise(across(everything(), ~ sum(!is.na(.)))) %>%
  pivot_longer(cols = everything(), names_to = "Variable", values_to = "Non_Null_Count") %>%
  mutate(Description = labels_vector_SEC03) %>%
  filter(grepl("gasto", Description, ignore.case = TRUE)) %>%
  select(Variable, Description, Non_Null_Count)

# Mostrar la tabla final
print(summary_table_SEC03)
## # A tibble: 19 × 3
##    Variable Description                                Non_Null_Count
##    <chr>    <chr>                                               <int>
##  1 R33101B  Gasto de agua en dólares                            14754
##  2 R33102B  Gasto de electricidad en dólares                    19018
##  3 R33103B  Gasto de kerosen en dólares                           661
##  4 R33104B  Gasto de gas propano en dólares                     10202
##  5 R33105B  Gasto de candela en dólares                           786
##  6 R33106B  Gasto de leña en dólares                              546
##  7 R33107B  Gasto de carga de batería en dólares                   87
##  8 R33109B  Gasto de telefono fijo en dólares                    3696
##  9 R33110B  Gasto de celular en dólares                         18142
## 10 R33111B  Gasto de cable/cable del vecino en dólares           4805
## 11 R33112B  Gasto de internet en dólares                          777
## 12 R33113B  Gasto de cibercafe en dólares                        2054
## 13 R33114B  Gasto de impuestos municipales en dólares            2131
## 14 R33115B  Gasto de pago de vigilancia en dólares                406
## 15 R33116B  Gasto de recolección de basura en dólares             482
## 16 R33117A  Otros tipo de gasto                                 21710
## 17 R33117B  Otros Ultimo gasto ?                                  403
## 18 R33101B1 Gasto de agua envasada en dólares                    1946
## 19 R33101B2 Gasto de agua envasada en dólares                    1569
# Exportar la tabla a un archivo Excel (opcional)
library(writexl)
write_xlsx(summary_table_SEC03, "Resumen_Gasto_SEC03.xlsx")
# Cargar librerías necesarias
library(dplyr)

# Leer la base de datos SEC03
data_SEC03 <- lista_datos[["SEC03"]]

# Seleccionar las variables específicas de gasto
variables_gasto <- c("R33101B", "R33102B", "R33103B", "R33104B", "R33105B", "R33106B", 
                     "R33107B", "R33109B", "R33110B", "R33111B", "R33112B", "R33113B", 
                     "R33114B", "R33115B", "R33116B", "R33117A", "R33117B", 
                     "R33101B1", "R33101B2")

# Calcular el gasto total del hogar sumando las variables seleccionadas
data_SEC03 <- data_SEC03 %>%
  mutate(
    gasto_total = rowSums(select(., all_of(variables_gasto)), na.rm = TRUE)  # Sumar las variables específicas de gasto
  )


# Ver el resumen de las nuevas variables
summary(data_SEC03$gasto_total)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    1.50   17.00   29.25   42.91   52.90 1049.00
summary(data_SEC03$gasto_per_capita)
## Warning: Unknown or uninitialised column: `gasto_per_capita`.
## Length  Class   Mode 
##      0   NULL   NULL
summary(data_SEC03$sumatoria_gastos_hogar)
## Warning: Unknown or uninitialised column: `sumatoria_gastos_hogar`.
## Length  Class   Mode 
##      0   NULL   NULL
# Mostrar las primeras filas para verificar
head(data_SEC03)
## # A tibble: 6 × 174
##   EDICION  LOTE  TIPO FOLIO   VIV R301       R301B R301C  R301OTR R302    R302B 
##     <dbl> <dbl> <dbl> <dbl> <dbl> <dbl+lbl>  <dbl> <dbl+>   <dbl> <dbl+l> <dbl+>
## 1    2012     1     0     1     0 1 [Casa p…    NA 1 [Si]      NA 4 [¿Lá… 1 [Si]
## 2    2012     1     0     4     0 1 [Casa p…    NA 1 [Si]      NA 4 [¿Lá… 1 [Si]
## 3    2012     1     0     2     0 1 [Casa p…    NA 1 [Si]      NA 4 [¿Lá… 1 [Si]
## 4    2012     1     0     5     0 1 [Casa p…    NA 1 [Si]      NA 4 [¿Lá… 1 [Si]
## 5    2012     1     0     3     0 1 [Casa p…    NA 1 [Si]      NA 4 [¿Lá… 1 [Si]
## 6    2012     1     0     6     0 1 [Casa p…    NA 1 [Si]      NA 4 [¿Lá… 1 [Si]
## # ℹ 163 more variables: R302OTR <dbl>, R303 <dbl+lbl>, R303B <dbl+lbl>,
## #   R303OTR <dbl>, R304 <dbl+lbl>, R304OTR <dbl>, R305 <dbl>, R306 <dbl>,
## #   R307 <dbl>, R308 <dbl+lbl>, R308OTR <dbl>, R308B <dbl>, R308C <dbl>,
## #   R309 <dbl+lbl>, R310 <dbl>, R310A <dbl>, R311 <dbl+lbl>, R311OTR <dbl>,
## #   R311H <dbl>, R311M <dbl>, R312 <dbl+lbl>, R312H <dbl>, R313 <dbl+lbl>,
## #   R313OTR <dbl>, R314 <dbl>, R314H <dbl>, R314M <dbl>, R3141 <dbl>,
## #   R3142 <dbl>, R315 <dbl+lbl>, R316 <dbl+lbl>, R316OTR <dbl>, …
# Asegúrate de tener la librería dplyr cargada
library(dplyr)

# Variables relacionadas con el gasto
variables_gasto <- c("R33101B", "R33102B", "R33103B", "R33104B", "R33105B", "R33106B", 
                     "R33107B", "R33109B", "R33110B", "R33111B", "R33112B", "R33113B", 
                     "R33114B", "R33115B", "R33116B", "R33117A", "R33117B", 
                     "R33101B1", "R33101B2")

# Calcular el porcentaje de aporte de cada rubro de gasto respecto al gasto total del hogar
data_SEC03 <- data_SEC03 %>%
  mutate(across(all_of(variables_gasto), ~ . / gasto_total * 100, .names = "porcentaje_{.col}"))

# Verifica que el cálculo se haya realizado correctamente
head(data_SEC03)
## # A tibble: 6 × 193
##   EDICION  LOTE  TIPO FOLIO   VIV R301       R301B R301C  R301OTR R302    R302B 
##     <dbl> <dbl> <dbl> <dbl> <dbl> <dbl+lbl>  <dbl> <dbl+>   <dbl> <dbl+l> <dbl+>
## 1    2012     1     0     1     0 1 [Casa p…    NA 1 [Si]      NA 4 [¿Lá… 1 [Si]
## 2    2012     1     0     4     0 1 [Casa p…    NA 1 [Si]      NA 4 [¿Lá… 1 [Si]
## 3    2012     1     0     2     0 1 [Casa p…    NA 1 [Si]      NA 4 [¿Lá… 1 [Si]
## 4    2012     1     0     5     0 1 [Casa p…    NA 1 [Si]      NA 4 [¿Lá… 1 [Si]
## 5    2012     1     0     3     0 1 [Casa p…    NA 1 [Si]      NA 4 [¿Lá… 1 [Si]
## 6    2012     1     0     6     0 1 [Casa p…    NA 1 [Si]      NA 4 [¿Lá… 1 [Si]
## # ℹ 182 more variables: R302OTR <dbl>, R303 <dbl+lbl>, R303B <dbl+lbl>,
## #   R303OTR <dbl>, R304 <dbl+lbl>, R304OTR <dbl>, R305 <dbl>, R306 <dbl>,
## #   R307 <dbl>, R308 <dbl+lbl>, R308OTR <dbl>, R308B <dbl>, R308C <dbl>,
## #   R309 <dbl+lbl>, R310 <dbl>, R310A <dbl>, R311 <dbl+lbl>, R311OTR <dbl>,
## #   R311H <dbl>, R311M <dbl>, R312 <dbl+lbl>, R312H <dbl>, R313 <dbl+lbl>,
## #   R313OTR <dbl>, R314 <dbl>, R314H <dbl>, R314M <dbl>, R3141 <dbl>,
## #   R3142 <dbl>, R315 <dbl+lbl>, R316 <dbl+lbl>, R316OTR <dbl>, …
# Crear un nuevo dataframe con los datos organizados por rubro de gasto
rubros_gasto <- data_SEC03 %>%
  select(all_of(variables_gasto), gasto_total, FAC03) %>%
  pivot_longer(cols = all_of(variables_gasto), names_to = "Rubro", values_to = "Valor_Gasto") %>%
  mutate(
    Porcentaje_Aporte = Valor_Gasto / gasto_total * 100,
    Gasto_Ponderado = Valor_Gasto * FAC03
  )

# Verifica cómo quedó la transformación
head(rubros_gasto)
## # A tibble: 6 × 6
##   gasto_total FAC03 Rubro   Valor_Gasto Porcentaje_Aporte Gasto_Ponderado
##         <dbl> <dbl> <chr>   <dbl+lbl>               <dbl>           <dbl>
## 1        21.1    75 R33101B  2.29                    10.9            172.
## 2        21.1    75 R33102B  5.06                    24.0            379.
## 3        21.1    75 R33103B NA                       NA               NA 
## 4        21.1    75 R33104B  6.75                    32.0            506.
## 5        21.1    75 R33105B NA                       NA               NA 
## 6        21.1    75 R33106B NA                       NA               NA
# Sumar los gastos ponderados para obtener un total general
total_gasto_ponderado <- sum(rubros_gasto$Gasto_Ponderado, na.rm = TRUE)

# Verifica el total del gasto ponderado
total_gasto_ponderado
## [1] 84052493
# Calcular el porcentaje que aporta cada rubro respecto al total ponderado
rubros_gasto <- rubros_gasto %>%
  mutate(Porcentaje_Ponderado = Gasto_Ponderado / total_gasto_ponderado * 100)

# Verifica cómo quedaron los porcentajes ponderados
head(rubros_gasto)
## # A tibble: 6 × 7
##   gasto_total FAC03 Rubro   Valor_Gasto Porcentaje_Aporte Gasto_Ponderado
##         <dbl> <dbl> <chr>   <dbl+lbl>               <dbl>           <dbl>
## 1        21.1    75 R33101B  2.29                    10.9            172.
## 2        21.1    75 R33102B  5.06                    24.0            379.
## 3        21.1    75 R33103B NA                       NA               NA 
## 4        21.1    75 R33104B  6.75                    32.0            506.
## 5        21.1    75 R33105B NA                       NA               NA 
## 6        21.1    75 R33106B NA                       NA               NA 
## # ℹ 1 more variable: Porcentaje_Ponderado <dbl>
# Añadir las etiquetas correspondientes a cada rubro de gasto
#rubros_gasto <- rubros_gasto %>%
 # left_join(data.frame(
  #  Rubro = variables_gasto,
   # Etiqueta = column_labels_2023[match(variables_gasto, names(data_SEC03))],
  #  stringsAsFactors = FALSE
#  ), by = "Rubro")

# Verifica la tabla final con las etiquetas
#head(rubros_gasto)

*ya casi acababa:(