# Librerías
library(readr)
library(ggplot2)
library(dplyr)
library(corrplot)
library(gridExtra)
# Cargar datos
titanic = read.table("titanic.csv", stringsAsFactors = TRUE, sep=",", header=TRUE)

# Resumen
head(titanic)
## PassengerId Survived Pclass
## 1 1 0 3
## 2 2 1 1
## 3 3 1 3
## 4 4 1 1
## 5 5 0 3
## 6 6 0 3
## Name Sex Age SibSp Parch
## 1 Braund, Mr. Owen Harris male 22 1 0
## 2 Cumings, Mrs. John Bradley (Florence Briggs Thayer) female 38 1 0
## 3 Heikkinen, Miss. Laina female 26 0 0
## 4 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35 1 0
## 5 Allen, Mr. William Henry male 35 0 0
## 6 Moran, Mr. James male NA 0 0
## Ticket Fare Cabin Embarked
## 1 A/5 21171 7.2500 S
## 2 PC 17599 71.2833 C85 C
## 3 STON/O2. 3101282 7.9250 S
## 4 113803 53.1000 C123 S
## 5 373450 8.0500 S
## 6 330877 8.4583 Q
str(titanic)
## '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 : Factor w/ 891 levels "Abbing, Mr. Anthony",..: 109 191 358 277 16 559 520 629 417 581 ...
## $ Sex : Factor w/ 2 levels "female","male": 2 1 1 1 2 2 2 2 1 1 ...
## $ 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 : Factor w/ 681 levels "110152","110413",..: 524 597 670 50 473 276 86 396 345 133 ...
## $ Fare : num 7.25 71.28 7.92 53.1 8.05 ...
## $ Cabin : Factor w/ 148 levels "","A10","A14",..: 1 83 1 57 1 1 131 1 1 1 ...
## $ Embarked : Factor w/ 4 levels "","C","Q","S": 4 2 4 4 4 3 4 4 4 2 ...
summary(titanic)
## PassengerId Survived Pclass
## Min. : 1.0 Min. :0.0000 Min. :1.000
## 1st Qu.:223.5 1st Qu.:0.0000 1st Qu.:2.000
## Median :446.0 Median :0.0000 Median :3.000
## 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
##
## Name Sex Age
## Abbing, Mr. Anthony : 1 female:314 Min. : 0.42
## Abbott, Mr. Rossmore Edward : 1 male :577 1st Qu.:20.12
## Abbott, Mrs. Stanton (Rosa Hunt) : 1 Median :28.00
## Abelson, Mr. Samuel : 1 Mean :29.70
## Abelson, Mrs. Samuel (Hannah Wizosky): 1 3rd Qu.:38.00
## Adahl, Mr. Mauritz Nils Martin : 1 Max. :80.00
## (Other) :885 NA's :177
## SibSp Parch Ticket Fare
## Min. :0.000 Min. :0.0000 1601 : 7 Min. : 0.00
## 1st Qu.:0.000 1st Qu.:0.0000 347082 : 7 1st Qu.: 7.91
## Median :0.000 Median :0.0000 CA. 2343: 7 Median : 14.45
## Mean :0.523 Mean :0.3816 3101295 : 6 Mean : 32.20
## 3rd Qu.:1.000 3rd Qu.:0.0000 347088 : 6 3rd Qu.: 31.00
## Max. :8.000 Max. :6.0000 CA 2144 : 6 Max. :512.33
## (Other) :852
## Cabin Embarked
## :687 : 2
## B96 B98 : 4 C:168
## C23 C25 C27: 4 Q: 77
## G6 : 4 S:644
## C22 C26 : 3
## D : 3
## (Other) :186
# Varianza y desviación estándar
var(titanic$Age, na.rm=TRUE); sd(titanic$Age, na.rm=TRUE)
## [1] 211.0191
## [1] 14.5265
var(titanic$Fare, na.rm=TRUE); sd(titanic$Fare, na.rm=TRUE)
## [1] 2469.437
## [1] 49.69343
var(titanic$SibSp, na.rm=TRUE); sd(titanic$SibSp, na.rm=TRUE)
## [1] 1.216043
## [1] 1.102743
var(titanic$Parch, na.rm=TRUE); sd(titanic$Parch, na.rm=TRUE)
## [1] 0.6497282
## [1] 0.8060572
# Media, CV, asimetría y curtosis para Age
mean(titanic$Age, na.rm=TRUE)
## [1] 29.69912
(sd(titanic$Age, na.rm=TRUE) / mean(titanic$Age, na.rm=TRUE)) * 100
## [1] 48.91222
age = titanic$Age[!is.na(titanic$Age)]
z_age = (age - mean(age)) / sd(age)
mean(z_age^3) # Asimetría
## [1] 0.3874744
mean(z_age^4) - 3 # Curtosis
## [1] 0.1597671
# Histogramas
hist(titanic$Age, col="tan", main="Histograma de Edad", xlab="Edad (años)")

