library(tidymodels)
library(tidyverse)
library(ranger)
library(vip)
library(pdp)
library(xgboost)
set.seed(2026)
datos <- read_csv("datos/latinobarometro_sim.csv", show_col_types = FALSE)
datos <- datos |>
mutate(
pais = factor(pais),
zona = factor(zona),
genero = factor(genero),
uso_internet = factor(uso_internet, levels = c("nunca", "semanal", "diario")),
voto = factor(voto, levels = c("si", "no"))
)Tarea 3: Clasificación avanzada con tidymodels
IA para Científicos Sociales - UCU
1 Instrucciones
Esta tarea usa el dataset del Laboratorio 3 (latinobarometro_sim.csv). Respondan cada pregunta escribiendo código R en los bloques indicados. Cuando se pida una respuesta escrita, usen texto normal debajo del bloque de código.
Para trabajar en esta tarea:
- Descarguen este archivo
.qmdy el datasetlatinobarometro_sim.csvde la página del curso, o clonen el repositorio completo congit clone https://github.com/danilofreire/introduccion-ia-ucu.git - Necesitan Quarto instalado junto con RStudio. Las versiones recientes de RStudio (>= 2022.07) ya incluyen Quarto. Si no lo tienen, instálenlo desde https://quarto.org/docs/get-started/
- Abran este archivo
.qmden RStudio y ejecuten los bloques de código con Ctrl+Enter (o Cmd+Enter en Mac) - Cuando terminen, pueden renderizar el documento completo con el botón “Render” en RStudio
1.1 Configuración
2 Exploración
2.1 Pregunta 1: Participación electoral por grupos
Calculen la proporción de votantes (voto == "si") por zona (urbana/rural) y por género. Muestren los resultados en una tabla. ¿Hay diferencias entre los grupos?
# Escriban su código aquíRespuesta:
2.2 Pregunta 2: Correlaciones entre predictores
Calculen la matriz de correlaciones entre las variables numéricas: edad, educacion_anios, ingreso_hogar, confianza_gobierno, confianza_justicia, satisfaccion_democracia, percepcion_economia, interes_politica y satisfaccion_vida. ¿Cuáles dos variables tienen la mayor correlación? ¿Tiene sentido teórico?
# Escriban su código aquíRespuesta:
2.3 Pregunta 3: Distribución de edad por voto
Creen un boxplot que muestre la distribución de edad separada por voto. Agreguen labs() con título y etiquetas claras. ¿Los votantes tienden a ser mayores o menores que los no votantes?
# Escriban su código aquíRespuesta:
3 Modelos base
3.1 Pregunta 4: Modelo reducido
Dividan los datos en 75% entrenamiento y 25% prueba con set.seed(2026) y estratificación por voto. Luego ajusten una regresión logística usando solo tres predictores: edad, educacion_anios e interes_politica. Calculen la accuracy y el AUC sobre el conjunto de prueba. ¿Cómo se compara con el modelo completo del laboratorio?
Pista: usen la misma estructura de recipe() + workflow() del laboratorio, pero con menos variables en la fórmula.
# Escriban su código aquíRespuesta:
3.2 Pregunta 5: Coeficientes e interpretación
Usando el modelo logístico completo (con todos los predictores del laboratorio), extraigan los coeficientes con tidy() y calculen los odds ratios (exp(estimate)). ¿Cuál variable tiene el efecto más fuerte sobre la probabilidad de votar? ¿Cuál tiene un efecto negativo?
# Escriban su código aquíRespuesta:
4 Random Forest y tuning
4.1 Pregunta 6: Efecto del número de árboles
Entrenen tres modelos de Random Forest con 100, 500 y 1000 árboles respectivamente (usando mtry = 4 y min_n = 10 fijos, sin tuning). Calculen el AUC de cada modelo sobre el conjunto de prueba. ¿Cuánto mejora el AUC al aumentar el número de árboles? ¿Vale la pena usar 1000?
# Escriban su código aquíRespuesta:
4.2 Pregunta 7: Grilla aleatoria vs. regular
En el laboratorio usamos grid_regular() para crear la grilla de búsqueda. Ahora usen grid_random() con size = 20 para el mismo modelo de Random Forest con mtry y min_n a ajustar. Comparen el mejor AUC obtenido con cada tipo de grilla.
Pista: grid_random(mtry(range = c(2, 8)), min_n(range = c(5, 30)), size = 20).
# Escriban su código aquíRespuesta:
4.3 Pregunta 8: Más folds de validación cruzada
Repitan el tuning de Random Forest del laboratorio pero con 10 folds en vez de 5. ¿El mejor modelo tiene los mismos hiperparámetros? ¿El error estándar (std_err) de las métricas es menor con más folds?
# Escriban su código aquíRespuesta:
5 Interpretación
5.1 Pregunta 9: PDPs adicionales
Usando el modelo de Random Forest ajustado en el laboratorio, creen Partial Dependence Plots para confianza_gobierno y educacion_anios. Describan la relación que observan: ¿es lineal, tiene mesetas, tiene curvas?
# Escriban su código aquíRespuesta:
5.2 Pregunta 10: VIP vs. coeficientes logísticos
Comparen el ranking de importancia del VIP (Random Forest, Gini) con el ranking de los coeficientes de la regresión logística (ordenados por valor absoluto del estadístico z). ¿Coinciden los dos rankings? ¿Por qué podrían diferir?
Pista: en tidy(), la columna statistic contiene el estadístico z.
# Escriban su código aquíRespuesta:
6 Comparación de modelos
6.1 Pregunta 11: Agregar un árbol de decisión
Entrenen un modelo decision_tree() con cost_complexity = 0.01, tree_depth = 10 y min_n = 10. Calculen sus métricas (accuracy, AUC) sobre el conjunto de prueba y compárenlas con la regresión logística y el Random Forest. ¿Cuánto se pierde en rendimiento respecto al Random Forest?
# Escriban su código aquíRespuesta:
6.2 Pregunta 12: Tabla comparativa completa
Creen una tabla que compare cuatro modelos (regresión logística, Random Forest, XGBoost y árbol de decisión) con las métricas: accuracy, AUC, precision, recall y F1-score. Usen bind_rows() para combinar y pivot_wider() para formatear.
Pista: para cada modelo, generen predicciones con predict() y predict(type = "prob"), luego calculen las métricas con metrics() y f_meas().
# Escriban su código aquíRespuesta:
7 Reflexión
7.1 Pregunta 13: Recomendación para un tomador de decisiones
Imaginen que trabajan para un organismo electoral latinoamericano que quiere entender qué factores influyen en la participación electoral para diseñar campañas de movilización. ¿Qué modelo recomendarían de los cuatro que entrenaron? Consideren al menos tres criterios: rendimiento predictivo, interpretabilidad y utilidad para la toma de decisiones. Justifiquen su respuesta.
Respuesta: