# 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:

El conjunto de datos trabajado corresponde al “Titanic – Machine Learning from Disaster” publicado en la página de Kaggle (https://www.kaggle.com/competitions/titanic/data).
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.