hist(titanic$Fare, col="lightblue", main="Histograma de Tarifa", xlab="Tarifa (£)")

# Barras
barplot(table(titanic$Sex), col="magenta", main="Pasajeros por sexo")

barplot(table(titanic$Pclass), col=c("navy","blue","skyblue"), main="Pasajeros por clase")

barplot(table(titanic$Embarked), col=c("green","pink","red"), main="Pasajeros por puerto")

# Diagramas de caja
boxplot(titanic$Age, col="orange", main="Caja Edad")

boxplot(titanic$Fare, col="gold", main="Caja Tarifa")

boxplot(titanic$Age ~ titanic$Sex, col=c("grey","coral"), main="Edad según sexo")

boxplot(titanic$Fare ~ titanic$Pclass, col=c("green","pink","red"), main="Tarifa según clase")

boxplot(titanic$Age ~ titanic$Embarked, col=c("purple","lightblue","cyan"), main="Edad según puerto")

# Panel de gráficos
g1 = ggplot(titanic, aes(x=Age)) + geom_histogram(fill="tan", bins=30, na.rm=TRUE)
g2 = ggplot(titanic, aes(x=factor(Pclass), y=Fare, fill=factor(Pclass))) + geom_boxplot(na.rm=TRUE)
g3 = ggplot(titanic, aes(x=Sex, fill=factor(Survived))) + geom_bar(position="fill") +
scale_fill_manual(values=c("red","green"), labels=c("No","Sí"))
g4 = ggplot(titanic, aes(x=Embarked, y=Age, fill=Embarked)) + geom_boxplot(na.rm=TRUE)
grid.arrange(g1, g2, g3, g4, ncol=2)

# Actividad 2
# 1) Dos cuantitativas
cor(titanic$Age, titanic$Fare, use="complete.obs")
## [1] 0.09606669
ggplot(titanic, aes(x=Age, y=Fare)) + geom_jitter(colour="blue") +
geom_smooth(method="lm", colour="red") + labs(title="Edad vs Tarifa")
## `geom_smooth()` using formula = 'y ~ x'
## Warning: Removed 177 rows containing non-finite outside the scale range
## (`stat_smooth()`).
## Warning: Removed 177 rows containing missing values or values outside the scale range
## (`geom_point()`).

modelo_AgeFare = lm(Fare ~ Age, data=titanic); summary(modelo_AgeFare)
##
## Call:
## lm(formula = Fare ~ Age, data = titanic)
##
## Residuals:
## Min 1Q Median 3Q Max
## -42.42 -24.49 -17.60 2.33 475.78
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 24.3009 4.4922 5.410 8.64e-08 ***
## Age 0.3500 0.1359 2.575 0.0102 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 52.71 on 712 degrees of freedom
## (177 observations deleted due to missingness)
## Multiple R-squared: 0.009229, Adjusted R-squared: 0.007837
## F-statistic: 6.632 on 1 and 712 DF, p-value: 0.01022
numTitanic = titanic[, c("Age","Fare","SibSp","Parch")]
R = cor(numTitanic, use="pairwise.complete.obs"); corrplot(R, method="number")

cor(titanic$SibSp, titanic$Parch, use="complete.obs")
## [1] 0.4148377
ggplot(titanic, aes(x=SibSp, y=Parch)) + geom_jitter(colour="green") +
geom_smooth(method="lm", colour="orange") + labs(title="SibSp vs Parch")
## `geom_smooth()` using formula = 'y ~ x'

modelo_SibParch = lm(Parch ~ SibSp, data=titanic); summary(modelo_SibParch)
##
## Call:
## lm(formula = Parch ~ SibSp, data = titanic)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.133 -0.223 -0.223 -0.223 5.474
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.22300 0.02721 8.195 8.7e-16 ***
## SibSp 0.30323 0.02231 13.594 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.7338 on 889 degrees of freedom
## Multiple R-squared: 0.1721, Adjusted R-squared: 0.1712
## F-statistic: 184.8 on 1 and 889 DF, p-value: < 2.2e-16
# 2) Una cuantitativa + una cualitativa
ggplot(titanic, aes(x=factor(Pclass), y=Fare, fill=factor(Pclass))) +
geom_boxplot() + labs(title="Tarifa por clase")

ggplot(titanic, aes(x=Sex, y=Age, fill=Sex)) +
geom_boxplot() + labs(title="Edad por sexo")
## Warning: Removed 177 rows containing non-finite outside the scale range
## (`stat_boxplot()`).

# 3) Dos cualitativas
ggplot(titanic, aes(x=Sex, fill=factor(Survived))) +
geom_bar() + labs(title="Supervivencia por sexo")

ggplot(titanic, aes(x=factor(Pclass), fill=factor(Survived))) +
geom_bar() + labs(title="Supervivencia por clase")

