El RMS Titanic fue un transatlántico británico que se hundió el 14 de abril de 1912, tras colisionar con un iceberg durante su viaje inaugural desde Southampton hacia Nueva York. Esta tragedia marítima cobró la vida de más de 1.500 personas y se ha convertido en uno de los desastres más emblemáticos y estudiados de la historia. Su importancia no solo radica en la magnitud del evento, sino también en la disponibilidad de datos detallados sobre los pasajeros, lo que permite analizar con rigurosidad diversos factores que pudieron influir en su destino de sobrevivir o no al naufragio.
Se plantea en este estudio identificar y modelar estadísticamente las características de los pasajeros que influyeron en su supervivencia, utilizando un enfoque de regresión logística multivariada para evaluar cómo estos factores determinaban la probabilidad de sobrevivir al hundimiento del Titanic.
Objetivo:Estimar la probabilidad de supervivencia de un pasajero en función de variables explicativas como sexo, edad, clase del boleto (Pclass), número de familiares a bordo, entre otras.
Se importa la base de datos a utilizar
library(readxl)
Titanic <- read_excel("C:/Users/house/OneDrive/Escritorio/Nueva carpeta/Especialización/Especialización/Curso 2/3. Modelos de regresión/Trabajo/Titanic (Trabajo Proyecto).xlsx")
head(Titanic)
## # A tibble: 6 × 8
## Survived Pclass Name Sex Age Siblings/Spouses Abo…¹
## <dbl> <dbl> <chr> <chr> <dbl> <dbl>
## 1 0 3 Mr, Owen Harris Braund male 22 1
## 2 1 1 Mrs, John Bradley (Florenc… fema… 38 1
## 3 1 3 Miss, Laina Heikkinen fema… 26 0
## 4 1 1 Mrs, Jacques Heath (Lily M… fema… 35 1
## 5 0 3 Mr, William Henry Allen male 35 0
## 6 0 3 Mr, James Moran male 27 0
## # ℹ abbreviated name: ¹`Siblings/Spouses Aboard`
## # ℹ 2 more variables: `Parents/Children Aboard` <dbl>, Fare <dbl>
Interpretación
La tabla proporcionada es una muestra del dataset del Titanic, con las siguientes variables:
# Crear una tabla resumen para cada variable numérica
# Seleccionar solo las variables numéricas
datos_numericos <- Titanic[, sapply(Titanic, is.numeric)]
# Crear una tabla resumen para cada variable numérica
for (var in names(datos_numericos)) {
cat("### Resumen de", var, "\n\n") # Título
resumen <- summary(datos_numericos[[var]])
resumen_df <- data.frame(Estadístico = names(resumen), Valor = as.numeric(resumen))
# Mostrar la tabla
print(knitr::kable(resumen_df, digits = 2))
cat("\n\n") # Espacio entre tablas
}
## ### Resumen de Survived
##
##
##
## |Estadístico | Valor|
## |:-----------|-----:|
## |Min. | 0.00|
## |1st Qu. | 0.00|
## |Median | 0.00|
## |Mean | 0.39|
## |3rd Qu. | 1.00|
## |Max. | 1.00|
##
##
## ### Resumen de Pclass
##
##
##
## |Estadístico | Valor|
## |:-----------|-----:|
## |Min. | 1.00|
## |1st Qu. | 2.00|
## |Median | 3.00|
## |Mean | 2.31|
## |3rd Qu. | 3.00|
## |Max. | 3.00|
##
##
## ### Resumen de Age
##
##
##
## |Estadístico | Valor|
## |:-----------|-----:|
## |Min. | 0.42|
## |1st Qu. | 20.25|
## |Median | 28.00|
## |Mean | 29.47|
## |3rd Qu. | 38.00|
## |Max. | 80.00|
##
##
## ### Resumen de Siblings/Spouses Aboard
##
##
##
## |Estadístico | Valor|
## |:-----------|-----:|
## |Min. | 0.00|
## |1st Qu. | 0.00|
## |Median | 0.00|
## |Mean | 0.53|
## |3rd Qu. | 1.00|
## |Max. | 8.00|
##
##
## ### Resumen de Parents/Children Aboard
##
##
##
## |Estadístico | Valor|
## |:-----------|-----:|
## |Min. | 0.00|
## |1st Qu. | 0.00|
## |Median | 0.00|
## |Mean | 0.38|
## |3rd Qu. | 0.00|
## |Max. | 6.00|
##
##
## ### Resumen de Fare
##
##
##
## |Estadístico | Valor|
## |:-----------|----------:|
## |Min. | 0.00|
## |1st Qu. | 14.45|
## |Median | 71.00|
## |Mean | 127565.09|
## |3rd Qu. | 78958.00|
## |Max. | 5123292.00|
Interpretación
str(Titanic)
## tibble [887 × 8] (S3: tbl_df/tbl/data.frame)
## $ Survived : num [1:887] 0 1 1 1 0 0 0 0 1 1 ...
## $ Pclass : num [1:887] 3 1 3 1 3 3 1 3 3 2 ...
## $ Name : chr [1:887] "Mr, Owen Harris Braund" "Mrs, John Bradley (Florence Briggs Thayer) Cumings" "Miss, Laina Heikkinen" "Mrs, Jacques Heath (Lily May Peel) Futrelle" ...
## $ Sex : chr [1:887] "male" "female" "female" "female" ...
## $ Age : num [1:887] 22 38 26 35 35 27 54 2 27 14 ...
## $ Siblings/Spouses Aboard: num [1:887] 1 1 0 1 0 0 0 3 0 1 ...
## $ Parents/Children Aboard: num [1:887] 0 0 0 0 0 0 0 1 2 0 ...
## $ Fare : num [1:887] 7.25 7.13e+05 7.92e+03 5.31e+01 8.05 ...
sapply(Titanic, class)
## Survived Pclass Name
## "numeric" "numeric" "character"
## Sex Age Siblings/Spouses Aboard
## "character" "numeric" "numeric"
## Parents/Children Aboard Fare
## "numeric" "numeric"
Interpretacion
Se aplica el test de Shapiro Wilk a las variables numericas de la data considerando que el tamaño de observaciones son menores a 5.000
shapiro.test(Titanic$Survived)
##
## Shapiro-Wilk normality test
##
## data: Titanic$Survived
## W = 0.61726, p-value < 2.2e-16
shapiro.test(Titanic$Age)
##
## Shapiro-Wilk normality test
##
## data: Titanic$Age
## W = 0.97822, p-value = 3.06e-10
shapiro.test(Titanic$Pclass)
##
## Shapiro-Wilk normality test
##
## data: Titanic$Pclass
## W = 0.71938, p-value < 2.2e-16
shapiro.test(Titanic$`Siblings/Spouses Aboard`)
##
## Shapiro-Wilk normality test
##
## data: Titanic$`Siblings/Spouses Aboard`
## W = 0.51409, p-value < 2.2e-16
shapiro.test(Titanic$`Parents/Children Aboard`)
##
## Shapiro-Wilk normality test
##
## data: Titanic$`Parents/Children Aboard`
## W = 0.53408, p-value < 2.2e-16
shapiro.test(Titanic$Fare)
##
## Shapiro-Wilk normality test
##
## data: Titanic$Fare
## W = 0.3191, p-value < 2.2e-16
Interpretación
Las anteriores pruebas de normalidad evidencian que todas las variables no son normales dado a que su p-value es inferior a 0.05. Se recomienda usar el coeficiente de correlación de Spearman, que es no paramétrico.
cor.test((Titanic$Pclass), (Titanic$Survived),method = "spearman")
## Warning in cor.test.default((Titanic$Pclass), (Titanic$Survived), method =
## "spearman"): Cannot compute exact p-value with ties
##
## Spearman's rank correlation rho
##
## data: (Titanic$Pclass) and (Titanic$Survived)
## S = 155582546, p-value < 2.2e-16
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
## rho
## -0.3376479
Interpretación
A medida que va aumentando la clase social siendo 1 de primera clase (alta), 2 de segunda clase (media) y 3 de tercera clase (baja) la probabilidad de sobrevivir en el naufragio es baja. Es de resaltar que la variable clase se considera significativa en la opcion de sobrevivir dado a que contiene un p-value menor de 0.05.
cor.test((Titanic$Age),(Titanic$Survived),method = "spearman")
## Warning in cor.test.default((Titanic$Age), (Titanic$Survived), method =
## "spearman"): Cannot compute exact p-value with ties
##
## Spearman's rank correlation rho
##
## data: (Titanic$Age) and (Titanic$Survived)
## S = 119830656, p-value = 0.368
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
## rho
## -0.03026484
Interpretación
El -0.03 expone una relacion negativa y debil entre la edad con la probabilidad de que sobreviva en el Titanic, adicionalmente este valor arroja que a mayor edad entre las personas de la nave, la probabilidad de sobrevivir en el naufragio es baja. Por otro lado, esta variable no tiene tanta significancia en esta asociacion ya que el valor de p es de 0.368 siendo superior a 0.05.
library(psych)
## Warning: package 'psych' was built under R version 4.4.3
Titanic$sex1<- ifelse(Titanic$Sex == "female", 1, 0)
Titanic$survived1 <- factor(Titanic$Survived, labels = c("no", "si"))
# Se toma encuenta phi_valor para saber la asociacion de las variables cuando juntas son binarias
tabla <- table(Titanic$sex1, Titanic$Survived)
phi_valor <- phi(tabla)
phi_valor
## [1] 0.54
# Se utiliza chi para determinar la significancia de la variable cuando juntas son binarias
chisq.test(tabla)
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: tabla
## X-squared = 258.39, df = 1, p-value < 2.2e-16
Interpretación
La correlación positiva de 0.54 indica que ser mujer está asociado con una mayor probabilidad de sobrevivir al hundimiento del Titanic.Es decir, a medida que el valor de del sexo femenino aumenta, la probabilidad de que la persona haya sobrevivido incrementa. Finalmente, el valor de p es inferior a 0.05 lo que sugiere que esta variable es significativa en que sobrevivan las personas.
cor.test((Titanic$`Siblings/Spouses Aboard`),(Titanic$Survived),method = "spearman")
## Warning in cor.test.default((Titanic$`Siblings/Spouses Aboard`),
## (Titanic$Survived), : Cannot compute exact p-value with ties
##
## Spearman's rank correlation rho
##
## data: (Titanic$`Siblings/Spouses Aboard`) and (Titanic$Survived)
## S = 106241467, p-value = 0.009894
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
## rho
## 0.08657057
Interpretación
La correlación positiva pero debil de 0.0865 sugiere que, en general, quienes tenían más hermanos o esposos a bordo tendieron a tener una ligeramente mayor probabilidad de sobrevivir. Es decir, el número de estos familiares en el barco tuvo una influencia mínima pero ligeramente favorable sobre la supervivencia.
cor.test((Titanic$`Parents/Children Aboard`),(Titanic$Survived),method = "spearman")
## Warning in cor.test.default((Titanic$`Parents/Children Aboard`),
## (Titanic$Survived), : Cannot compute exact p-value with ties
##
## Spearman's rank correlation rho
##
## data: (Titanic$`Parents/Children Aboard`) and (Titanic$Survived)
## S = 100430678, p-value = 4.512e-05
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
## rho
## 0.1365298
Interpretación
Esta correlacion de 0.13 representa la existencia de una relación positiva y muy débil entre la cantidad de familiares como padres o hijos presentes a bordo y los pasajeros que hayan sobrevivido al hundimiento del Titanic. En pocas palabras, se puede afirmar que viajar con familiares como padres e hijos tiene poca relacion con la variable de sobrevivir, asi mismo, se presenta el p-value que es menor al 0.05 indicando que es significativa.
cor.test((Titanic$Fare),(Titanic$Survived),method = "spearman")
## Warning in cor.test.default((Titanic$Fare), (Titanic$Survived), method =
## "spearman"): Cannot compute exact p-value with ties
##
## Spearman's rank correlation rho
##
## data: (Titanic$Fare) and (Titanic$Survived)
## S = 97895943, p-value = 2.153e-06
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
## rho
## 0.1583227
Interpretación
La relacion entre la variable pago del boleto y la supervivencia de los pasajeros que estuvieron a bordo del titanic es positiva y débil. Ademas, se resalta que esta variable es significativa dado a que, su p-value es inferior a 0.05.
Es decir que las variables más relevantes para predecir supervivencia (por su significancia y fuerza de asociación) son:
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.4.3
##
## Adjuntando el paquete: 'ggplot2'
## The following objects are masked from 'package:psych':
##
## %+%, alpha
ggplot(Titanic, aes(x = as.factor(Survived), y = as.numeric(Pclass))) +
geom_boxplot(fill = "skyblue") +
labs(
x = "Supervivencia (0 = No, 1 = Si)",
y = "Clase",
title = "Relacion entre clase y supervivencia"
) +
theme_minimal()
La clase del pasaje influye fuertemente en la supervivencia ya que el boxplot muestra que la mayoría de los sobrevivientes pertenecen a clases más altas, especialmente la primera clase (Pclass = 1), en cambio, la mayoría de los no sobrevivientes se concentran en tercera clase (Pclass = 3). La mediana de la clase (Nota: 1 = primera clase, 3 = tercera clase) es más alta para los que no sobrevivieron, lo que indica que en promedio, los fallecidos viajaban en clases más bajas.
library(ggplot2)
ggplot(Titanic, aes(x = as.factor(Survived), y = as.numeric(Age))) +
geom_boxplot(fill = "skyblue") +
labs(
x = "Supervivencia (0 = No, 1 = Si)",
y = "Edad",
title = "Relacion entre edad y supervivencia"
) +
theme_minimal()
Interpretacion
La mediana de edad de sobrevivientes es ligeramente superior a 30 años y la mediana de edad de No sobrevivientes es ligeramente inferior a 30 años. Ademas, ambos grupos presentan un rango de edad amplio, desde los 20 años en adelante aunque se observan algunos valores atípicos en ambos grupos, especialmente en los no sobrevivientes, indicando la presencia de pasajeros de edad avanzada que no sobrevivieron. La dispersión de edades es similar en ambos grupos, sugiriendo que la edad no es un factor determinante único para la supervivencia
library(ggplot2)
ggplot(Titanic, aes(x = Survived, fill = Sex)) +
geom_bar(position = "fill") +
labs(
x = "Supervivencia (0 = No, 1 = Si)",
y = "Proporcion",
fill = "Sexo",
title = "Relacion entre sexo y supervivencia"
) +
theme_minimal()
La mayoría de las mujeres a bordo sobrevivieron en proporción con los hombres sobrevivientes. Esto refleja la política de evacuación de, “primero mujeres y niños” y la mayoría de los hombres no sobrevivieron en proporción con las mujeres no sobrevivientes. Es probable que muchos hombres cedieron sus lugares en los botes salvavidas o no fueron priorizados. Ademas, hay diferencia entre la proporción de supervivientes hombres y mujeres estadísticamente significativa, como también se indica en el resultado del test χ² (Chi-cuadrado).
library(ggplot2)
ggplot(Titanic, aes(x = as.factor(Survived), y = as.numeric(`Siblings/Spouses Aboard`))) +
geom_boxplot(fill = "skyblue") +
labs(
x = "Supervivencia (0 = No, 1 = Si)",
y = "Familiares a bordo",
title = "Relacion entre familiares a bordo y supervivencia"
) +
theme_minimal()
Interpretacion
La diferencia no es marcada en la mediana del grupo de sobrevivientes y no sobrevivientes. Por lo tanto, en ambos grupos (sobrevivientes y no sobrevivientes), la mediana está entre 0 y 1, lo que indica que la mayoría de los pasajeros no viajaba con hermanos ni esposos. Ademas, tener hermanos o un cónyuge a bordo no fue un factor de peso en la probabilidad de supervivencia.
library(ggplot2)
ggplot(Titanic, aes(x = as.factor(Survived), y = as.numeric(`Parents/Children Aboard`))) +
geom_boxplot(fill = "skyblue") +
labs(
x = "Supervivencia (0 = No, 1 = Si)",
y = "Padres e hijos a bordo",
title = "Relacion entre padres/hijos a bordo y supervivencia"
) +
theme_minimal()
En ambos grupos (sobrevivientes y no sobrevivientes), la mayoría de los pasajeros tenían 0 padres/hijos a bordo.Esto se evidencia por la concentración de valores en 0. Los pasajeros que viajaban con al menos un padre o hijo no tuvieron una tasa diferente de superviviencia en comparación con los que viajaban solos ya que el boxplot muestra agrupaciones en números enteros.
library(ggplot2)
ggplot(Titanic, aes(x = as.factor(Survived), y = Fare)) +
geom_boxplot(fill = "skyblue") +
labs(x = "Supervivencia (0 = No, 1 = Si)",
y = "Tarifa pagada (Fare)",
title = "Relacion entre tarifa pagada y supervivencia") +
theme_minimal()
Interpretacion
Los sobrevivientes pagaron tarifas más altas ya que el boxplot muestra claramente que la mediana de la tarifa pagada por los sobrevivientes es mayor que la de los no sobrevivientes. En ambos grupos, pero sobre todo en el de los sobrevivientes, hay valores atípicos (outliers) de tarifas extremadamente altas.Esto indica que posiblmente algunos pasajeros de primera clase pagaron tarifas significativamente superiores al promedio.
Se selecionan las siguientes variables predictoras:
Pclass,Age,Sex1,Siblings/Spouses Aboard,Parents/Children Aboard,Fare.
Donde presentaron valores p inferiores a 0.05 en los análisis de correlación, lo que indica que existe una asociación estadísticamente significativa entre estas variables y la opcion de sobrevivir al naufragio del Titanic. Ademas, es de resaltar que aunque no exista significancia en la correlacion entre la variable Edad (Age) y la de supervivencia, puede llegar a ser influyente dentro del modelo porque su efecto se evidencia cuando se controlan otras variables.
El modelo seleccionado es una regresión logística multivariada, ya que el objetivo del estudio es estimar la probabilidad de que los pasajeros del Titanic hayan sobrevivido en función de distintas variables explicativas: clase social (Pclass), sexo (Sex1), número de hermanos o esposos a bordo, número de padres o hijos a bordo, y valor del tiquete (Fare). Ademas, este tipo de modelo es el más adecuado cuando la variable dependiente es categórica/binaria, como fue en este caso, donde Survived toma los valores 0 (no sobrevivió) y 1 (sí sobrevivió).
Se presentan las variables que estan relacionadas dentro del modelo logistico
La variable dependiente sera Survived
Las variables independientes seran clase social (Pclass), sexo (Sex1), número de hermanos o esposos a bordo, número de padres o hijos a bordo (Parents/Children Aboard), y valor del tiquete (Fare).
El modelo se representa de la siguiente manera:
\[ \begin{equation} \small \text{logit}(p) = \beta_0 + \beta_1(\text{Pclass}) + \beta_2(\text{Sex1}) + \beta_3(\text{Siblings/Spouses Aboard}) + \beta_4(\text{Parents/Children}) + \beta_5(\text{Fare}) + \beta_6(\text{Age}) \end{equation} \] Donde p es la probabilidad de sobrevivir, Pclass, Sex1, Siblings/Spouses aboard, Parents/Children, Fare y Age son las variables independientes y \(\beta_0,\beta_1,\beta_2, \beta_3,\beta_4,\beta_5, \beta_6\) son los coeficientes.
modelo_logit <- glm(Titanic$Survived ~ Titanic$Pclass + Titanic$sex1+ Titanic$`Siblings/Spouses Aboard` + Titanic$`Parents/Children Aboard`+Fare +Age , data = Titanic, family = binomial)
summary(modelo_logit)
##
## Call:
## glm(formula = Titanic$Survived ~ Titanic$Pclass + Titanic$sex1 +
## Titanic$`Siblings/Spouses Aboard` + Titanic$`Parents/Children Aboard` +
## Fare + Age, family = binomial, data = Titanic)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 2.589e+00 4.632e-01 5.588 2.29e-08 ***
## Titanic$Pclass -1.195e+00 1.309e-01 -9.130 < 2e-16 ***
## Titanic$sex1 2.754e+00 2.005e-01 13.740 < 2e-16 ***
## Titanic$`Siblings/Spouses Aboard` -3.772e-01 1.095e-01 -3.446 0.000569 ***
## Titanic$`Parents/Children Aboard` -9.912e-02 1.171e-01 -0.846 0.397426
## Fare 5.697e-07 3.179e-07 1.792 0.073096 .
## Age -4.354e-02 7.753e-03 -5.615 1.96e-08 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 1182.77 on 886 degrees of freedom
## Residual deviance: 777.89 on 880 degrees of freedom
## AIC: 791.89
##
## Number of Fisher Scoring iterations: 5
Interpretación
Intercepto = 2.589. Esta es el log-odds de sobrevivir para una persona en Primera Clase (Pclass = 1), hombre (sex = 0), sin familiares, edad y tarifa igual a 0. Aunque no tiene una interpretación práctica directa, es necesario para ajustar el modelo.
Pclass = -1.195. Por cada aumento en la clase (por ejemplo, de 1ª a 2ª o de 2ª a 3ª), los log-odds de sobrevivir disminuyen en 1.195 unidades.
sex (1:mujer) = 2.754. Ser mujer en comparación con ser hombre (sex1 = 0) incrementa fuertemente los log-odds de sobrevivir en 2.754 unidades.
Siblings/Spouses Aboard = -0.377. Cada familiar adicional (hermano/esposo) a bordo reduce los log-odds de sobrevivir en 0.377 unidades.
Parents/Children Aboard = -0.099. Tener padres o hijos a bordo reduce muy ligeramente las probabilidades, pero el efecto no es estadísticamente significativo, por lo que no hay evidencia sólida de que influya.
Fare = 5.697e-07. La tarifa pagada tiene un efecto muy pequeño y positivo, pero no es significativo al 5%. Un aumento de 1 unidad en la tarifa apenas cambia la probabilidad de sobrevivir.
Edad = -0.0435. Por cada año adicional de edad, los log-odds de sobrevivir disminuyen en 0.0435 unidades, es decir, las personas mayores tenían menos probabilidades de sobrevivir que los más jóvenes.
El modelo de regresión logística predice la probabilidad de supervivencia (0 = no sobrevivió, 1 = sobrevivió) en el Titanic a partir de varias variables explicativas.
Interpretación detallada y estructurada de los resultados:
| Variable | Coef_Estimado | Significacion | Interpretacion |
|---|---|---|---|
| Intercepto | 2.5890000 | *** | Valor base del logit cuando todas las variables son 0. |
| Pclass | -1.1950000 | *** | A mayor clase (número más alto), menor probabilidad de sobrevivir. |
| Sexo (sex1) | 2.7540000 | *** | Las mujeres tienen una mucho mayor probabilidad de sobrevivir. |
| Siblings/Spouses Aboard | -0.3770000 | *** | Tener más hermanos/cónyuges a bordo reduce la probabilidad de supervivencia. |
| Parents/Children Aboard | -0.0990000 | No significativa | No tiene un efecto claro en la supervivencia. |
| Fare (Tarifa pagada) | 0.0000006 | . | Ligeramente positivo. A mayor tarifa, ligera mayor probabilidad de sobrevivir. |
| Age (Edad) | -0.0435000 | *** | A mayor edad, menor probabilidad de sobrevivir. |
Null deviance = 1182.77 → Desviación si no se usa ningún predictor.
Residual deviance = 777.89 → Mejora sustancial con los predictores.
AIC = 791.89 Esto indica que el modelo mejora significativamente con respecto a un modelo sin variables explicativas.
Se prueba quitando la variebla que no es significativa como Parents/Children Aboard
modelo_logit1 <- glm(Titanic$Survived ~ Titanic$Pclass + Titanic$sex1+ Titanic$`Siblings/Spouses Aboard`+ Age, data = Titanic, family = binomial)
summary(modelo_logit1)
##
## Call:
## glm(formula = Titanic$Survived ~ Titanic$Pclass + Titanic$sex1 +
## Titanic$`Siblings/Spouses Aboard` + Age, family = binomial,
## data = Titanic)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 2.795579 0.449783 6.215 5.12e-10 ***
## Titanic$Pclass -1.265129 0.127021 -9.960 < 2e-16 ***
## Titanic$sex1 2.736487 0.195730 13.981 < 2e-16 ***
## Titanic$`Siblings/Spouses Aboard` -0.407770 0.105197 -3.876 0.000106 ***
## Age -0.043697 0.007695 -5.679 1.36e-08 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 1182.77 on 886 degrees of freedom
## Residual deviance: 782.88 on 882 degrees of freedom
## AIC: 792.88
##
## Number of Fisher Scoring iterations: 5
Interpretacion
Intercepto = 2.796
Esta es el log-odds de sobrevivir para una persona en Primera Clase (Pclass = 1), hombre (sex = 0), con 0 hermanos/esposos a bordo y edad 0 años (hipotético).
Pclass = -1.265
Por cada aumento en la clase (por ejemplo, de 1ª a 2ª o de 2ª a 3ª), los log-odds de sobrevivir disminuyen en 1.265 unidades.
sex (1:mujer) = 2.736
Ser mujer en comparación con ser hombre (sex1 = 0) incrementa fuertemente los log-odds de sobrevivir en 2.736 unidades.
Siblings/Spouses Aboard = -0.408
Cada familiar adicional (hermano/esposo) a bordo reduce los log-odds de sobrevivir en 0.408 unidades.
Edad = -0.044
Por cada año adicional de edad, los log-odds de sobrevivir disminuyen en 0.044 unidades
Probabilidad
Representa la probabilidad de que un pasajero que abordo el titanic sobreviva del naugragio
\[p = \frac{1}{1+e^{\left(-2.79+1.26\text{(Pclass)}-2.73\text{(Sex1)}+0.4\text{(Siblings/Spouses Aboard)} + 0.04\text{(Age)}\right)}}\] Odds
Son la razón entre la probabilidad de que un pasajero sobreviva \(p\) y la probabilidad de que no sobreviva \(1-p\), dado una clase, edad, sexo, esposo o hermanos.
\[\text{Odds}=\frac{p}{1-p} = e^{2.79-1.26\text{(Pclass)}+2.73\text{(Sex1)}-0.4\text{(Siblings/Spouses Aboard)} - 0.04\text{(Age)}}\]
Analisis de los coeficientes
\(β_0\) (Intercepto):
(2.79) es el log-odds cuando alguien sobrevive dado a que la clase, edad, sexo, esposo o hermanos son 0.
La probabilidad de que alguien sobreviva cuando las otras variables son 0 sería solo del 94%
probabilidad <- 1/(1+exp(-2.79))
probabilidad
## [1] 0.942133
\[\text{p} = \frac{1}{1+e^\left(-2.79\right)} = 94\% \]
odd_intercepto <-exp(2.79)
odd_intercepto
## [1] 16.28102
\[odd = e^{2.79} = 16.28102 \]
\(β_1\)(Pclass):
probabilidad2 <- 1/(1+exp(1.26))
probabilidad2
## [1] 0.2209739
\[\text{p} = \frac{1}{1+e^\left(1.26\right)} = 0.2209739 = 22\% \]
odd_horas <-exp(-1.26)
odd_horas
## [1] 0.283654
\[odd = e^{-1.26} = 0.283654\]
\(β_2\)(Sexo):
El coeficiente es positivo y significativo, ya que \(p-value < 0.05\). En ese sentido, significa que ser una mujer aumenta las probabilidades de supervivencia (logaritmo de las odds) en 2.83 veces mas que los hombres.
Esto significa que tener sexo = 1 (por ejemplo, ser mujer) está asociado con una probabilidad de sobrevivir del 94% cuando se considera ese coeficiente solo, manteniendo las demás variables constantes.
probabilidad3 <- 1/(1+exp(-2.73))
probabilidad3
## [1] 0.9387738
\[\text{p} = \frac{1}{1+e^\left(-2.73\right)} = 0.9387738 = 93\% \]
odd_horas3 <-exp(2.73)
odd_horas3
## [1] 15.33289
\[odd = e^{2.73} = 15.33289\]
\(β_3\)(Siblings/Spouses Aboard):
El coeficiente es negativo y significativo, ya que \(p-value < 0.05\). En ese sentido, por cada disminucion de la relacion hermanos o esposo, el log-odds (logaritmo de las odds) de sobrevivir disminuye en 0.40 unidades.
Por cada disminucion adicional de la relacion hermanos o esposo, la probabilidad de sobrevivir es moderada con el 40%
probabilidad4 <- 1/(1+exp(0.40))
probabilidad4
## [1] 0.4013123
\[\text{p} = \frac{1}{1+e^\left(1.26\right)} = 0.2209739 = 22\% \]
odd_horas4 <-exp(-0.40)
odd_horas4
## [1] 0.67032
\[odd = e^{-0.40} = 0.67032\]
\(β_4\)(Age):
El coeficiente es negativo y significativo, ya que \(p-value < 0.05\). En ese sentido, por cada disminucion de la edad, el log-odds (logaritmo de las odds) en 0.04 unidades de sobrevivir.
Por cada disminucion adicional de la edad, la probabilidad de sobrevivir es moderada con el 49%
probabilidad5 <- 1/(1+exp(0.04))
probabilidad5
## [1] 0.4900013
\[\text{p} = \frac{1}{1+e^\left(0.04\right)} = 0.4900013 = 49\% \]
odd_horas5 <-exp(-0.04)
odd_horas5
## [1] 0.9607894
\[odd = e^{-0.04} = 0.9607894\]
Desviancia
La desviancia es similar al residuo, pero adaptado a modelos más complejos, donde a menor desviancia mejor es el ajuste del modelo a los datos.
\[\text{Deviance}= -2*\text{log-verosimilitud del modelo}\]
En ese contexto, null deviance es la representación de la desviación del modelo sin predictores y residual deviance, con los predictores. Por lo tanto, en el presente modelo el valor null deviance es del 1182.77, mientras que residual deviance es de 782.88, indica que la diferencia de 399 puntos no es muy grande. Por lo tanto, el modelo ajustado es significativamente mejor que el modelo nulo, ya que, la inclusion de las variables Edad, Sexo, Clase, Hermanos o Esposos proporciona una mejora significativa al modelo.
AIC
AIC(modelo_logit1)
## [1] 792.8756
AIC(modelo_logit)
## [1] 791.8937
Como podemos obervar la diferencia de los modelos es minima por lo tanto, ambos son considerados buenos para el estudio.
Comparación de las predicciones con las observaciones. Si la probabilidad predicha de sobrevivir es igual a 0.5, siendo 1 las personas que sobreviven y 0 las que no.
## Observacion
## Prediccion no si
## no 472 100
## si 73 242
| Norma de la Matriz de Confusion | ||||
| Detalle con tipo de caso y descripcion | ||||
| Observacion | Prediccion | Tipo de Caso | Descripcion | Frecuencia |
|---|---|---|---|---|
| no | no | Verdadero Negativo (VN) | Predijo no y era no | 472 |
| no | si | Falso Positivo (FP) | Predijo si y era no | 73 |
| si | no | Falso Negativo (FN) | Predijo no y era si | 100 |
| si | si | Verdadero Positivo (VP) | Predijo si y era si | 242 |
De acuerdo con la matriz confusión, su representación en la gráfica de calor y el resumen de resultados, se observa que el modelo detecta bien los pasajeros que sobrevivieron al naufragio. En total, clasificó correctamente 242 casos con sobrevivientes (Verdaderos Positivos), mientras que solo en 100 ocasiones no logró identificarlos, resultando en falsos negativos. Por otro lado, el modelo cometió 73 errores al predecir sobrevivientes cuando en realidad no sobrevivieron (Falsos Positivos). Finalmente, logró indentificar correctamente 472 no sobrevivientes (Verdaderos Negativos). Es decir, que el modelo es más eficaz para identificar correctamente los no sobrevivientes.
A partir de la matriz de confusión, podemos calcular manualmente: Precisión (accuracy), Sensibilidad (recall), Especificidad y F1-score
| Tabla de Métricas de Desempeño | |||
| Clasificación de Promedio: Alta vs Baja | |||
| Métrica | Valor (%) | Descripción | Fórmula |
|---|---|---|---|
| sensitivity | 70.76% | Capacidad de identificar correctamente los sobrevivientes. | \( \frac{VP}{VP + FN} \) |
| specificity | 86.61% | Capacidad de identificar correctamente los no sobrevivientes. | \( \frac{VN}{VN + FP} \) |
| precision | 76.83% | Indica la proporción de casos predichos como positivos que realmente lo eran | \( \frac{VP}{VP + FP} \) |
| f1_score | 73.67% | Equilibrio entre precisión y sensibilidad. | \( \frac{2 \cdot Precision \cdot Sensibilidad}{Precision + Sensibilidad} \) |
| accuracy | 80.50% | Mide la proporción total de aciertos (positivos y negativos correctamente clasificados) sobre el total de casos. | \( \frac{VP + VN}{sum(matrizconfusion)} \) |
Análisis de las métricas del desempeño predictivo
Sensibilidad (Recall): El 70.76% de los sobrevivientes fueron correctamente identificados.
Especificidad: Indica que solo el 86.61% de los que no sobrevivieron fueron correctamente identificados.
Precisión positiva(Precision) : De todas las predicciones que el modelo hizo como sobrevivir, el 76.83% realmente lo eran.
F1-score: El 73.67% refleja buen equilibrio entre precisión y sensibilidad, lo que indica un buen desempeño del modelo.
Precisión global(Accuracy) : De todas las predicciones realizadas, un 80.50% fueron correctas, tanto de los sobrevivientes, como los que no lo fueron.
Se realiza un histograma con el proposito de revisar la frecuencia y la probabilidad de los datos.
probabilidades <- predict(modelo_logit1 , type = "response")
hist(probabilidades, breaks = 10, col = "lightblue", main = "Distribución de probabilidades predichas", xlab = "Probabilidad de se sobrevivir")
De acuerdo con la el histograma de barras, se evidencia que la mayor cantidad de datos se encuentra entre las probabilidades 0 a 0.2, mientras que el restante se encuentra distibuido proporcionalmente.
## Umbral Accuracy sensitivity specificity precision F1
## 1 0.0 0.386 1.000 0.000 0.386 0.557
## 2 0.1 0.554 0.933 0.316 0.461 0.617
## 3 0.2 0.714 0.851 0.628 0.589 0.696
## 4 0.3 0.760 0.816 0.725 0.650 0.724
## 5 0.4 0.795 0.769 0.811 0.719 0.743
En la tabla se encuentran los umbrales que presentan la mayor cantidad de casos, donde el umbral 0.4 es la que mejor se ajustan al modelo logistico.
En ese sentido, si la probabilidad predicha del promedio es igual a 0.65 se asigna al nivel 1 (sobrevivir), si es menor e igual se asigna al nivel 0 (no sobrevivir).
## Observacion
## Prediccion no si
## no 472 100
## si 73 242
De lo anterior, se puede concluir que a medida que la probabilidad aumenta en un 10% el modelo puede predecir de manera correcta los pasajeros que no sobevivieron al titanic, en comparacion a los que sobrevivieron.
| Norma de la Matriz de Confusion | ||||
| Detalle con tipo de caso y descripcion | ||||
| Observacion | Prediccion | Tipo de Caso | Descripcion | Frecuencia |
|---|---|---|---|---|
| no | no | Verdadero Negativo (VN) | Predijo no y era no | 517 |
| no | si | Falso Positivo (FP) | Predijo si y era no | 28 |
| si | no | Falso Negativo (FN) | Predijo no y era si | 139 |
| si | si | Verdadero Positivo (VP) | Predijo si y era si | 203 |
De acuerdo con la matriz confusión, su representación en la gráfica de calor y el resumen de resultados, se observa que el modelo detecta bien los pasajeros que sobrevivieron al naufragio. En total, clasificó correctamente 203 casos con sobrevivientes (Verdaderos Positivos), mientras que solo en 139 ocasiones no logró identificarlos, resultando en falsos negativos. Por otro lado, el modelo cometió 28 errores al predecir sobrevivientes cuando en realidad no sobrevivieron (Falsos Positivos). Finalmente, logró indentificar correctamente 517 no sobrevivientes (Verdaderos Negativos). Es decir, que el modelo es más eficaz para identificar correctamente los no sobrevivientes.
| Tabla de Métricas de Desempeño | |||
| Clasificación de Promedio: Alta vs Baja | |||
| Métrica | Valor (%) | Descripción | Fórmula |
|---|---|---|---|
| sensitivity | 59.36% | Capacidad de identificar correctamente los sobrevivientes. | \( \frac{VP}{VP + FN} \) |
| specificity | 94.86% | Capacidad de identificar correctamente los no sobrevivientes. | \( \frac{VN}{VN + FP} \) |
| precision | 87.88% | Indica la proporción de casos predichos como positivos que realmente lo eran | \( \frac{VP}{VP + FP} \) |
| f1_score | 70.86% | Equilibrio entre precisión y sensibilidad. | \( \frac{2 \cdot Precision \cdot Sensibilidad}{Precision + Sensibilidad} \) |
| accuracy | 81.17% | Mide la proporción total de aciertos (positivos y negativos correctamente clasificados) sobre el total de casos. | \( \frac{VP + VN}{sum(matrizconfusion)} \) |
Análisis de las métricas del desempeño predictivo
Sensibilidad (Recall): El 59.36% de los sobrevivientes fueron correctamente identificados.
Especificidad: Indica que solo el 95% de los que no sobrevivieron fueron correctamente identificados.
Precisión positiva(Precision) : De todas las predicciones que el modelo hizo como sobrevivir, el 88% realmente lo eran.
F1-score: El 71% refleja buen equilibrio entre precisión y sensibilidad, lo que indica un buen desempeño del modelo.
Precisión global(Accuracy) : De todas las predicciones realizadas, un 81% fueron correctas, tanto de los sobrevivientes, como los que no lo fueron.
VIF ≈ 1: No hay colinealidad.
VIF entre 1 y 5: Moderada colinealidad (aceptable).
VIF > 10: Colinealidad alta. Puede ser preocupante.
# Cargar librerías
library(car)
library(dplyr)
cat("\n VIF para multicolinealidad:\n")
##
## VIF para multicolinealidad:
vifs <- vif(modelo_logit1)
print(vifs)
## Titanic$Pclass Titanic$sex1
## 1.442651 1.150213
## Titanic$`Siblings/Spouses Aboard` Age
## 1.161601 1.455485
if(any(vifs > 10)) {
cat("\n⚠ Multicolinealidad grave (VIF > 10).\n")
} else if(any(vifs > 5)) {
cat("\n⚠ Multicolinealidad moderada (VIF entre 5 y 10).\n")
} else {
cat("\nVIF < 5 → Sin problemas de multicolinealidad.\n")
}
##
## VIF < 5 → Sin problemas de multicolinealidad.
Interpretacion: Valores de VIF menores a 5 indican que no existe una interdependencia de las variables independientes, asociando que no existen problemas de multicolinealidad.
cat("\nBox-Tidwell para linealidad del logit:\n")
##
## Box-Tidwell para linealidad del logit:
Titanic_bt <- Titanic %>%
mutate(
Age_log = Age * log(Age),
)
modelo_bt <- glm(Survived ~ Pclass + sex1 + `Siblings/Spouses Aboard`+ Age +
Age_log,
data = Titanic_bt, family = binomial)
bt_sum <- summary(modelo_bt)
print(coef(bt_sum)[c("Age_log") ])
## [1] NA
p_vals_bt <- coef(bt_sum)[, "Pr(>|z|)"][c("Age_log")]
if(any(p_vals_bt < 0.05)) {
cat("\n⚠ Algún término logarítmico es significativo → No lineal en el logit.\n")
} else {
cat("\nLinealidad del logit cumplida para Age.\n")
}
##
## ⚠ Algún término logarítmico es significativo → No lineal en el logit.
Interpretacion: No existe una relacion lineal entre la edad y la variable de sobrevivir medida en escala de logaritmos. En pocas palabras, no tiene influencia en la variable predicha.
cat("\nCook’s Distance para influencias:\n")
##
## Cook’s Distance para influencias:
cooks_d <- cooks.distance(modelo_logit1)
threshold <- 4 / nrow(Titanic)
influencers <- which(cooks_d > threshold)
if(length(influencers) > 0) {
cat("\n⚠ Observaciones influyentes detectadas (índices):\n")
print(influencers)
} else {
cat("\n No hay observaciones influyentes sobre el umbral.\n")
}
##
## ⚠ Observaciones influyentes detectadas (índices):
## 25 65 68 74 81 85 107 119 125 165 177 183 199 205 233 260 266 285 296 300
## 25 65 68 74 81 85 107 119 125 165 177 183 199 205 233 260 266 285 296 300
## 337 347 373 399 408 413 418 427 442 451 453 481 483 487 496 508 539 540 567 568
## 337 347 373 399 408 413 418 427 442 451 453 481 483 487 496 508 539 540 567 568
## 577 585 597 620 628 640 641 658 662 690 707 741 748 769 785 800 810 835 866
## 577 585 597 620 628 640 641 658 662 690 707 741 748 769 785 800 810 835 866
# Gráfico opcional
plot(cooks_d, type = "h", main = "Cook's Distance", ylab = "D")
abline(h = threshold, col ="red",lty=2)
Interpretacion: Se puede observar la alta influencia de valores atipicos en el modelo, donde es malo ya que, el modelo puede estar sesgado con coeficientes diferentes.
Calculamos la probabilidad estimada para cada observación y la clasificamos como “si” a los pasajeros que sobrevievieron (1) y “no” a los pasajeros que no sobrevivieron (0), donde la probabilidad es mayor a 0.5, de igual forma se calculan los odds en la tabla.
\[p = \frac{1}{1+e^{\left(-2.79+1.26\text{(Pclass)}-2.73\text{(Sex1)}+0.4\text{(Siblings/Spouses Aboard)} + 0.04\text{(Age)}\right)}}\]
# Probabilidades predichas
probabilidades <- predict(modelo_logit1 , type = "response")
# Clasificación binaria
pred_Sobrevivir <- ifelse(probabilidades > 0.5, "si", "no")
# Calcular odds
odds <- round(probabilidades / (1 - probabilidades), 3)
# Mostrar tabla con todo
tabla_predicciones <- data.frame(
"Edad" = Titanic$Age,
"Sexo" = Titanic$sex1,
"Clase" = Titanic$Pclass,
"Hermanos o Esposo" = Titanic$`Siblings/Spouses Aboard`,
Probabilidad = round(probabilidades, 3),
Odds = odds,
Clasificación = pred_Sobrevivir
)
# Las 6 primeras predicciones
head(tabla_predicciones)
## Edad Sexo Clase Hermanos.o.Esposo Probabilidad Odds Clasificación
## 1 22 0 3 1 0.086 0.094 no
## 2 38 1 1 1 0.900 9.013 si
## 3 26 1 3 0 0.646 1.823 si
## 4 35 1 1 1 0.911 10.275 si
## 5 35 0 3 0 0.074 0.080 no
## 6 27 0 3 0 0.102 0.113 no
1. Variables que influyen en la supervivencia
Sexo: Las mujeres (Sexo=1) tienen probabilidades significativamente más altas de sobrevivir según el modelo (por ejemplo, casos con probabilidad > 0.6).
Clase: Pasajeros en primera clase (Clase=1) presentan mayores probabilidades de supervivencia que los de tercera clase (Clase=3).
Edad: No hay un patrón simple solo con la tabla pequeña, pero usualmente los niños y personas más jóvenes tuvieron mejor tasa de supervivencia.
Hermanos o esposo a bordo: La presencia de familiares a bordo puede influir en la probabilidad de sobrevivir, en algunos casos favoreciendo la supervivencia.
2. Probabilidades y odds
La probabilidad predicha refleja la estimación del modelo para que el pasajero sobreviva. Los odds expresan la razón entre la probabilidad de sobrevivir y la de no sobrevivir. Odds mayores que 1 indican alta probabilidad de sobrevivir. En ese sentido, en los casos analizados, las mujeres en primera clase tienen odds muy altos (9 o 10), lo que confirma su alta probabilidad de supervivencia.
3. Clasificación binaria
El modelo clasifica a los pasajeros con probabilidad ≥ 0.5 como “sí sobrevivió” y menor que 0.5 como “no sobrevivió”. En la muestra, los hombres de tercera clase con pocas probabilidades fueron correctamente clasificados como no sobrevivientes y las mujeres, especialmente en primera clase, fueron clasificadas como sobrevivientes.
4. Interpretación generalEl modelo captura correctamente los patrones históricos conocidos: mujeres y pasajeros de primera clase tuvieron mayor supervivencia, el modelo identifica un umbral (0.5) para clasificar. Ademas, la variable “Hermanos o esposo a bordo” también parece afectar, aunque se requeriría un análisis más amplio para confirmar su efecto.