---
title: "Tarea 4: Regresión y regularización"
subtitle: "IA para Científicos Sociales - UCU"
author: "Danilo Freire"
date: "2026-04-15"
format:
  html:
    toc: true
    toc-depth: 2
    number-sections: true
    code-fold: false
lang: es
engine: knitr
---

## Instrucciones

Esta tarea usa el mismo dataset del Laboratorio 4 (`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:**

1. Descarguen este archivo `.qmd` y el dataset `latinobarometro_sim.csv` de la [página del curso](https://danilofreire.github.io/introduccion-ia-ucu/laboratorios.html), o clonen el repositorio completo con `git clone https://github.com/danilofreire/introduccion-ia-ucu.git`
2. Necesitan [Quarto](https://quarto.org/docs/get-started/) 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/>
3. Abran este archivo `.qmd` en RStudio y ejecuten los bloques de código con Ctrl+Enter (o Cmd+Enter en Mac)
4. Cuando terminen, pueden renderizar el documento completo con el botón "Render" en RStudio

### Configuración

```{r setup, message=FALSE, warning=FALSE}
library(tidymodels)
library(tidyverse)
library(glmnet)

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"))
  )

set.seed(2026)
```

## Exploración

### Pregunta 1: Resumen del dataset

Calculen la media y desviación estándar de `satisfaccion_vida` por país. Ordenen los resultados de mayor a menor media. Cuál país tiene la mayor satisfacción promedio? Cuál tiene la menor?

```{r p1}
# Escriban su codigo aqui

```

**Respuesta:**

### Pregunta 2: Correlaciones con la variable objetivo

Calculen la correlación entre `satisfaccion_vida` y todas las variables numéricas del dataset (`edad`, `educacion_anios`, `ingreso_hogar`, `confianza_gobierno`, `confianza_justicia`, `satisfaccion_democracia`, `percepcion_economia`, `interes_politica`). Cuáles dos variables tienen la mayor correlación con la satisfacción? Son positivas o negativas?

```{r p2}
# Escriban su codigo aqui

```

**Respuesta:**

### Pregunta 3: Distribución por zona

Creen un boxplot que muestre la distribución de `satisfaccion_vida` separada por `zona` (urbana/rural). Agreguen `labs()` con titulo y etiquetas claras. Hay diferencia entre zonas?

```{r p3}
# Escriban su codigo aqui

```

**Respuesta:**

## Modelo baseline

### Pregunta 4: División de datos y receta

Dividan los datos en 75% entrenamiento y 25% prueba con `set.seed(2026)`. Creen una receta que: (a) excluya `voto` y `pais`, (b) convierta las variables categóricas en dummies, (c) normalice los predictores numéricos, y (d) elimine predictores con varianza cero. Cuántos predictores tiene la receta preparada?

```{r p4}
# Escriban su codigo aqui

```

**Respuesta:**

### Pregunta 5: Modelo OLS

Ajusten un modelo de regresión lineal (OLS) con `linear_reg()` usando la receta de la pregunta 4. Extraigan los coeficientes con `tidy()` y ordénenlos por valor absoluto. Cuál es el predictor más importante? Cuál es el menos importante?

```{r p5}
# Escriban su codigo aqui

```

**Respuesta:**

### Pregunta 6: Evaluar OLS

Generen predicciones del modelo OLS en el conjunto de prueba y calculen RMSE, R² y MAE con `metrics()`. Qué porcentaje de la variación en satisfacción explica el modelo (R²)?

```{r p6}
# Escriban su codigo aqui

```

**Respuesta:**

## LASSO

### Pregunta 7: Tuning de LASSO

Definan un modelo LASSO (`mixture = 1`) con `penalty = tune()`. Creen una grilla de 30 valores de lambda entre 10^-4 y 10^0. Usen validación cruzada con 10 folds para encontrar el lambda óptimo. Cuál es el mejor lambda según RMSE?

```{r p7}
# Escriban su codigo aqui

```

**Respuesta:**

### Pregunta 8: Lambda mínimo vs. 1SE

Comparen el lambda que minimiza el RMSE (`select_best()`) con el lambda 1SE (`select_by_one_std_err()`). Cuál es más grande? Cuántas veces más grande? Qué implica usar el lambda 1SE para la complejidad del modelo?

```{r p8}
# Escriban su codigo aqui

```

**Respuesta:**

### Pregunta 9: Variables eliminadas por LASSO

Ajusten el modelo LASSO final con el lambda mínimo. Cuántas variables elimina LASSO (coeficiente = 0)? Cuáles son? Por qué creen que LASSO las considera poco útiles?

```{r p9}
# Escriban su codigo aqui

```

**Respuesta:**

## Ridge y Elastic Net

### Pregunta 10: Comparar coeficientes Ridge vs. LASSO

Ajusten un modelo Ridge (`mixture = 0`) con tuning de lambda usando la misma grilla y los mismos folds. Comparen los coeficientes de Ridge con los de LASSO. Cuál de los dos tiene coeficientes más grandes en promedio? Por qué?

```{r p10}
# Escriban su codigo aqui

```

**Respuesta:**

### Pregunta 11: Elastic Net con dos hiperparámetros

Ajusten un Elastic Net con tuning de `penalty` y `mixture`. Usen una grilla de 15 lambdas y 5 valores de mixture. Cuál es la mejor combinación? El mixture óptimo se acerca más a LASSO (1) o a Ridge (0)?

```{r p11}
# Escriban su codigo aqui

```

**Respuesta:**

## Comparación

### Pregunta 12: Tabla comparativa

Generen predicciones en el conjunto de prueba para OLS, LASSO, Ridge, Elastic Net y Random Forest (con `trees = 500`, `mtry = tune()`, `min_n = tune()`). Combinen las métricas en una tabla y ordénenla por RMSE. Cuál modelo tiene el mejor RMSE? Cuál tiene el mejor R²?

```{r p12}
# Escriban su codigo aqui

```

**Respuesta:**

### Pregunta 13: Reflexión

Basandose en los resultados de esta tarea, respondan:

1. En este dataset, la regularización mejora mucho respecto a OLS? Por qué sí o por qué no?
2. En qué situaciones sería más útil LASSO que Ridge? Y viceversa?
3. Si tuvieran que presentar resultados a un tomador de decisiones que no sabe estadística, cuál modelo elegirían y por qué?

**Respuesta:**
