Limpieza

library(readr)
library(dplyr)

# Cargar dataset
titanic <- read_csv("titanicV2020-2.csv")

# Eliminar columnas innecesarias
titanic <- titanic %>%
  select(-PassengerId, -Name, -Ticket, -Cabin)

# Imputar valores faltantes
titanic$Age[is.na(titanic$Age)] <- mean(titanic$Age, na.rm = TRUE)
titanic$Fare[is.na(titanic$Fare)] <- mean(titanic$Fare, na.rm = TRUE)

# Eliminar filas con NA restantes (Embarked)
titanic <- na.omit(titanic)

# Recode Sex (0 = male, 1 = female)
titanic$Sex <- ifelse(titanic$Sex == "male", 0, 1)

# Recode Embarked (C=1, Q=2, S=3)
titanic$Embarked <- recode(titanic$Embarked,
                           "C" = 1,
                           "Q" = 2,
                           "S" = 3)

# Ver nuevas dimensiones
dim(titanic)
## [1] 1307    8

Carry out a numerical summary

#Previsualización
head(titanic)
#Resumen estadístico
summary(titanic)
##     Survived          Pclass           Sex             Age       
##  Min.   :0.0000   Min.   :1.000   Min.   :0.000   Min.   : 0.17  
##  1st Qu.:0.0000   1st Qu.:2.000   1st Qu.:0.000   1st Qu.:22.00  
##  Median :0.0000   Median :3.000   Median :0.000   Median :29.88  
##  Mean   :0.3764   Mean   :2.297   Mean   :0.355   Mean   :29.85  
##  3rd Qu.:1.0000   3rd Qu.:3.000   3rd Qu.:1.000   3rd Qu.:35.00  
##  Max.   :1.0000   Max.   :3.000   Max.   :1.000   Max.   :80.00  
##      SibSp            Parch             Fare            Embarked    
##  Min.   :0.0000   Min.   :0.0000   Min.   :  0.000   Min.   :1.000  
##  1st Qu.:0.0000   1st Qu.:0.0000   1st Qu.:  7.896   1st Qu.:2.000  
##  Median :0.0000   Median :0.0000   Median : 14.454   Median :3.000  
##  Mean   :0.4996   Mean   :0.3856   Mean   : 33.224   Mean   :2.493  
##  3rd Qu.:1.0000   3rd Qu.:0.0000   3rd Qu.: 31.275   3rd Qu.:3.000  
##  Max.   :8.0000   Max.   :9.0000   Max.   :512.329   Max.   :3.000

Observaciones:

El dataset muestra que la supervivencia está desbalanceada, la mayoría de los pasajeros eran hombres adultos en 3ª clase, viajaban solos y con tarifas bajas. Los grupos minoritarios (mujeres, 1ª clase, tarifas altas) probablemente tengan una mayor tasa de supervivencia, lo que vale la pena analizar en los próximos pasos.

Correlation analysis

library(ggcorrplot)
## Loading required package: ggplot2
# Seleccionar solo columnas numéricas
titanic_num <- titanic %>% select(where(is.numeric))

# Calcular matriz de correlación
cor_matrix <- cor(titanic_num, use = "pairwise.complete.obs")

# Mostrar matriz redondeada
round(cor_matrix, 3)
##          Survived Pclass    Sex    Age  SibSp  Parch   Fare Embarked
## Survived    1.000 -0.262  0.688 -0.052  0.003  0.110  0.232   -0.137
## Pclass     -0.262  1.000 -0.122 -0.364  0.060  0.017 -0.558    0.187
## Sex         0.688 -0.122  1.000 -0.061  0.111  0.214  0.184   -0.099
## Age        -0.052 -0.364 -0.061  1.000 -0.190 -0.130  0.170   -0.073
## SibSp       0.003  0.060  0.111 -0.190  1.000  0.373  0.161    0.066
## Parch       0.110  0.017  0.214 -0.130  0.373  1.000  0.222    0.045
## Fare        0.232 -0.558  0.184  0.170  0.161  0.222  1.000   -0.239
## Embarked   -0.137  0.187 -0.099 -0.073  0.066  0.045 -0.239    1.000
# Heatmap de correlaciones
ggcorrplot(cor_matrix,
           hc.order = TRUE,
           type = "lower",
           lab = TRUE,
           lab_size = 3,
           outline.color = "white",
           ggtheme = ggplot2::theme_minimal(),
           colors = c("#4575b4", "white", "#d73027")) +
  ggplot2::labs(title = "Titanic - Correlation Heatmap")

Observaciones:

El análisis muestra que las variables más asociadas a la supervivencia son el sexo y la clase socioeconómica (Pclass/Fare). Esto coincide con la política histórica de “women and children first” y con el acceso preferencial de los pasajeros de primera clase a los botes salvavidas.

Create scatterplots for all variable pairs.

# Solo columnas numéricas
titanic_num <- titanic %>% dplyr::select(where(is.numeric))

# Matriz de dispersión con suavizado
panel.smooth2 <- function(x, y, ...) {
  points(x, y, pch = 16, cex = 0.7, col = rgb(0,0,0,0.4))
  lines(stats::lowess(x, y, f = 2/3, iter = 3), lwd = 2)
}

pairs(titanic_num,
      pch = 16,
      cex = 0.6,
      col = rgb(0,0,0,0.35),
      lower.panel = panel.smooth2,
      upper.panel = NULL,
      main = "Scatterplots: todas las variables numéricas")

Observaciones

Los scatterplots confirman que la supervivencia estuvo muy influenciada por el sexo, la clase y la tarifa. Las variables de estructura familiar (SibSp, Parch) aportan cierta información, pero menos determinante. La edad por sí sola no explica bien la supervivencia, aunque puede tener efecto en interacción con otras variables.

What are the most relevant variables associated with survival? Why?

Los resultados muestran que las variables más relevantes asociadas con la supervivencia fueron el sexo y la clase socioeconómica (Pclass/Fare). El sexo tuvo la correlación más fuerte, evidenciando que las mujeres tuvieron muchas más probabilidades de sobrevivir debido a la política de “women and children first”. Asimismo, los pasajeros de primera clase, que pagaron tarifas más altas, tuvieron mayor acceso a los botes salvavidas en comparación con los de tercera clase. Las variables familiares (SibSp y Parch) mostraron asociaciones más débiles, pero en algunos casos brindaron ventajas al viajar acompañados. La edad, en cambio, no presentó una relación fuerte de manera aislada, aunque pudo influir en combinación con otros factores, como la prioridad otorgada a los niños pequeños.