# Análisis de regresión múltiple y logística
```{r}
#| echo: false
#| message: false
#| warning: false
source("script.R")
```
## Introducción a la regresión lineal múltiple
El capítulo de pruebas de relación introdujo la regresión lineal simple, una
técnica para modelar y predecir una variable de resultado cuantitativa a partir
de un único predictor: "¿se puede predecir la nota de un examen a partir de las
horas de estudio?". Es un punto de partida útil, pero este enfoque bivariante
rara vez captura la complejidad del mundo real. La nota de un examen no depende
solo de las horas de estudio; también influyen la asistencia a clase, la
motivación o los conocimientos previos. El precio de una vivienda no se explica
únicamente por su superficie; también importan el número de habitaciones, la
antigüedad del inmueble y la ubicación.
Para abordar esta realidad multifactorial hace falta una herramienta más
potente: la **regresión lineal múltiple**. Es una técnica de dependencia que
analiza la relación entre una **única variable dependiente cuantitativa** y
**dos o más variables independientes**, cuantitativas o cualitativas codificadas
como variables dummy [@Hair2019].
::: callout-tip
## Equivalencia con SPSS
Tanto la regresión lineal múltiple como la regresión logística tienen
equivalente exacto en SPSS: `Analizar > Regresión > Lineal` y
`Analizar > Regresión > Logística binaria`, respectivamente. Los estadísticos
desarrollados en este capítulo —R², R² ajustado, test F, VIF, coeficientes y sus
pruebas t, devianza, odds ratios— se corresponden directamente con la salida de
esos dos procedimientos.
:::
El objetivo de la regresión múltiple responde a dos preguntas fundamentales:
1. **Predicción**: ¿cómo se puede predecir la variable dependiente (Y) a partir
de un conjunto de variables independientes (X₁, X₂, X₃...)? El foco está en
la precisión global del modelo.
2. **Explicación**: ¿cuál es la importancia relativa de cada variable
independiente en la explicación de Y, controlando el efecto de las demás? El
foco está en interpretar los coeficientes individuales para entender la
estructura de la relación.
## El modelo de regresión múltiple
El modelo extiende la ecuación de la recta de la regresión simple para
incorporar múltiples predictores:
$$Y = \beta_0 + \beta_1 X_1 + \beta_2 X_2 + \dots + \beta_k X_k + \varepsilon$$
donde:
- $Y$ es la variable dependiente que se quiere predecir.
- $X_1, X_2, \dots, X_k$ son las $k$ variables independientes o predictoras.
- $\beta_0$ es el **intercepto**: el valor predicho de $Y$ cuando todas las
variables independientes son cero.
- $\beta_1, \beta_2, \dots, \beta_k$ son los **coeficientes de regresión
parcial**. Cada $\beta_i$ representa el cambio esperado en $Y$ por cada
aumento de una unidad en $X_i$, **manteniendo constantes todas las demás
variables del modelo**. Este concepto de "mantener constante" (*ceteris
paribus*) es la piedra angular de la regresión múltiple y su principal ventaja
sobre una serie de regresiones simples.
- $\varepsilon$ es el **término de error** o **residuo**: la parte de $Y$ que el
modelo no explica.
## Los supuestos del modelo
La regresión lineal múltiple, como técnica paramétrica, se basa en una serie de
supuestos sobre los datos. La validez de las conclusiones depende de que se
cumplan razonablemente; ignorarlos puede llevar a estimaciones sesgadas,
conclusiones erróneas y predicciones poco fiables [@Field2018].
1. **Linealidad**: se asume que la relación entre cada variable independiente y
la dependiente es lineal. Se comprueba visualmente con gráficos de
dispersión.
2. **Normalidad de los residuos**: el supuesto no es que las variables
originales sean normales, sino que los **residuos del modelo** sigan una
distribución normal. Es crucial para la validez de las pruebas de
significación (t y F). Se verifica con un histograma o un gráfico Q-Q de los
residuos.
3. **Homocedasticidad**: la varianza de los residuos debe ser constante en
todos los niveles de las variables independientes. Lo contrario es la
**heterocedasticidad** (la dispersión de los errores cambia, por ejemplo
aumentando con el valor predicho). Se comprueba con un gráfico de residuos
frente a valores predichos, donde debería verse una nube de puntos sin
patrón evidente (sin forma de embudo o cono).
4. **Independencia de los residuos**: los residuos deben ser independientes
entre sí. Su violación (**autocorrelación**) es habitual en series
temporales, donde el residuo de un momento puede correlacionarse con el
anterior. El test de Durbin-Watson es la prueba clásica para detectarla.
5. **Ausencia de multicolinealidad severa**: uno de los supuestos más
importantes en la práctica. La **multicolinealidad** ocurre cuando las
variables independientes están muy correlacionadas **entre sí**. Si dos
predictores contienen información muy similar, al modelo le resulta difícil
separar sus efectos individuales. Esto no afecta la capacidad predictiva
global, pero sí hace inestables las estimaciones de los coeficientes
parciales e infla sus errores estándar, dificultando la interpretación
explicativa. La herramienta principal de diagnóstico es el **factor de
inflación de la varianza (VIF)**:
| VIF | Interpretación |
|:---------------------|:---------------------------------------------------------|
| = 1 | No hay colinealidad |
| 1 - 5 | Colinealidad moderada (generalmente aceptable) |
| \> 5 - 10 | Colinealidad alta y problemática; requiere acción (eliminar una variable correlacionada o combinarla con otras) [@James2021] |
## Evaluación del modelo: ¿es bueno el modelo?
Una vez construido el modelo, se evalúa su rendimiento tanto a nivel global como
por cada predictor.
### Evaluación del ajuste global
1. **Coeficiente de determinación (R²)**: la proporción de la varianza de la
variable dependiente explicada por el conjunto de independientes. Un R² de
0,65 significa que el modelo explica el 65% de la variabilidad de Y.
2. **R² ajustado**: el R² tiene un problema: siempre aumenta (o se mantiene) al
añadir una nueva variable, incluso si no aporta nada. El R² ajustado corrige
esto penalizando predictores inútiles; es una medida más honesta del ajuste
y la que debe usarse para comparar modelos con distinto número de variables.
3. **Test F**: evalúa la significación global del modelo. Contrasta H₀: todos
los coeficientes son simultáneamente cero (β₁ = β₂ = ... = βₖ = 0). Si el
p-valor es significativo (p \< 0,05), se rechaza H₀ y se concluye que el
modelo, en conjunto, tiene poder predictivo —es significativamente mejor que
usar la media de Y como predicción.
### Evaluación de la contribución de cada variable
1. **Prueba t por coeficiente**: para cada variable independiente se contrasta
H₀: βᵢ = 0. Un p-valor significativo (p \< 0,05) indica que esa variable
contribuye de forma estadísticamente significativa a la predicción de Y,
controlando el resto de variables.
2. **Coeficientes estandarizados (Beta)**: para comparar la importancia
relativa de predictores medidos en escalas diferentes, se usan los
coeficientes Beta: el cambio en Y (en desviaciones típicas) por un cambio de
una desviación típica en Xᵢ, manteniendo las demás constantes. La variable
con mayor \|Beta\| tiene el mayor impacto relativo en la predicción.
La regresión múltiple es una técnica flexible y potente para el modelado
predictivo y explicativo. Su principal limitación, que da paso a la siguiente
sección, es que requiere que la variable dependiente sea cuantitativa. ¿Qué
ocurre cuando se quiere predecir un resultado categórico, como "compra / no
compra" o "abandona / no abandona"? Para eso hace falta la regresión logística.
## Aplicación práctica: modelando la esperanza de vida global
Se aborda a continuación un caso práctico de salud pública y desarrollo global:
entender qué factores a nivel de país se asocian con una mayor esperanza de
vida.
### Objetivo de la investigación
Utilizando datos de distintos países para el año 2007:
> **Objetivo**: construir un modelo de regresión lineal múltiple para predecir
> la esperanza de vida de un país (variable dependiente) en función de su
> desarrollo económico (PIB per cápita), su tamaño (población) y su ubicación
> geográfica (continente).
### Preparación de los datos y análisis exploratorio
Se utiliza el conjunto de datos `gapminder`, de dominio público y accesible en R
mediante el paquete del mismo nombre.
```{r}
#| echo: true
gapminder_2007 <- gapminder::gapminder |> dplyr::filter(year == 2007)
head(gapminder_2007)
str(gapminder_2007)
```
Las variables son: `lifeExp` (dependiente, cuantitativa), `pop` y `gdpPercap`
(independientes, cuantitativas), y `continent` (independiente, cualitativa).
#### Paso 1: análisis de la linealidad y transformaciones
Antes de construir el modelo se verifica el supuesto de linealidad, graficando
la relación entre la variable dependiente y las predictoras cuantitativas:
```{r}
#| label: fig-linearity-check
#| fig-cap: Relación entre PIB per cápita, población y esperanza de vida
#| echo: true
p1 <- ggplot2::ggplot(gapminder_2007, ggplot2::aes(x = gdpPercap, y = lifeExp)) +
ggplot2::geom_point(color = "#076fa2", alpha = 0.6) +
ggplot2::geom_smooth(color = "#c40000") +
ggplot2::theme_minimal()
p2 <- ggplot2::ggplot(gapminder_2007, ggplot2::aes(x = pop, y = lifeExp)) +
ggplot2::geom_point(color = "#076fa2", alpha = 0.6) +
ggplot2::geom_smooth(color = "#c40000") +
ggplot2::theme_minimal()
patchwork::wrap_plots(p1, p2)
```
Los gráficos revelan un problema claro: la relación no es lineal.
- **PIB per cápita**: la relación con la esperanza de vida es curvilínea,
aumentando rápidamente al principio y estabilizándose después. Es una relación
logarítmica clásica.
- **Población**: la mayoría de los países tienen poblaciones pequeñas, con unos
pocos gigantes (China, India) que generan una distribución muy sesgada.
**Decisión**: para cumplir el supuesto de linealidad, se aplica una
**transformación logarítmica** a `gdpPercap` y `pop`.
```{r}
#| label: fig-linearity-transformed
#| fig-cap: Relación tras la transformación logarítmica
#| echo: true
gapminder_2007 <- gapminder_2007 |>
dplyr::mutate(
log_gdpPercap = log(gdpPercap),
log_pop = log(pop)
)
p3 <- ggplot2::ggplot(gapminder_2007, ggplot2::aes(x = log_gdpPercap, y = lifeExp)) +
ggplot2::geom_point(color = "#076fa2", alpha = 0.6) +
ggplot2::geom_smooth(method = "lm", color = "#c40000") +
ggplot2::theme_minimal()
p4 <- ggplot2::ggplot(gapminder_2007, ggplot2::aes(x = log_pop, y = lifeExp)) +
ggplot2::geom_point(color = "#076fa2", alpha = 0.6) +
ggplot2::geom_smooth(method = "lm", color = "#c40000") +
ggplot2::theme_minimal()
patchwork::wrap_plots(p3, p4)
```
La relación es ahora visiblemente más lineal, especialmente para el PIB.
#### Paso 2: análisis de multicolinealidad inicial
Se comprueba la correlación entre las variables predictoras ya transformadas:
```{r}
#| label: fig-corrplot-regression
#| fig-cap: Matriz de correlaciones de las variables del modelo
#| echo: true
cor_matrix_reg <- cor(gapminder_2007[, c("lifeExp", "log_gdpPercap", "log_pop")])
corrplot::corrplot(cor_matrix_reg, method = "color", addCoef.col = "black")
```
La correlación entre el logaritmo del PIB y el logaritmo de la población es de
0,27: un valor bajo que no sugiere problemas de multicolinealidad.
### Construcción y validación del modelo de regresión
```{r}
#| echo: true
life_exp_model <- lm(lifeExp ~ log_gdpPercap + log_pop + continent, data = gapminder_2007)
```
#### Paso 3: validación de los supuestos del modelo
Se utiliza el paquete `performance` para una revisión exhaustiva y visual de los
supuestos a la vez:
```{r}
#| label: fig-check-model
#| fig-cap: Diagnóstico visual de los supuestos del modelo
#| echo: true
#| fig-height: 10
performance::check_model(life_exp_model)
```
**Interpretación de los diagnósticos**:
1. **Posterior predictive check (linealidad)**: la densidad de los datos reales
y la de los simulados por el modelo se solapan bien; el modelo captura
adecuadamente la distribución de la variable dependiente.
2. **Homocedasticidad (residuos frente a valores ajustados)**: la línea de
tendencia es razonablemente plana y los puntos forman una nube sin patrón
claro. El supuesto se cumple.
3. **Normalidad de los residuos (gráfico Q-Q)**: los puntos se ajustan bien a
la diagonal, especialmente en el centro. El supuesto se cumple.
4. **Multicolinealidad (VIF)**: los VIF de `log_gdpPercap` (1,45) y `log_pop`
(1,11) están muy por debajo de 5. El supuesto se cumple.
El modelo cumple satisfactoriamente todos los supuestos clave de la regresión
lineal múltiple, por lo que se puede proceder a interpretar sus resultados con
confianza.
### Interpretación del modelo final
```{r}
#| echo: true
summary(life_exp_model)
```
#### Evaluación del ajuste global
- **Estadístico F y su p-valor**: p \< 2,2e-16, lo que indica que el modelo en
su conjunto es altamente significativo; mucho mejor para predecir la esperanza
de vida que la simple media global.
- **R² ajustado**: 0,8113. El modelo explica aproximadamente el 81,1% de la
variabilidad en la esperanza de vida entre países en 2007: un poder
explicativo muy alto.
#### Evaluación de los coeficientes individuales
- **Intercepto**: 10,65. Valor predicho de esperanza de vida para el continente
de referencia (África, el primero alfabéticamente) cuando `log_gdpPercap` y
`log_pop` son cero. Sin interpretación práctica directa.
- **log_gdpPercap**: coeficiente = 4,59, p \< 0,001. Altamente significativo.
Por cada aumento de una unidad en el logaritmo del PIB per cápita, la
esperanza de vida aumenta 4,59 años, manteniendo constantes población y
continente: el desarrollo económico tiene una asociación positiva y muy fuerte
con la esperanza de vida.
- **log_pop**: coeficiente = -0,41, p = 0,048. Marginalmente significativo.
Controlando por PIB y continente, los países más poblados tienden a tener una
esperanza de vida ligeramente menor.
- **continentAmericas**: coeficiente = 8,71, p \< 0,001. La esperanza de vida en
las Américas es, en promedio, 8,71 años mayor que en África, controlando por
PIB y población.
- **continentAsia**: coeficiente = 6,71, p \< 0,001. 6,71 años mayor que en
África en las mismas condiciones.
- **continentEurope**: coeficiente = 10,31, p \< 0,001. 10,31 años mayor que en
África.
- **continentOceania**: coeficiente = 11,51, p \< 0,001. 11,51 años mayor que en
África.
### Conclusiones
1. **El principal motor de la esperanza de vida a nivel global es el desarrollo
económico** (PIB per cápita): efecto positivo, fuerte y estadísticamente muy
significativo.
2. **El continente tiene un efecto independiente y muy significativo**: incluso
tras controlar por riqueza, existen diferencias estructurales importantes
entre continentes, siendo África el que presenta los mayores desafíos.
3. La **población** tiene un efecto negativo pequeño pero detectable: a
igualdad de riqueza, gestionar la salud en países muy grandes puede
presentar desafíos adicionales.
Este análisis ilustra cómo la regresión múltiple permite desenredar los efectos
de varios factores, cuantificar su importancia relativa y construir un modelo
explicativo y predictivo de un fenómeno complejo.
## Regresión logística: cuando el resultado es una elección
La sección anterior desarrolló la regresión lineal múltiple, una técnica
excepcional para predecir resultados cuantitativos. Sin embargo, muchas de las
preguntas más relevantes en investigación y en el mundo de los negocios no
tienen una respuesta numérica, sino categórica:
- ¿Un cliente **abandonará** o **no abandonará** el servicio?
- ¿Un paciente **responderá** o **no responderá** a un tratamiento?
- ¿Un consumidor **comprará** o **no comprará** un producto tras ver un anuncio?
- ¿Una solicitud de crédito será **aprobada** o **rechazada**?
En todos estos casos, la variable dependiente es **binaria** (o dicotómica): una
elección, un evento o una pertenencia a un grupo. Modelar este tipo de resultado
con una regresión lineal múltiple es problemático por dos razones:
1. **Predicciones sin sentido**: un modelo lineal puede predecir valores por
encima de 1 o por debajo de 0. ¿Qué significa una probabilidad de 1,3 (130%)
de comprar un producto, o de -0,2? Son resultados lógicamente imposibles.
2. **Violación de supuestos**: la relación no es lineal, y los residuos de un
modelo con variable dependiente binaria no siguen una distribución normal ni
tienen varianza constante (violan la homocedasticidad).
La **regresión logística** es la técnica de dependencia diseñada específicamente
para modelar y predecir una variable dependiente categórica a partir de
variables independientes cuantitativas o cualitativas.
### La transformación logística: de la línea recta a la curva en S
El corazón de la regresión logística es la **función logística** (o sigmoide).
En lugar de ajustar una línea recta, el modelo ajusta una curva en forma de "S"
acotada entre 0 y 1:
```{r}
#| label: fig-logistic-curve
#| fig-cap: La función logística (curva sigmoide)
#| echo: true
logit_data <- data.frame(x = seq(-6, 6, length.out = 200)) |>
dplyr::mutate(p = 1 / (1 + exp(-x)))
ggplot2::ggplot(logit_data, ggplot2::aes(x = x, y = p)) +
ggplot2::geom_line(color = "#076fa2", linewidth = 1) +
ggplot2::geom_hline(yintercept = c(0, 1), linetype = "dashed", color = "grey60") +
ggplot2::labs(x = "Combinación lineal de predictores (logit)",
y = "Probabilidad estimada P(Y = 1)") +
ggplot2::theme_minimal()
```
Esta curva tiene la propiedad exacta que se necesita: independientemente de cuán
grande o pequeño sea el valor de las variables independientes, la salida del
modelo siempre estará entre 0 y 1, interpretable directamente como la
**probabilidad** de que ocurra el evento de interés (Y=1).
Para lograrlo, el modelo no predice directamente la probabilidad, sino una
transformación de la misma: el **logit** o logaritmo de los *odds*.
1. **Probabilidad (p)**: la probabilidad de que Y=1. Su rango es \[0, 1\].
2. ***Odds***: la probabilidad de que el evento ocurra dividida por la
probabilidad de que no ocurra: $Odds = p / (1-p)$. Si la probabilidad de
compra es 0,8 (80%), los *odds* son 0,8 / 0,2 = 4 (a menudo expresado como
"4 a 1 a favor"). Su rango es $[0, +\infty)$.
3. **Logit (log-odds)**: el logaritmo natural de los *odds*:
$Logit(p) = \ln(p / (1-p))$. Su rango va de $-\infty$ a $+\infty$.
La ventaja de esta transformación es que el **logit es lineal** respecto a las
variables independientes, de modo que la ecuación del modelo de regresión
logística es:
$$\ln\left(\frac{p}{1-p}\right) = \beta_0 + \beta_1 X_1 + \beta_2 X_2 + \dots + \beta_k X_k$$
El modelo utiliza la regresión lineal para predecir el log-odds, y la función
logística "deshace" esa transformación para devolver la probabilidad que
interesa.
### La interpretación de los coeficientes: los odds ratios
La interpretación de los coeficientes ($\beta$) en la regresión logística es
menos directa que en la lineal. Un coeficiente $\beta_i$ representa el cambio en
el **log-odds** de la variable dependiente por cada aumento de una unidad en
$X_i$, manteniendo constantes las demás variables. Como el log-odds no es una
unidad intuitiva, la práctica estándar es transformar los coeficientes en **odds
ratios (OR)**.
El OR se calcula exponenciando el coeficiente: $OR = e^{\beta_i}$. Su
interpretación es mucho más clara:
- **OR \> 1**: por cada aumento de una unidad en $X_i$, los *odds* de que Y=1 se
multiplican por el valor del OR. La variable aumenta la probabilidad del
evento.
- **OR \< 1**: la variable disminuye la probabilidad del evento.
- **OR = 1**: la variable no tiene ningún efecto sobre los *odds* del evento.
Por ejemplo, si la variable "edad" tiene un coeficiente de 0,05, su OR sería
$e^{0{,}05} \approx 1{,}051$: por cada año adicional de edad, los *odds* de
comprar el producto aumentan aproximadamente un 5,1%, manteniendo constantes las
demás variables.
### Evaluación del modelo: más allá del R²
La evaluación de un modelo de regresión logística difiere de la de un modelo
lineal.
#### Medidas de ajuste del modelo
- **Máxima verosimilitud**: a diferencia de la regresión lineal, que usa mínimos
cuadrados ordinarios, la regresión logística se estima por **máxima
verosimilitud (MLE)**: el algoritmo busca los coeficientes que maximizan la
probabilidad de haber observado los datos disponibles.
- **Devianza y test de razón de verosimilitud**: la bondad de ajuste se mide con
la **devianza** (-2 × log-verosimilitud); un modelo con menor devianza se
ajusta mejor. El análogo al test F de la regresión lineal es el **test de
razón de verosimilitud**, que compara la devianza del modelo con la de un
modelo nulo (solo con el intercepto). Un p-valor significativo indica una
mejora significativa sobre el modelo nulo.
- **Pseudo R²**: no existe un equivalente directo al R² lineal, pero se han
desarrollado métricas análogas, como el R² de McFadden o el de Nagelkerke.
Suelen ser numéricamente más bajos que un R² lineal y deben interpretarse con
cautela [@Hosmer2013].
#### Medidas de rendimiento de la clasificación
Dado que el objetivo suele ser clasificar, se evalúa cómo distingue el modelo
entre los 0 y los 1:
- **Matriz de confusión**: cruza las predicciones del modelo con los valores
reales, mostrando aciertos (verdaderos positivos y negativos) y errores
(falsos positivos y negativos).
- **Exactitud (*accuracy*)**: proporción total de predicciones correctas. Puede
ser engañosa con clases desbalanceadas.
- **Sensibilidad (*recall*)**: capacidad de identificar correctamente los casos
positivos (Y=1).
- **Especificidad**: capacidad de identificar correctamente los casos negativos
(Y=0).
- **Curva ROC y AUC**: la curva ROC representa la sensibilidad frente a (1 -
especificidad) para todos los umbrales de probabilidad posibles. El área bajo
la curva (AUC) es una medida agregada del rendimiento:
| AUC | Interpretación |
|:-------|:------------------------------------------|
| 0,5 | Clasificador inútil (equivalente al azar) |
| \> 0,7 | Modelo aceptable |
| \> 0,8 | Modelo bueno |
| \> 0,9 | Modelo excelente |
| 1 | Clasificador perfecto |
El AUC es una de las métricas más importantes porque evalúa el poder
discriminatorio del modelo con independencia del umbral de clasificación elegido
[@James2021].
## Aplicación práctica: prediciendo la supervivencia en el Titanic
Se utiliza uno de los conjuntos de datos más conocidos en ciencia de datos: el
registro de pasajeros del Titanic, con un objetivo predictivo y explicativo.
### Objetivo de la investigación
> **Objetivo**: construir un modelo de regresión logística que prediga la
> probabilidad de que un pasajero sobreviviera al naufragio, en función de sus
> características demográficas y de viaje (clase, sexo, edad...), e identificar
> qué factores fueron más determinantes para la supervivencia.
### Preparación de los datos y análisis exploratorio
Este paso es especialmente importante en este caso, ya que los datos del Titanic
contienen valores perdidos y variables que necesitan transformación.
```{r}
#| echo: true
titanic_data <- as.data.frame(titanic::titanic_train)
dplyr::glimpse(titanic_data)
summary(titanic_data)
```
**Observaciones iniciales**:
- La variable dependiente, `Survived`, es un entero (0 = No, 1 = Sí); se
convierte a factor para que `glm()` la trate correctamente.
- `Age` tiene 177 valores perdidos.
- `Pclass` (clase del billete) y `Sex` son categóricas y deben tratarse como
factores.
- `SibSp` (hermanos/cónyuges a bordo) y `Parch` (padres/hijos a bordo) pueden
combinarse en una variable de "tamaño familiar".
#### Paso 1: limpieza y transformación de datos
```{r}
#| echo: true
titanic_clean <- titanic_data |>
dplyr::mutate(
Survived = factor(Survived, levels = c(0, 1), labels = c("No", "Sí")),
Pclass = factor(Pclass, levels = c(1, 2, 3),
labels = c("Primera", "Segunda", "Tercera")),
Sex = factor(Sex)
) |>
# Impute missing Age with the median
dplyr::mutate(Age = ifelse(is.na(Age), median(Age, na.rm = TRUE), Age)) |>
# Create a family size variable
dplyr::mutate(FamilySize = SibSp + Parch + 1) |>
dplyr::select(Survived, Pclass, Sex, Age, FamilySize, Fare)
summary(titanic_clean)
```
#### Paso 2: división de los datos en entrenamiento y prueba
Para evaluar honestamente el rendimiento del modelo, se entrena en el 75% de los
datos y se prueba en el 25% restante, no visto por el modelo durante el ajuste:
```{r}
#| echo: true
set.seed(123)
titanic_split <- rsample::initial_split(titanic_clean, prop = 0.75, strata = Survived)
train_data <- rsample::training(titanic_split)
test_data <- rsample::testing(titanic_split)
```
### Construcción y validación del modelo de regresión logística
```{r}
#| echo: true
titanic_model <- glm(Survived ~ Pclass + Sex + Age + FamilySize + Fare,
data = train_data, family = "binomial")
summary(titanic_model)
```
### Interpretación del modelo
#### Evaluación del ajuste global
La devianza nula (de un modelo sin predictores) es 889,39, mientras que la
devianza residual (del modelo estimado) es 585,01. La gran reducción indica que
el modelo se ajusta mucho mejor a los datos que el azar, con un p-valor asociado
extremadamente pequeño (implícito en la significación de los coeficientes).
#### Interpretación de los coeficientes y odds ratios
```{r}
#| echo: true
odds_ratios <- exp(coef(titanic_model))
print(odds_ratios)
```
**Interpretación de los predictores más relevantes**:
- **Sexmale**: OR = 0,07. Manteniendo constantes las demás variables, los *odds*
de supervivencia de un hombre eran solo el 7% de los de una mujer
(equivalentemente, los *odds* de una mujer eran ≈14 veces los de un hombre).
El predictor más fuerte, con diferencia.
- **PclassSegunda y PclassTercera**: OR = 0,23 y 0,06 (la categoría de
referencia es "Primera"). Los *odds* de supervivencia en segunda clase eran un
77% más bajos que en primera, y en tercera un 94% más bajos. Viajar en una
clase superior aumentaba drásticamente las probabilidades de sobrevivir.
- **Age**: OR = 0,96. Por cada año adicional de edad, los *odds* de
supervivencia se multiplicaban por 0,96 (una disminución del 4%), manteniendo
el resto constante.
- **FamilySize**: OR = 0,72. Por cada miembro adicional en la familia, los
*odds* de supervivencia disminuían un 28%, posiblemente reflejando la
dificultad de evacuar con grupos grandes.
### Evaluación del rendimiento del modelo en datos de prueba
#### Paso 3: predicción y matriz de confusión
```{r}
#| echo: true
# Predict probabilities on the test set
pred_prob <- predict(titanic_model, newdata = test_data, type = "response")
# Convert probabilities into classes using a 0.5 threshold
pred_class <- ifelse(pred_prob > 0.5, "Sí", "No") |> factor(levels = c("No", "Sí"))
conf_matrix <- caret::confusionMatrix(data = pred_class, reference = test_data$Survived)
print(conf_matrix)
```
**Interpretación de la matriz de confusión**:
- **Exactitud**: el modelo clasificó correctamente al 83,41% de los pasajeros
del conjunto de prueba.
- **Sensibilidad**: identificó correctamente al 74,42% de los pasajeros que
realmente sobrevivieron.
- **Especificidad**: identificó correctamente al 88,71% de los pasajeros que no
sobrevivieron.
Resultados sólidos para un modelo relativamente simple.
#### Paso 4: curva ROC y área bajo la curva (AUC)
```{r}
#| label: fig-roc-titanic
#| fig-cap: Curva ROC del modelo de supervivencia
#| echo: true
roc_curve <- pROC::roc(test_data$Survived, pred_prob)
auc_value <- pROC::auc(roc_curve)
pROC::ggroc(roc_curve, color = "#076fa2", linewidth = 1) +
ggplot2::geom_abline(slope = 1, intercept = 1, linetype = "dashed", color = "grey60") +
ggplot2::ggtitle(paste0("Curva ROC (AUC = ", round(auc_value, 3), ")")) +
ggplot2::theme_minimal()
```
El AUC es de 0,876, un valor considerado "excelente": el modelo tiene una gran
capacidad para distinguir entre un pasajero que sobreviviría y uno que no.
### Conclusiones
El modelo de regresión logística ha sido exitoso tanto en su capacidad
explicativa como predictiva, confirmando cuantitativamente hechos históricos
bien conocidos:
- **El factor más determinante para la supervivencia fue el sexo**: las mujeres
tenían una probabilidad de sobrevivir abrumadoramente mayor.
- **La clase social fue el segundo factor más importante**: los pasajeros de
primera clase tuvieron una ventaja sustancial sobre los de segunda y,
especialmente, los de tercera.
- **La edad y el tamaño de la familia** también jugaron un papel significativo,
aunque menor: los pasajeros más jóvenes y con familias más pequeñas tenían una
ligera ventaja.
Desde el punto de vista del modelado, este caso práctico ilustra el flujo de
trabajo completo de un problema de clasificación: desde la limpieza de datos y
la creación de variables hasta la construcción del modelo, la interpretación de
los odds ratios y una evaluación rigurosa de su rendimiento en datos no vistos.