#Título: Análisis de la encuesta Así Vamos ##Subtitulo: Limpieza de la base de datos

library(readr)
library(dplyr)
## 
## 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
#file.choose("EncuestaAsiVamos2024.csv")
eav2024 <- read_csv("/Users/ecelestino/Desktop/TEC/Carrera/Métodos cuantitativos/CienciaDatosProyecto/EncuestaAsiVamos2024.csv",show_col_types = FALSE )
## Warning: One or more parsing issues, call `problems()` on your data frame for details,
## e.g.:
##   dat <- vroom(...)
##   problems(dat)

###Problemática: La insatisfacción ciudadana hacia los alcaldes, derivada de su percepción de mal desempeño en la gestión de servicios públicos generando desconfianza en las instituciones y limita el desarrollo sostenible de los municipios.

####Preguntas de investigación: ####¿Cómo influye la gestión de los alcaldes en la percepción de los habitantes según la región geográfica y las características individuales y demográficas de cada municipio en Nuevo León?

####Variables: Las siguientes variables fueron elegidas bajo el criterio de análisis de las preguntas de investigación. En concreto, seleccionamos aquellas que reflejan el nivel socioeconómico de la gente, así como las variables de municipios, las de educación y la opinión pública basada en una métrica cualitativa donde los número representan un nivel de valoración superior o inferior. - num_mun: Código numérico del municipio donde se realizó la encuesta.

Link a la tabla de las variables: https://docs.google.com/document/d/14yySCfv8_eT5kEo2HaRPb-0yCbKoXZcJYLV9NERp4iw/edit?usp=sharing

##Selección de las variables

eav2024_selected <- eav2024%>%
  select(sexo_num, num_mun, nom_mun_mv, nom_loc_mv, rangos_edad, cp4_1, cp7_1, cp7_2, cp7_3, cp7_4, cp7_5, cp7_6, cp7_7, cp7_8, cp7_9, cp7_10, cp8_1, cp8_2, cp8_3, cp8_4, cp8_5, cp8_6, cp8_7, cp8_8, cp8_9, cp8_10, cp9_1, cp9_2, cp9_3, cp9_4, cp9_5, cp9_6, cp9_7, cp9_8, cp9_9, cp9_10, p75, p164, p117, p118, p120, p122, p123, p124, p125, p126, p127, p128, p129, p131_1, p132_2, p133_3, p133_4, p133_5, p136, p137, p138, p139, p52_1, p52_2, p52_3, p52_4, p52_5, p156, Factor_CVNL)

head(eav2024_selected)
## # A tibble: 6 × 65
##   sexo_num num_mun nom_mun_mv     nom_loc_mv rangos_edad cp4_1 cp7_1 cp7_2 cp7_3
##      <dbl>   <dbl> <chr>          <chr>      <chr>       <dbl> <dbl> <dbl> <dbl>
## 1        1       9 Cadereyta Jim… Cadereyta… 45-54          50     0     1    NA
## 2        0       9 Cadereyta Jim… Valle del… 35-44          35     0     0     1
## 3        1       9 Cadereyta Jim… Cadereyta… 25-34          32     0     0     1
## 4        0       9 Cadereyta Jim… Cadereyta… 55-64          62     0     0    NA
## 5        0       9 Cadereyta Jim… Cadereyta… 75 o más       80     0    NA    NA
## 6        1      21 General Escob… Ciudad Ge… 45-54          51     0     0     0
## # ℹ 56 more variables: cp7_4 <dbl>, cp7_5 <dbl>, cp7_6 <dbl>, cp7_7 <dbl>,
## #   cp7_8 <dbl>, cp7_9 <dbl>, cp7_10 <dbl>, cp8_1 <dbl>, cp8_2 <dbl>,
## #   cp8_3 <dbl>, cp8_4 <dbl>, cp8_5 <dbl>, cp8_6 <dbl>, cp8_7 <dbl>,
## #   cp8_8 <dbl>, cp8_9 <dbl>, cp8_10 <dbl>, cp9_1 <dbl>, cp9_2 <dbl>,
## #   cp9_3 <dbl>, cp9_4 <dbl>, cp9_5 <dbl>, cp9_6 <dbl>, cp9_7 <dbl>,
## #   cp9_8 <lgl>, cp9_9 <lgl>, cp9_10 <lgl>, p75 <dbl>, p164 <dbl>, p117 <dbl>,
## #   p118 <dbl>, p120 <dbl>, p122 <dbl>, p123 <dbl>, p124 <dbl>, p125 <dbl>, …
View(eav2024_selected)

##Limpieza de la base de datos

#Hoy 22 de abril, se consideró quitar las variables 8888 y 9999 para removerlas definitivamente o hacerlas NA
#Hoy 24 de abril, se terminó de modificar las variables como fcatores y números, en vez de characters. Además, se utilizó un comando que permite ver cuántos NAs hay en cada variable. Además, hemos dejado la variable con más NAs disponible, pues tenemos dudas sobre si mantenerla o no. Por otra parte, se ha hecho un modelo usando lm, así como se ha entrenado y se ha probado. También se ha hecho un modelo de predicción. El uso de DeepSeek fue exclusivo para integrar las variables imputadas, de nueva forma, en un nuevo dataframe que toma en cuenta el eav2024_selected_clean y reemplaza las variables con NAs, menos una, de manera manual.

eav2024_selected_clean <- eav2024_selected %>%
  mutate(
    num_mun = as.character(num_mun),
    rangos_edad = as.factor(rangos_edad),
    
    sexo = case_when(sexo_num == 0 ~ "Hombre",
                     sexo_num == 1 ~ "Mujer"),
    sexo = as.factor(sexo),
    municipio = as.factor(nom_mun_mv),
    edad = as.numeric(cp4_1),
    across(cp7_1:cp7_10, ~ case_when(.x %in% c(8888, 9999) ~ 0, TRUE ~ .x)),
    Estudiantes = rowSums(select(., cp7_1:cp7_10), na.rm = TRUE),
    IngresoSuficiente = as.numeric(p75),
    across(p164, ~ case_when(.x %in% c(9999) ~ NA_real_, TRUE ~ .x)),
    IngresoDomesticoMensual = factor(case_when(
      p164 == 1 ~ "Sin Ingreso (Salario)",
      p164 == 2 ~ "x < 1 SM",
      p164 == 3 ~ "1-2 SM",
      p164 == 4 ~ "2-3 SM",
      p164 == 5 ~ "3-4 SM",
      p164 == 6 ~ "4-5 SM",
      p164 == 7 ~ "5-6 SM",
      p164 == 8 ~ "6-7 SM",
      p164 == 9 ~ "7-8 SM",
      p164 == 10 ~ "8-9 SM",
      p164 == 11 ~ "9-10 SM",
      p164 == 12 ~ "x ≥ 10 SM",
    )),
    across(p123, ~ case_when(.x %in% c(9999) ~ NA_real_, TRUE ~ .x)),
    GoberFavoritismo = factor(case_when(
      p123 == 0 ~ "No", 
      p123 == 1 ~ "Si", 
      p123 == 8888 ~ "No sabe", 
      p123 == 9999 ~ "No contesta")),
     across(p124, ~ case_when(.x %in% c(9999) ~ NA_real_, TRUE ~ .x)),
    AlcaFavoritismo = factor(case_when(
      p124 == 0 ~ "No", 
      p124 == 1 ~ "Si", 
      p124 == 8888 ~ "No sabe", 
      p124 == 9999 ~ "No contesta")),
     across(p125, ~ case_when(.x %in% c(9999) ~ NA_real_, TRUE ~ .x)),
    AlcaEficiencia = factor(case_when(
      p125 == 0 ~ "No", 
      p125 == 1 ~ "Si", 
      p125 == 8888 ~ "No sabe", 
      p125 == 9999 ~ "No contesta")),
     across(p126, ~ case_when(.x %in% c(9999) ~ NA_real_, TRUE ~ .x)),
    GoberEficiencia = factor(case_when(
      p126 == 0 ~ "No", 
      p126 == 1 ~ "Si", 
      p126 == 8888 ~ "No sabe", 
      p126 == 9999 ~ "No contesta")),
     across(p127, ~ case_when(.x %in% c(9999) ~ NA_real_, TRUE ~ .x)),
    PercepCorruptioEstado = factor(case_when(
      p127 == 1 ~ "MuyFrecuente", 
      p127 == 2 ~ "Frecuente", 
      p127 == 3 ~ "PocoFrecuente",
      p127 == 4 ~ "NoOcurre", 
      p127 == 8888 ~ "NoSabe", 
      p127 == 9999 ~ "NoContesta")),
     across(p128, ~ case_when(.x %in% c(9999) ~ NA_real_, TRUE ~ .x)),
    PercepCorruptioMuni = factor(case_when(
      p128 == 1 ~ "MuyFrecuente", 
      p128 == 2 ~ "Frecuente", 
      p128 == 3 ~ "PocoFrecuente",
      p128 == 4 ~ "NoOcurre", 
      p128 == 8888 ~ "NoSabe", 
      p128 == 9999 ~ "NoContesta")),
     across(p128, ~ case_when(.x %in% c(9999) ~ NA_real_, TRUE ~ .x)),
    CorruptioExperi = factor(case_when(
      p129 == 0 ~ "No", 
      p129 == 1 ~ "Si", 
      p129 == 8888 ~ "No sabe", 
      p129 == 9999 ~ "No contesta")),
     across(p131_1, ~ case_when(.x %in% c(9999) ~ NA_real_, TRUE ~ .x)),
    AlcalHonesto = factor(case_when(
      p131_1 == 0 ~ "No", 
      p131_1 == 1 ~ "Si", 
      p131_1 == 8888 ~ "No sabe", 
      p131_1 == 9999 ~ "No contesta")),
     across(p132_2, ~ case_when(.x %in% c(9999) ~ NA_real_, TRUE ~ .x)),
    AlcalCapaz = factor(case_when(
      p132_2 == 0 ~ "No", 
      p132_2 == 1 ~ "Si", 
      p132_2 == 8888 ~ "No sabe", 
      p132_2 == 9999 ~ "No contesta")),
     across(p133_3, ~ case_when(.x %in% c(9999) ~ NA_real_, TRUE ~ .x)),
    AlcalBuenEquipo = factor(case_when(
      p133_3 == 0 ~ "No", 
      p133_3 == 1 ~ "Si", 
      p133_3 == 8888 ~ "No sabe", 
      p133_3 == 9999 ~ "No contesta")),
     across(p133_4, ~ case_when(.x %in% c(9999) ~ NA_real_, TRUE ~ .x)),
    AlcalCumplidor = factor(case_when(
      p133_4 == 0 ~ "No", 
      p133_4 == 1 ~ "Si", 
      p133_4 == 8888 ~ "No sabe", 
      p133_4 == 9999 ~ "No contesta")),
     across(p133_5, ~ case_when(.x %in% c(9999) ~ NA_real_, TRUE ~ .x)),
    AlcalAcuerdos = factor(case_when(
      p133_5 == 0 ~ "No", 
      p133_5 == 1 ~ "Si", 
      p133_5 == 8888 ~ "No sabe", 
      p133_5 == 9999 ~ "No contesta")),
     across(p136, ~ case_when(.x %in% c(8888, 9999) ~ 0, TRUE ~ .x)),
     Altruismo_Alcalde = factor(case_when(
      p136 == 1 ~ "Pensando en el bienestar del municipio", 
      p136 == 2 ~ "Pensando en intereses particulares/personales", 
      p136 == 8888 ~ "No sabe", 
      p136 == 9999 ~ "No contesta")),
     across(p156, ~ case_when(.x %in% c(8888, 9999) ~ NA_real_, TRUE ~ .x)),
    Influencia_Ciudadana = as.numeric(p156),
    
    p137 = case_when(p137 %in% c(8888, 9999) ~ NA_real_, TRUE ~ p137),
    Aprobacion_Alcalde = factor(case_when(
      p137 == 0 ~ "Desaprueba",
      p137 == 1 ~ "Aprueba",
       TRUE ~ "No sabe / No contesta")),
    
    p138 = case_when(p138 %in% c(8888, 9999) ~ 0, TRUE ~ p138),
    Percepcion_Municipio = as.numeric(p138),
    
    across(cp9_1:cp9_10, ~ case_when(.x %in% c(8888, 9999) ~ 0, TRUE ~ .x)),
    Nivel_Maximo_Estudios = rowSums(select(., cp9_1:cp9_10), na.rm = TRUE),
    Nivel_Maximo_Estudios = factor(case_when(
      Nivel_Maximo_Estudios == 1 ~ "Preescolar", 
      Nivel_Maximo_Estudios == 2 ~ "Primaria", 
      Nivel_Maximo_Estudios == 3 ~ "Secundaria",
      Nivel_Maximo_Estudios == 4 ~ "Preparatoria o Bachillerato General", 
      Nivel_Maximo_Estudios == 5 ~ "Bachillerato Tecnológico",
      Nivel_Maximo_Estudios == 6 ~ "Estudios Técnicos o Comerciales con Primaria", 
      Nivel_Maximo_Estudios == 7 ~ "Estudios Técnicos o Comerciales con Secundaria",
      Nivel_Maximo_Estudios == 8 ~ "Estudios Técnicos o Comerciales con Preparatoria", 
      Nivel_Maximo_Estudios == 9 ~ "Normal con Primaria o Secundaria",
      Nivel_Maximo_Estudios == 10 ~ "Normal de Licenciatura", 
      Nivel_Maximo_Estudios == 11 ~ "Licenciatura",
      Nivel_Maximo_Estudios == 12 ~ "Especialidad", 
      Nivel_Maximo_Estudios == 13 ~ "Maestría", 
      Nivel_Maximo_Estudios == 14 ~ "Doctorado",
      TRUE ~ "No especificado")),
    
    p139 = case_when(p139 %in% c(8888, 9999) ~ 0, TRUE ~ p139),
    Evaluacion_Gobierno_Alcalde = as.numeric(p139),
    p52_1 = case_when(p52_1 %in% c(9999) ~ 0, TRUE ~ p52_1),
    Satisfaccion_Alumbrado_Publico = as.numeric(p52_1),
    p52_2 = case_when(p52_2 %in% c(8888, 9999) ~ 0, TRUE ~ p52_2),
    Satisfaccion_Calle_Avenidas = as.numeric(p52_2),
    p52_3 = case_when(p52_3 %in% c(8888, 9999) ~ 0, TRUE ~ p52_3),
    Satisfaccion_Parques_Areas_Verdes = as.numeric(p52_3),
     p52_4 = case_when(p52_4 %in% c(8888, 9999) ~ 0, TRUE ~ p52_4),
    Satisfaccion_Parques_Areas_Verdes = as.numeric(p52_4),
     p52_5 = case_when(p52_5 %in% c(8888, 9999) ~ 0, TRUE ~ p52_5),
    Satisfaccion_Parques_Areas_Verdes = as.numeric(p52_5),
    
    across(cp8_1:cp8_10, ~ case_when(.x %in% c(8888, 9999) ~ 0, TRUE ~ .x)),
    Nivel_Educativo = rowSums(select(., cp8_1:cp8_10), na.rm = TRUE),
    Nivel_Educativo = factor(case_when(
      Nivel_Educativo == 1 ~ "Preescolar", 
      Nivel_Educativo == 2 ~ "Primaria", 
      Nivel_Educativo == 3 ~ "Secundaria",
      Nivel_Educativo == 4 ~ "Preparatoria o Bachillerato General", 
      Nivel_Educativo == 5 ~ "Bachillerato Tecnológico",
      Nivel_Educativo == 6 ~ "Estudios Técnicos o Comerciales con Primaria", 
      Nivel_Educativo == 7 ~ "Estudios Técnicos o Comerciales con Secundaria",
      Nivel_Educativo == 8 ~ "Estudios Técnicos o Comerciales con Preparatoria", 
      Nivel_Educativo == 9 ~ "Normal con Primaria o Secundaria",
      Nivel_Educativo == 10 ~ "Normal de Licenciatura", 
      Nivel_Educativo == 11 ~ "Licenciatura",
      Nivel_Educativo == 12 ~ "Especialidad", 
      Nivel_Educativo == 13 ~ "Maestría", 
      Nivel_Educativo == 14 ~ "Doctorado",
      TRUE ~ "No especificado")),
    
   across(p117, ~ case_when(.x %in% c(9999) ~ NA_real_, TRUE ~ .x)),
      Medio_Informacion = factor(case_when(
        p117 == 1 ~ "Redes sociales",
        p117 == 2 ~ "Periódico",
        p117 == 3 ~ "Televisión",
        p117 == 4 ~ "Radio",
        p117 == 5 ~ "Portal de noticias en internet",
        p117 == 6 ~ "Volanteo o perifoneo",
        p117 == 7 ~ "Conversaciones con conocidos",
        p117 == 8 ~ "Página web institucional",
        p117 == 9 ~ "No se entera",
        p117 == 10 ~ "Otro",
        TRUE ~ NA_character_)),
   across(p118, ~ case_when(.x %in% c(9999) ~ NA_real_, TRUE ~ .x)),
   Red_Social_Informacion = factor(case_when(
        p118 == 1 ~ "Facebook", 
        p118 == 2 ~ "X (antes Twitter)", 
        p118 == 3 ~ "Instagram",
        p118 == 4 ~ "TikTok", 
        p118 == 5 ~ "WhatsApp", 
        p118 == 6 ~ "YouTube",
        p118 == 7 ~ "Telegram", 
        p118 == 8 ~ "Otra", 
        TRUE ~ NA_character_
      )),
   
   across(p120, ~ case_when(.x %in% c(9999) ~ NA_real_, TRUE ~ .x)),
   Voto_Pasadas_Elecciones = factor(case_when(
        p120 == 1 ~ "Sí", 
        p120 == 0 ~ "No", 
        TRUE ~ NA_character_
        )),
   
    across(p122, ~ case_when(.x %in% c(9999) ~ NA_real_, TRUE ~ .x)),
   Razon_Voto_Alcalde = factor(case_when(
         p122 == 1 ~ "Por sus propuestas",
         p122 == 2 ~ "Por su experiencia/ trayectoria",
         p122 == 3 ~ "Me identifico con su partido",
         p122 == 4 ~ "Recibí un beneficio a cambio",
         p122 == 5 ~ "Amenaza de despido laboral",
         p122 == 6 ~ "Amenaza con perder apoyo social",
         p122 == 7 ~ "No quería que ganara otro candidato",
         p122 == 8 ~ "Voto útil",
         p122 == 9 ~ "Por su carisma",
         p122 == 10 ~ "Lo conozco",
         p122 == 11 ~ "Quiero un cambio",
         p122 == 12 ~ "Solo por cumplir",
        TRUE ~ NA_character_
        )),
  ) %>%
  select(-sexo_num, -nom_mun_mv, -cp4_1, -cp7_1:-cp7_10, -cp8_1:-cp8_10, -cp9_1:-cp9_10, -p75, -p164, -p123, -p124, -p125, -p126, -p127, -p128, -p129, -p131_1, -p132_2, -p133_3, -p133_4, -p133_5, -p136, -p137, -p138, -p139, -p156, -p52_1, -p52_2, -p52_3, -p52_4, -p52_5, -cp9_1, -p117, -p118, -p120, -p122)
View(eav2024_selected_clean)

#para deseleccionar

##NA

library(dplyr)
library(tidyr)

na_table <- eav2024_selected_clean %>%
  summarise(across(everything(), ~ sum(is.na(.x)))) %>%      # cuenta NAs
  pivot_longer(everything(),
               names_to  = "variable",
               values_to = "na_total") %>%                  # de ancho a largo
  arrange(desc(na_total))# orden

eav2024_selected_clean[] <- lapply(eav2024_selected_clean, function(x) {
  # Si la columna es factor, conviértela a carácter para evitar niveles fantasma
  if (is.factor(x)) x <- as.character(x)
  x[x %in% c(8888, 9999)] <- NA
  x
})

eav2024_selected_clean <- eav2024_selected_clean %>%
  mutate(across(everything(), ~ replace(.x, .x %in% c(8888, 9999), NA)))

##Imputación

#No es recomendable si es mayor a 40%.
#Imputar: Mediante el comportamiento de otras variables, predecir las faltantes.
library(mice)
## 
## Attaching package: 'mice'
## The following object is masked from 'package:stats':
## 
##     filter
## The following objects are masked from 'package:base':
## 
##     cbind, rbind
Imputacion_EstudiosMaximos1 <- eav2024_selected_clean %>% #Imputacion_EstudiosMaximos1 selecciona las variables requeridas para la imputación
  mutate(nom_loc_mv = as.factor(nom_loc_mv)) %>%
  mutate(sexo = as.factor(sexo)) %>%
  mutate(Nivel_Maximo_Estudios = as.factor(Nivel_Maximo_Estudios)) %>%
  mutate(IngresoDomesticoMensual = as.factor(IngresoDomesticoMensual)) %>%
  mutate(Nivel_Educativo = as.factor(Nivel_Educativo)) %>%
  select(Razon_Voto_Alcalde, nom_loc_mv, edad, sexo, PercepCorruptioMuni, Nivel_Educativo, Nivel_Maximo_Estudios, Razon_Voto_Alcalde, IngresoDomesticoMensual, Altruismo_Alcalde, Influencia_Ciudadana, AlcalCapaz, GoberEficiencia, AlcalHonesto, AlcaEficiencia, AlcalCumplidor, Voto_Pasadas_Elecciones, AlcalBuenEquipo, AlcalAcuerdos, AlcaFavoritismo, Medio_Informacion)

