knitr::opts_chunk$set(echo = TRUE, warning = FALSE, message = FALSE)

Introduccion

El Titanic, el barco más lujoso de su época, se hundió en su viaje inaugural desde Southampton a Nueva York. La noche del 14 de abril de 1912, chocó contra un iceberg en el Atlántico Norte. En apenas unas horas, la nave se partió y se hundió en las heladas aguas. De las aproximadamente 2,224 personas a bordo, más de 1,500 perdieron la vida, en una de las mayores tragedias marítima. La escasez de botes salvavidas, insuficientes para todos los pasajeros, fue un factor crucial en la alta mortalidad. Existió un protocolo no escrito de “mujeres y niños primero”, pero si este se aplicó de manera efectiva es una de las preguntas clave que busca responder esta investigación. La tragedia conmocionó al mundo y provocó una revisión total de los reglamentos de seguridad marítima. Su legado perdura en la cultura popular, simbolizando los límites de la tecnología frente a la naturaleza.

Planteamiento de la Investigación

1. Planteamiento del Problema

El naufragio del Titanic reveló importantes discrepancias en los protocolos de salvamento, donde factores como el género y la edad pudieron influir en las oportunidades de supervivencia. Por ejemplo, existió la política de “mujeres y niños primero”, a partir de una muestra representativa de pasajeros, esta investigación busca responder preguntas cruciales como: ¿Realmente se privilegió la supervivencia femenina sobre la masculina? ¿Los niños y adultos mayores tuvieron prioridad real en el rescate? ¿Cómo se distribuyeron las edades entre supervivientes y no supervivientes? ¿Existieron diferencias significativas en la composición demográfica entre ambos grupos?

Este estudio se centra exclusivamente en analizar la relación entre variables sexo y edad con la supervivencia en el hundimiento del Titanic. Mediante análisis estadístico descriptivo y comparativo, se examinarán los patrones de supervivencia desagregados por género y grupos etarios, con el objetivo de determinar si existió un perfil demográfico característico entre los sobrevivientes.

La investigación aportará evidencia concreta sobre la aplicación real de los protocolos de salvamento y el papel que jugaron el género y la edad como factores determinantes en la supervivencia durante una de las mayores tragedias marítimas de la historia.

2. Objetivo

2.1 Objetivo General

Analizar la influencia del sexo y la edad en la supervivencia de los pasajeros del Titanic.

2.2 Objetivo Espefico

  • Determinar la tasa de supervivencia global por sexo (hombres vs. mujeres).
  • Identificar la distribución de edades entre supervivientes y no supervivientes.
  • Clasificar a los pasajeros en rangos etarios (niños, adultos, adultos mayores) y evaluar su supervivencia.
  • Establecer si existió un patrón de preferencia por algún grupo demográfico (mujeres y niños).

3. Justificación

El análisis de sexo y edad en contextos de desastre es crucial para entender las dinámicas sociales y los sesgos en protocolos de emergencia. En el caso del Titanic, este enfoque permite verificar la aplicación real de la norma no escrita de “mujeres y niños primero”. Desde una perspectiva formativa, trabajar con estas variables ofrece una base clara para practicar análisis univariantes y bivariantes, útiles en estadística descriptiva y ciencias sociales.

# Cargar dataset del Titanic
titanic_data <- read.csv("https://raw.githubusercontent.com/anyicastillo/Analisis_Titanic/refs/heads/main/Titanic-Dataset.csv", stringsAsFactors = FALSE)