punto 1 - Actividad 1
Descripción del conjunto de datos
Conjunto de datos:
Esta base contiene información detallada sobre los pasajeros que
viajaban a bordo del Titanic en su viaje inaugural de 1912,
incluyendo variables demográficas (edad, sexo), socioeconómicas
(clase del boleto, tarifa pagada) y relacionadas con su supervivencia
durante el hundimiento.
Tamaño de Muestra:
El archivo utilizado “titanic.csv” cuenta con:
- 891 observaciones (filas), cada una correspondiente a un pasajero
diferente del Titanic.
- 12 variables (columnas) que describen características personales,
socioeconómicas y el resultado (si sobrevivió o no).
Lo cual nos muestra que se está trabajando con un conjunto de datos
bastante amplio para cumplir el análisis descriptivo completo.
Número y tipo de variables:
En total tenemos 12 variables de datos que se clasifican así:
- PassengerId: Pasajeros a bordo del Titanic.
- Survived: Estado de supervivencia.
- Pclass: Clase del ticket.
- Name: Nombre completo del pasajero.
- Sex: Género del pasajero.
- Age: Edad en años.
- SibSp: Número de hermanos/esposos a bordo.
- Parch: Número de padres/hijos a bordo.
- Ticket: Número de tiquete.
- Fare: Tarifa pagada por el boleto.
- Cabin: Cabina asignada.
- Embarked: Puerto de embarque.
Punto 3 - Actividad 1
Revisar Inconsistencias
Age (Edad):
Presenta 177 valores faltantes.
Cabin (Cabina):
Más del 70% de los datos están faltantes (solo 204 de 891 registros
tienen información).
Embarked (Puerto de embarque):
2 registros sin dato.
Fare (Tarifa):
1 caso con valor cero; puede considerarse un error atípico.
PassengerId, Name, Ticket:
No presentan errores de digitación (son variables de
identificación).
Estrategias de Limpieza
Imputación de valores faltantes en Age:
Se reemplazaron los valores faltantes por la mediana de la edad, ya
que la distribución es asimétrica y la mediana es más robusta frente a
outliers.
Tratamiento de Embarked:
Los 2 valores faltantes se imputaron con la moda (el valor más
frecuente, que corresponde al puerto Southampton (S)).
Fare (Tarifa):
Se mantuvieron los valores, pero se recomienda considerar los
outliers (tarifas extremadamente altas) en el análisis descriptivo y
gráfico, ya que generan sesgos.
Punto 5 - Actividad 1
Análisis de Variables Cuantitativas (Histogramas)
Edad (Age):
La mayoría de los pasajeros tenía entre 20 y 40 años.
El histograma muestra una distribución concentrada en adultos
jóvenes, con pocos casos en edades extremas (niños pequeños y adultos
mayores).
Tarifa (Fare):
La mayoría de las tarifas se concentran por debajo de 50
libras.
Hay valores atípicos que superan las 500 libras, evidenciando la
gran desigualdad económica entre pasajeros.
Análisis de Variables Categóricas (Diagrama de Cajas)
Sexo:
Se observa un mayor número de hombres (~65%) que de mujeres
(~35%).
Clase (Pclass):
La tercera clase es la más numerosa, seguida de la primera y
segunda.
Esto refleja la distribución socioeconómica de los pasajeros.
Puerto de embarque (Embarked):
La mayoría de pasajeros embarcó en Southampton (S), seguido por
Cherbourg (C) y finalmente Queenstown (Q).
Análisis de Variables Cuantitativas (Diagrama de cajas)
Edad:
Los valores de edad están mayormente entre 20 y 40 años, con algunos
outliers en niños y ancianos.
Tarifa:
Se observa gran dispersión, especialmente en la primera clase.
La tercera clase concentra tarifas mucho más bajas y
homogéneas.
Edad vs Sexo:
La distribución de la edad es similar entre hombres y mujeres, sin
diferencias marcadas.
Edad vs Puerto de embarque:
La mediana de edad es similar en los tres puertos, aunque Cherbourg
muestra más variabilidad.
Tarifa vs Clase:
Claramente las tarifas fueron más altas en la primera clase y más
bajas en la tercera, con outliers en primera clase.
Punto 1 - Actividad 2
Dos variables cuantitativas
Edad vs Tarifa
La correlación entre estas dos es muy baja, lo que indica que no hay
relación entre cuánto pagó un pasajero y su edad.
Este supuesto es correcto ya que nos dice que la tarifa dependía más
de la clase del boleto que de la edad de la persona.
Además, confirmamos esto al ver en el modelo lineal una pendiente
positiva muy pequeña.
SibSp vs Parch
En esta la correlación fue moderada, lo que nos dice que los que
viajaban con hermanos/esposos también solían ir acompañados de padres o
hijos.
El modelo lineal refleja esto, al estar asociado que a mayor número
de familias, mayor probabilidad de tener la otra.
Esto nos indica que había varios grupos familiares viajando
juntos.
Punto 2 - Actividad 2
Una cuantitativa y una cualitativa
Tarifa por Clase
Las tarifas nos muestran diferencias claras según la clase.
Los de primera clase pagaron tarifas más altas mientras que los de
tercera clase pagaron precios más bajos y justos,
lo que nos da a entender que había una gran desigualdad
económica.
Edad por Sexo
El diagrama nos muestra que tanto hombres como mujeres tenían una
edad similar de más o menos 30 años,
pero en las mujeres varía más la edad, mientras que en los hombres
hay más jóvenes adultos, siendo más homogéneo.
Punto 3 - Actividad 2
Dos variables cualitativas
Sexo y Supervivencia
El gráfico nos demuestra que las mujeres tuvieron una tasa de
supervivencia mayor que la de los hombres,
dándonos a entender que la prioridad eran los niños y las
mujeres.
Clase y Supervivencia
La clase de boleto también tuvo bastante influencia en la
supervivencia,
ya que los de primera clase sobrevivieron más que los de tercera
clase, de los cuales la mayoría murió.
Esto nos da a entender que hubo una desigualdad en el rescate por
medio de la clase.
Punto 4 - Actividad 2
Análisis de Serie Temporal
El conjunto de datos del Titanic no corresponde a una serie
temporal,
ya que no mide variables en función del tiempo,
por lo tanto no es posible aplicar modelos de pronóstico.
Conclusión
El análisis bivariado muestra que las variables cualitativas como el
sexo y la clase del boleto fueron factores determinantes en la
supervivencia,
mientras que las variables numéricas como la edad o la tarifa no
muestran una relación directa.
Además, se evidencia la importancia de los lazos familiares, ya que
varios pasajeros viajaban en grupos,
lo cual influyó en la composición de quienes sobrevivieron o
no.