imputacion <- mice(Imputacion_EstudiosMaximos1, method = "pmm", m = 5, seed = 13) #El comando mice hace la imputación
## 
##  iter imp variable
##   1   1  IngresoDomesticoMensual  Influencia_Ciudadana
##   1   2  IngresoDomesticoMensual  Influencia_Ciudadana
##   1   3  IngresoDomesticoMensual  Influencia_Ciudadana
##   1   4  IngresoDomesticoMensual  Influencia_Ciudadana
##   1   5  IngresoDomesticoMensual  Influencia_Ciudadana
##   2   1  IngresoDomesticoMensual  Influencia_Ciudadana
##   2   2  IngresoDomesticoMensual  Influencia_Ciudadana
##   2   3  IngresoDomesticoMensual  Influencia_Ciudadana
##   2   4  IngresoDomesticoMensual  Influencia_Ciudadana
##   2   5  IngresoDomesticoMensual  Influencia_Ciudadana
##   3   1  IngresoDomesticoMensual  Influencia_Ciudadana
##   3   2  IngresoDomesticoMensual  Influencia_Ciudadana
##   3   3  IngresoDomesticoMensual  Influencia_Ciudadana
##   3   4  IngresoDomesticoMensual  Influencia_Ciudadana
##   3   5  IngresoDomesticoMensual  Influencia_Ciudadana
##   4   1  IngresoDomesticoMensual  Influencia_Ciudadana
##   4   2  IngresoDomesticoMensual  Influencia_Ciudadana
##   4   3  IngresoDomesticoMensual  Influencia_Ciudadana
##   4   4  IngresoDomesticoMensual  Influencia_Ciudadana
##   4   5  IngresoDomesticoMensual  Influencia_Ciudadana
##   5   1  IngresoDomesticoMensual  Influencia_Ciudadana
##   5   2  IngresoDomesticoMensual  Influencia_Ciudadana
##   5   3  IngresoDomesticoMensual  Influencia_Ciudadana
##   5   4  IngresoDomesticoMensual  Influencia_Ciudadana
##   5   5  IngresoDomesticoMensual  Influencia_Ciudadana
## Warning: Number of logged events: 38
imputacion$method #imputación$method comprueba que se haya hecho la imputación
##      Razon_Voto_Alcalde              nom_loc_mv                    edad 
##                      ""                      ""                      "" 
##                    sexo     PercepCorruptioMuni         Nivel_Educativo 
##                      ""                      ""                      "" 
##   Nivel_Maximo_Estudios IngresoDomesticoMensual       Altruismo_Alcalde 
##                      ""                   "pmm"                      "" 
##    Influencia_Ciudadana              AlcalCapaz         GoberEficiencia 
##                   "pmm"                      ""                      "" 
##            AlcalHonesto          AlcaEficiencia          AlcalCumplidor 
##                      ""                      ""                      "" 
## Voto_Pasadas_Elecciones         AlcalBuenEquipo           AlcalAcuerdos 
##                      ""                      ""                      "" 
##         AlcaFavoritismo       Medio_Informacion 
##                      ""                      ""
imputacion_final <- complete(imputacion, 1)
View(imputacion_final)