# Ver estructura inicial
cat("Dimensiones del dataset:", dim(titanic_data), "\n")
## Dimensiones del dataset: 891 12
cat("Variables disponibles:", names(titanic_data), "\n\n")
## Variables disponibles: PassengerId Survived Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked
# Mostrar primeras filas
head(titanic_data) %>% kable() %>% kable_styling(bootstrap_options = "striped")
PassengerId Survived Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked
1 0 3 Braund, Mr. Owen Harris male 22 1 0 A/5 21171 7.2500 S
2 1 1 Cumings, Mrs. John Bradley (Florence Briggs Thayer) female 38 1 0 PC 17599 71.2833 C85 C
3 1 3 Heikkinen, Miss. Laina female 26 0 0 STON/O2. 3101282 7.9250 S
4 1 1 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35 1 0 113803 53.1000 C123 S
5 0 3 Allen, Mr. William Henry male 35 0 0 373450 8.0500 S
6 0 3 Moran, Mr. James male NA 0 0 330877 8.4583 Q
# Información básica del dataset
str(titanic_data)
## 'data.frame':    891 obs. of  12 variables:
##  $ PassengerId: int  1 2 3 4 5 6 7 8 9 10 ...
##  $ Survived   : int  0 1 1 1 0 0 0 0 1 1 ...
##  $ Pclass     : int  3 1 3 1 3 3 1 3 3 2 ...
##  $ Name       : chr  "Braund, Mr. Owen Harris" "Cumings, Mrs. John Bradley (Florence Briggs Thayer)" "Heikkinen, Miss. Laina" "Futrelle, Mrs. Jacques Heath (Lily May Peel)" ...
##  $ Sex        : chr  "male" "female" "female" "female" ...
##  $ Age        : num  22 38 26 35 35 NA 54 2 27 14 ...
##  $ SibSp      : int  1 1 0 1 0 0 0 3 0 1 ...
##  $ Parch      : int  0 0 0 0 0 0 0 1 2 0 ...
##  $ Ticket     : chr  "A/5 21171" "PC 17599" "STON/O2. 3101282" "113803" ...
##  $ Fare       : num  7.25 71.28 7.92 53.1 8.05 ...
##  $ Cabin      : chr  "" "C85" "" "C123" ...
##  $ Embarked   : chr  "S" "C" "S" "S" ...
summary(titanic_data)
##   PassengerId       Survived          Pclass          Name          
##  Min.   :  1.0   Min.   :0.0000   Min.   :1.000   Length:891        
##  1st Qu.:223.5   1st Qu.:0.0000   1st Qu.:2.000   Class :character  
##  Median :446.0   Median :0.0000   Median :3.000   Mode  :character  
##  Mean   :446.0   Mean   :0.3838   Mean   :2.309                     
##  3rd Qu.:668.5   3rd Qu.:1.0000   3rd Qu.:3.000                     
##  Max.   :891.0   Max.   :1.0000   Max.   :3.000                     
##                                                                     
##      Sex                 Age            SibSp           Parch       
##  Length:891         Min.   : 0.42   Min.   :0.000   Min.   :0.0000  
##  Class :character   1st Qu.:20.12   1st Qu.:0.000   1st Qu.:0.0000  
##  Mode  :character   Median :28.00   Median :0.000   Median :0.0000  
##                     Mean   :29.70   Mean   :0.523   Mean   :0.3816  
##                     3rd Qu.:38.00   3rd Qu.:1.000   3rd Qu.:0.0000  
##                     Max.   :80.00   Max.   :8.000   Max.   :6.0000  
##                     NA's   :177                                     
##     Ticket               Fare           Cabin             Embarked        
##  Length:891         Min.   :  0.00   Length:891         Length:891        
##  Class :character   1st Qu.:  7.91   Class :character   Class :character  
##  Mode  :character   Median : 14.45   Mode  :character   Mode  :character  
##                     Mean   : 32.20                                        
##                     3rd Qu.: 31.00                                        
##                     Max.   :512.33                                        
## 
# Crear copia del dataset para análisis
df <- titanic_data

# Renombrar variables en español
df <- df %>%
  rename(
    Sobrevivio = Survived,
    Sexo = Sex,
    Edad = Age,
    Clase = Pclass
  )

# Convertir variables categóricas
df <- df %>%
  mutate(
    Sobrevivio = factor(Sobrevivio, levels = c(0, 1), labels = c("No", "Sí")),
    Sexo = factor(Sexo, levels = c("male", "female"), labels = c("Hombre", "Mujer")),
    Clase = factor(Clase, levels = c(1, 2, 3), labels = c("Primera", "Segunda", "Tercera"))
  )

# Crear grupos etarios
df <- df %>%
  mutate(
    Grupo_Edad = case_when(
      Edad < 12 ~ "Niño (0-11)",
      Edad >= 12 & Edad < 18 ~ "Adolescente (12-17)",
      Edad >= 18 & Edad < 60 ~ "Adulto (18-59)",
      Edad >= 60 ~ "Adulto Mayor (60+)",
      is.na(Edad) ~ "Edad Desconocida"
    ),
    Grupo_Edad = factor(Grupo_Edad, 
                       levels = c("Niño (0-11)", "Adolescente (12-17)", "Adulto (18-59)", 
                                 "Adulto Mayor (60+)", "Edad Desconocida"))
  )

# Verificar transformaciones
cat("Resumen después del preprocesamiento:\n")
## Resumen después del preprocesamiento:
table(df$Sobrevivio) %>% kable() %>% kable_styling()
Var1 Freq
No 549
342
# Análisis de supervivencia global
superv_global <- df %>%
  count(Sobrevivio) %>%
  mutate(Porcentaje = round(n/sum(n)*100, 2))