#PostImputación

# Copiar el dataset original para no modificar el original directamente
eav2024_final <- eav2024_selected_clean

# Reemplazar las columnas imputadas en el nuevo dataset
columnas_imputadas <- names(imputacion_final)
eav2024_final[, columnas_imputadas] <- imputacion_final[, columnas_imputadas]

# Asegurar que los factores se mantengan como factores
eav2024_final <- eav2024_final %>%
  mutate(nom_loc_mv = as.factor(nom_loc_mv),
         sexo = as.factor(sexo))

# Asegurar que las columnas imputadas reemplacen a las originales
eav2024_final <- eav2024_selected_clean %>%
  mutate(across(all_of(names(imputacion_final)), ~ imputacion_final[[cur_column()]]))

# Chequear NAs en las columnas imputadas
colSums(is.na(eav2024_final[, columnas_imputadas]))
##      Razon_Voto_Alcalde              nom_loc_mv                    edad 
##                     871                       0                       0 
##                    sexo     PercepCorruptioMuni         Nivel_Educativo 
##                       0                       2                       0 
##   Nivel_Maximo_Estudios IngresoDomesticoMensual       Altruismo_Alcalde 
##                       0                       0                     188 
##    Influencia_Ciudadana              AlcalCapaz         GoberEficiencia 
##                       0                       8                       7 
##            AlcalHonesto          AlcaEficiencia          AlcalCumplidor 
##                       7                       4                       4 
## Voto_Pasadas_Elecciones         AlcalBuenEquipo           AlcalAcuerdos 
##                       4                       3                       3 
##         AlcaFavoritismo       Medio_Informacion 
##                       2                       2
# Comparar una columna antes y después
summary(eav2024_selected_clean$IngresoDomesticoMensual)
##    Length     Class      Mode 
##      4942 character character
summary(eav2024_final$IngresoDomesticoMensual)
##                1-2 SM                2-3 SM                3-4 SM 
##                  2121                  1155                   323 
##                4-5 SM                5-6 SM                6-7 SM 
##                    82                    31                    21 
##                7-8 SM                8-9 SM               9-10 SM 
##                    22                    16                     5 
## Sin Ingreso (Salario)              x < 1 SM             x ≥ 10 SM 
##                   164                   997                     5
View(eav2024_final)

#Primer modelo básico #Regresión Logística

#Para más de 2 niveles, usa lm o simplemente omitir el family binomial.

lm(Influencia_Ciudadana ~ Nivel_Educativo + Percepcion_Municipio, family = gaussian, data = eav2024_final, weights = Factor_CVNL)
## Warning: In lm.wfit(x, y, w, offset = offset, singular.ok = singular.ok, 
##     ...) :
##  extra argument 'family' will be disregarded
## 
## Call:
## lm(formula = Influencia_Ciudadana ~ Nivel_Educativo + Percepcion_Municipio, 
##     data = eav2024_final, weights = Factor_CVNL, family = gaussian)
## 
## Coefficients:
##                                                     (Intercept)  
##                                                        2.653183  
##                                        Nivel_EducativoDoctorado  
##                                                       -0.050027  
##                                     Nivel_EducativoEspecialidad  
##                                                       -0.120948  
## Nivel_EducativoEstudios Técnicos o Comerciales con Preparatoria  
##                                                       -0.009104  
##     Nivel_EducativoEstudios Técnicos o Comerciales con Primaria  
##                                                        0.035816  
##   Nivel_EducativoEstudios Técnicos o Comerciales con Secundaria  
##                                                        0.024491  
##                                     Nivel_EducativoLicenciatura  
##                                                       -0.152154  
##                                         Nivel_EducativoMaestría  
##                                                        0.053817  
##                                  Nivel_EducativoNo especificado  
##                                                       -0.144863  
##                 Nivel_EducativoNormal con Primaria o Secundaria  
##                                                       -0.262170  
##                           Nivel_EducativoNormal de Licenciatura  
##                                                       -0.156902  
##                                       Nivel_EducativoPreescolar  
##                                                        1.568262  
##              Nivel_EducativoPreparatoria o Bachillerato General  
##                                                       -0.033704  
##                                         Nivel_EducativoPrimaria  
##                                                       -0.032029  
##                                       Nivel_EducativoSecundaria  
##                                                        0.064365  
##                                            Percepcion_Municipio  
##                                                       -0.073815
set.seed(13)
n <- nrow(eav2024_final)
aleatorios <- sample(1:n, size = 0.7*n)

#Entrenamiento

entrenamiento <- eav2024_final[aleatorios,]#Cuando se usen corchetes, se usa al lado izquierdo.

#Prueba

prueba <- eav2024_final[-aleatorios,]

#En vez de usar el dataframe original, se usa el de entrenamiento

modelo_entrenamiento <- lm(Influencia_Ciudadana ~ Nivel_Educativo + Percepcion_Municipio, data = entrenamiento ,weights = Factor_CVNL)

#Predicción

predicciones <- predict(modelo_entrenamiento, data=prueba, type = "response")

prediccion_binaria <- ifelse(predicciones>0.5, 1, 0)#Si es de si y no, entonces sustituye ambos números