cat("Distribución de Supervivencia Global:\n")
## Distribución de Supervivencia Global:
superv_global %>% kable() %>% kable_styling()
Sobrevivio n Porcentaje
No 549 61.62
342 38.38
# Gráfico de supervivencia global
ggplot(superv_global, aes(x = Sobrevivio, y = n, fill = Sobrevivio)) +
  geom_bar(stat = "identity") +
  geom_text(aes(label = paste0(n, " (", Porcentaje, "%)")), vjust = -0.5) +
  labs(title = "Distribución de Supervivencia en el Titanic",
       x = "Sobrevivió", y = "Número de Pasajeros") +
  theme_minimal() +
  scale_fill_manual(values = c("No" = "#e74c3c", "Sí" = "#2ecc71"))

# Análisis de distribución por sexo
dist_sexo <- df %>%
  count(Sexo) %>%
  mutate(Porcentaje = round(n/sum(n)*100, 2))

cat("Distribución por Sexo:\n")
## Distribución por Sexo:
dist_sexo %>% kable() %>% kable_styling()
Sexo n Porcentaje
Hombre 577 64.76
Mujer 314 35.24
# Gráfico de distribución por sexo
ggplot(dist_sexo, aes(x = Sexo, y = n, fill = Sexo)) +
  geom_bar(stat = "identity") +
  geom_text(aes(label = paste0(n, " (", Porcentaje, "%)")), vjust = -0.5) +
  labs(title = "Distribución de Pasajeros por Sexo",
       x = "Sexo", y = "Número de Pasajeros") +
  theme_minimal() +
  scale_fill_manual(values = c("Hombre" = "#3498db", "Mujer" = "#e91e63"))

# Análisis descriptivo de edad
estadisticas_edad <- df %>%
  summarise(
    Media = mean(Edad, na.rm = TRUE),
    Mediana = median(Edad, na.rm = TRUE),
    Desviacion = sd(Edad, na.rm = TRUE),
    Minimo = min(Edad, na.rm = TRUE),
    Maximo = max(Edad, na.rm = TRUE),
    NA_count = sum(is.na(Edad))
  )

cat("Estadísticas Descriptivas de la Edad:\n")
## Estadísticas Descriptivas de la Edad:
estadisticas_edad %>% kable() %>% kable_styling()
Media Mediana Desviacion Minimo Maximo NA_count
29.69912 28 14.5265 0.42 80 177
# Histograma de edades
ggplot(df, aes(x = Edad)) +
  geom_histogram(binwidth = 5, fill = "#9b59b6", alpha = 0.7, color = "white") +
  labs(title = "Distribución de Edades en el Titanic",
       x = "Edad", y = "Frecuencia") +
  theme_minimal()

# Análisis de grupos etarios
dist_etaria <- df %>%
  count(Grupo_Edad) %>%
  mutate(Porcentaje = round(n/sum(n)*100, 2))

cat("Distribución por Grupos Etarios:\n")
## Distribución por Grupos Etarios:
dist_etaria %>% kable() %>% kable_styling()
Grupo_Edad n Porcentaje
Niño (0-11) 68 7.63
Adolescente (12-17) 45 5.05
Adulto (18-59) 575 64.53
Adulto Mayor (60+) 26 2.92
Edad Desconocida 177 19.87
# Gráfico de grupos etarios
ggplot(dist_etaria, aes(x = Grupo_Edad, y = n, fill = Grupo_Edad)) +
  geom_bar(stat = "identity") +
  geom_text(aes(label = paste0(n, " (", Porcentaje, "%)")), vjust = -0.5, size = 3) +
  labs(title = "Distribución de Pasajeros por Grupos Etarios",
       x = "Grupo de Edad", y = "Número de Pasajeros") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

# Tabla de contingencia: Supervivencia vs Sexo
tabla_sexo <- table(df$Sexo, df$Sobrevivio)
prop_sexo <- prop.table(tabla_sexo, margin = 1) * 100

cat("Tabla de Contingencia: Supervivencia por Sexo\n")
## Tabla de Contingencia: Supervivencia por Sexo
tabla_sexo %>% kable() %>% kable_styling()
No
Hombre 468 109
Mujer 81 233
cat("\nPorcentajes por Fila (Sexo):\n")
## 
## Porcentajes por Fila (Sexo):
prop_sexo %>% round(2) %>% kable() %>% kable_styling()
No
Hombre 81.11 18.89
Mujer 25.80 74.20
# Gráfico de supervivencia por sexo
df %>%
  count(Sexo, Sobrevivio) %>%
  group_by(Sexo) %>%
  mutate(Porcentaje = n/sum(n)*100) %>%
  ggplot(aes(x = Sexo, y = Porcentaje, fill = Sobrevivio)) +
  geom_bar(stat = "identity", position = "dodge") +
  geom_text(aes(label = paste0(round(Porcentaje, 1), "%")), 
            position = position_dodge(width = 0.9), vjust = -0.5) +
  labs(title = "Tasa de Supervivencia por Sexo",
       x = "Sexo", y = "Porcentaje", fill = "Sobrevivió") +
  theme_minimal() +
  scale_fill_manual(values = c("No" = "#e74c3c", "Sí" = "#2ecc71"))

# Tabla de contingencia: Supervivencia vs Grupo de Edad
tabla_edad <- table(df$Grupo_Edad, df$Sobrevivio)
prop_edad <- prop.table(tabla_edad, margin = 1) * 100

cat("Tabla de Contingencia: Supervivencia por Grupo de Edad\n")
## Tabla de Contingencia: Supervivencia por Grupo de Edad
tabla_edad %>% kable() %>% kable_styling()
No
Niño (0-11) 29 39
Adolescente (12-17) 23 22
Adulto (18-59) 353 222
Adulto Mayor (60+) 19 7
Edad Desconocida 125 52
cat("\nPorcentajes por Fila (Grupo de Edad):\n")
## 
## Porcentajes por Fila (Grupo de Edad):
prop_edad %>% round(2) %>% kable() %>% kable_styling()
No
Niño (0-11) 42.65 57.35
Adolescente (12-17) 51.11 48.89
Adulto (18-59) 61.39 38.61
Adulto Mayor (60+) 73.08 26.92
Edad Desconocida 70.62 29.38
# Gráfico de supervivencia por grupos etarios
df %>%
  count(Grupo_Edad, Sobrevivio) %>%
  group_by(Grupo_Edad) %>%
  mutate(Porcentaje = n/sum(n)*100) %>%
  ggplot(aes(x = Grupo_Edad, y = Porcentaje, fill = Sobrevivio)) +
  geom_bar(stat = "identity", position = "dodge") +
  geom_text(aes(label = paste0(round(Porcentaje, 1), "%")), 
            position = position_dodge(width = 0.9), vjust = -0.5, size = 3) +
  labs(title = "Tasa de Supervivencia por Grupo de Edad",
       x = "Grupo de Edad", y = "Porcentaje", fill = "Sobrevivió") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
  scale_fill_manual(values = c("No" = "#e74c3c", "Sí" = "#2ecc71"))

# Análisis combinado de sexo y grupos etarios
analisis_combinado <- df %>%
  group_by(Sexo, Grupo_Edad) %>%
  summarise(
    Total = n(),
    Sobrevivientes = sum(Sobrevivio == "Sí"),
    Tasa_Supervivencia = round(Sobrevivientes/Total * 100, 2),
    .groups = 'drop'
  )

cat("Análisis Combinado: Sexo y Grupo de Edad\n")
## Análisis Combinado: Sexo y Grupo de Edad
analisis_combinado %>% kable() %>% kable_styling()
Sexo Grupo_Edad Total Sobrevivientes Tasa_Supervivencia
Hombre Niño (0-11) 36 20 55.56
Hombre Adolescente (12-17) 22 3 13.64
Hombre Adulto (18-59) 373 67 17.96
Hombre Adulto Mayor (60+) 22 3 13.64
Hombre Edad Desconocida 124 16 12.90
Mujer Niño (0-11) 32 19 59.38
Mujer Adolescente (12-17) 23 19 82.61
Mujer Adulto (18-59) 202 155 76.73
Mujer Adulto Mayor (60+) 4 4 100.00
Mujer Edad Desconocida 53 36 67.92
# Heatmap de supervivencia
ggplot(analisis_combinado, aes(x = Sexo, y = Grupo_Edad, fill = Tasa_Supervivencia)) +
  geom_tile(color = "white") +
  geom_text(aes(label = paste0(Tasa_Supervivencia, "%")), color = "white", size = 4) +
  scale_fill_gradient(low = "#e74c3c", high = "#2ecc71", name = "Tasa de\nSupervivencia (%)") +
  labs(title = "Mapa de Calor: Tasa de Supervivencia por Sexo y Grupo de Edad",
       x = "Sexo", y = "Grupo de Edad") +
  theme_minimal()

# Estadísticas de edad por grupo de supervivencia
estadisticas_edad_superv <- df %>%
  group_by(Sobrevivio) %>%
  summarise(
    n = n(),
    Media_Edad = mean(Edad, na.rm = TRUE),
    Mediana_Edad = median(Edad, na.rm = TRUE),
    SD_Edad = sd(Edad, na.rm = TRUE),
    Min_Edad = min(Edad, na.rm = TRUE),
    Max_Edad = max(Edad, na.rm = TRUE),
    .groups = 'drop'
  )

cat("Estadísticas de Edad por Estado de Supervivencia:\n")
## Estadísticas de Edad por Estado de Supervivencia:
estadisticas_edad_superv %>% kable(digits = 2) %>% kable_styling()
Sobrevivio n Media_Edad Mediana_Edad SD_Edad Min_Edad Max_Edad
No 549 30.63 28 14.17 1.00 74
342 28.34 28 14.95 0.42 80
# Boxplot de edades por supervivencia
ggplot(df, aes(x = Sobrevivio, y = Edad, fill = Sobrevivio)) +
  geom_boxplot(alpha = 0.7) +
  labs(title = "Distribución de Edades por Estado de Supervivencia",
       x = "Sobrevivió", y = "Edad") +
  theme_minimal() +
  scale_fill_manual(values = c("No" = "#e74c3c", "Sí" = "#2ecc71"))

# Definir grupo "mujeres y niños"
df <- df %>%
  mutate(
    Mujer_Niño = ifelse(Sexo == "Mujer" | Grupo_Edad == "Niño (0-11)", "Mujer o Niño", "Hombre Adulto/Adolescente"),
    Mujer_Niño = factor(Mujer_Niño)
  )

# Análisis del protocolo
analisis_protocolo <- df %>%
  group_by(Mujer_Niño) %>%
  summarise(
    Total = n(),
    Sobrevivientes = sum(Sobrevivio == "Sí"),
    Tasa_Supervivencia = round(Sobrevivientes/Total * 100, 2),
    .groups = 'drop'
  )

cat("Análisis del Protocolo 'Mujeres y Niños Primero':\n")
## Análisis del Protocolo 'Mujeres y Niños Primero':
analisis_protocolo %>% kable() %>% kable_styling()
Mujer_Niño Total Sobrevivientes Tasa_Supervivencia
Hombre Adulto/Adolescente 541 89 16.45
Mujer o Niño 350 253 72.29
# Gráfico comparativo
ggplot(analisis_protocolo, aes(x = Mujer_Niño, y = Tasa_Supervivencia, fill = Mujer_Niño)) +
  geom_bar(stat = "identity") +
  geom_text(aes(label = paste0(Tasa_Supervivencia, "%")), vjust = -0.5) +
  labs(title = "Tasa de Supervivencia: Protocolo 'Mujeres y Niños Primero'",
       x = "Categoría", y = "Tasa de Supervivencia (%)") +
  theme_minimal() +
  ylim(0, 100) +
  scale_fill_manual(values = c("Mujer o Niño" = "#2ecc71", "Hombre Adulto/Adolescente" = "#e74c3c"))

<img src=“index_files/figure-html/Análisis de”Mujeres y Niños Primero”-1.png” width=“672” />

# Cálculo de métricas clave
resumen_final <- list(
  "Tasa Supervivencia Global" = paste0(round(mean(df$Sobrevivio == "Sí") * 100, 1), "%"),
  "Tasa Supervivencia Mujeres" = paste0(round(prop_sexo[2,2], 1), "%"),
  "Tasa Supervivencia Hombres" = paste0(round(prop_sexo[1,2], 1), "%"),
  "Tasa Supervivencia Niños" = paste0(round(prop_edad[1,2], 1), "%"),
  "Tasa Supervivencia Mujeres/Niños" = paste0(analisis_protocolo$Tasa_Supervivencia[1], "%"),
  "Ratio Mujeres/Hombres" = paste0(round(prop_sexo[2,2] / prop_sexo[1,2], 1), ":1")
)

cat("RESUMEN EJECUTIVO - ANÁLISIS DE SUPERVIVENCIA TITANIC\n\n")
## RESUMEN EJECUTIVO - ANÁLISIS DE SUPERVIVENCIA TITANIC
for(i in seq_along(resumen_final)) {
  cat(names(resumen_final)[i], ":", resumen_final[[i]], "\n")
}
## Tasa Supervivencia Global : 38.4% 
## Tasa Supervivencia Mujeres : 74.2% 
## Tasa Supervivencia Hombres : 18.9% 
## Tasa Supervivencia Niños : 57.4% 
## Tasa Supervivencia Mujeres/Niños : 16.45% 
## Ratio Mujeres/Hombres : 3.9:1