Curso de Introducción a R

Trabajo Final

Luis Amagua Obando

2022-05-02

El 15 de abril de 1912, durante su viaje inaugural, el considerado “insumergible” RMS Titanic se hundió después de chocar con un iceberg. Desafortunadamente, no había suficientes botes salvavidas para todos a bordo, lo que resultó en la muerte de 1502 de 2224 pasajeros y tripulantes. Si bien hubo algún elemento de suerte involucrado en la supervivencia, parece que algunos grupos de personas tenían más probabilidades de sobrevivir que otros.

Los datos se pueden descargar desde: link datos

Y el diccionario de las variables en: link diccionario

Datos

Se descargan los datos, y se hara un analisis exploratorio.

##            ï..columna                                   descripcion
## 1          IdPasajero       Código de identificación del pasajero
## 2          Sobrevivio                              Sobrevivió o no
## 3      ClaseDelTicket Se venieron tickets en 1era, 2da o 3era clase
## 4              Nombre                           Apellidos y nombres
## 5              Genero         Male si es hombre, female si es mujer
## 6                Edad                                          Edad
## 7  Hermanos_o_esposas    Número de hermanos más cónyuges a bordo
## 8      Padres_o_hijos           Numero de padres más hijos a bordo
## 9              Ticket                            Número del ticket
## 10      Precio_Ticket                             Precio del ticket
## 11      Numero_Cabina         Número de la cabina donde se alojaba
## 12    Puerto_embarque                            Puerto de Embarque
## [1] "ï..columna"  "descripcion"

Se cambian los nombres de las variables y se recodifican la descripcion para entender de mejor forma.

diccionario
##              variable                                   descripcion
## 1          IdPasajero         Código de identificación del pasajero
## 2          Sobrevivio                               Sobrevivió o no
## 3      ClaseDelTicket Se venieron tickets en 1era, 2da o 3era clase
## 4              Nombre                           Apellidos y nombres
## 5              Genero         Male si es hombre, female si es mujer
## 6                Edad                                          Edad
## 7  Hermanos_o_esposas       Número de hermanos más cónyuges a bordo
## 8      Padres_o_hijos            Numero de padres más hijos a bordo
## 9              Ticket                             Número del ticket
## 10      Precio_Ticket                             Precio del ticket
## 11      Numero_Cabina          Número de la cabina donde se alojaba
## 12    Puerto_embarque                            Puerto de Embarque

limpieza de datos

Analicemos el tipo de dato que se tienen en la data train

str(train)
## '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" ...
## Se tienen 891 observaciones y  12  variables

Valores perdidos

Se identifican los valores perdidos por variable y se representa gráficamente.

missmap(train)

debido a que los missing values representan el 2% de la data total, se procede a eliminarlos.

data1 <- na.omit(train)

se han eliminado las observaciones con los valores perdidos encontrados en el paso anterior.

Se realizan las correcciones de los tipos de datos,

data1$Survived <- as.factor(data1$Survived)
data1$Pclass <- factor(data1$Pclass,order=TRUE, levels = c(3,2,1))
data1$Sex <- as.factor(data1$Sex)
data1$Embarked <- as.factor(data1$Embarked)

Se realiza un analisis de estadistica descriptiva de las variables en la data

summary(data1)
##   PassengerId    Survived Pclass      Name               Sex     
##  Min.   :  1.0   0:424    3:355   Length:714         female:261  
##  1st Qu.:222.2   1:290    2:173   Class :character   male  :453  
##  Median :445.0            1:186   Mode  :character               
##  Mean   :448.6                                                   
##  3rd Qu.:677.8                                                   
##  Max.   :891.0                                                   
##       Age            SibSp            Parch           Ticket         
##  Min.   : 0.42   Min.   :0.0000   Min.   :0.0000   Length:714        
##  1st Qu.:20.12   1st Qu.:0.0000   1st Qu.:0.0000   Class :character  
##  Median :28.00   Median :0.0000   Median :0.0000   Mode  :character  
##  Mean   :29.70   Mean   :0.5126   Mean   :0.4314                     
##  3rd Qu.:38.00   3rd Qu.:1.0000   3rd Qu.:1.0000                     
##  Max.   :80.00   Max.   :5.0000   Max.   :6.0000                     
##       Fare           Cabin           Embarked
##  Min.   :  0.00   Length:714          :  2   
##  1st Qu.:  8.05   Class :character   C:130   
##  Median : 15.74   Mode  :character   Q: 28   
##  Mean   : 34.69                      S:554   
##  3rd Qu.: 33.38                              
##  Max.   :512.33

Observando en resumen anterior se plantean algunas preguntas

¿Qué porcentaje de personas sobrevivio?

d2 <- data.frame(sobrevivio=round(prop.table(table(data1$Survived)),4))
names(d2) <- c("Sobrevivio","%")
d2
##   Sobrevivio      %
## 1          0 0.5938
## 2          1 0.4062

Se tiene que al rededor de 59% de personas sobrevivieron despues del acidente.

¿Que porcentaje de mujeres y hombres estaban en barco?

d1 <- data.frame(sexo=round(prop.table(table(data1$Sex)),4))
names(d1) <- c("genero","%")
d1
##   genero      %
## 1 female 0.3655
## 2   male 0.6345

Se tiene alrededor del 63% de personas del genero masculino abordo del barco

Visualizacion de datos

Para un mejor entendimiento se realizan graficas que permitan describir a los pasajeros abordo del barco.

data_nume <- data1 %>% select(SibSp,Parch,Fare, Age)
# cor(data_nume) # matriz de correlacion
# corrplot(cor(data_nume)) # grafico de correlacion
corrplot.mixed(cor(data_nume),lower = "number", upper="circle", tl.col="black")

La medida o índice de correlación r puede variar entre -1 y +1, y ademas se conoce que:

  • correlación despreciable: r < |0.1|
  • correlación baja: |0.1| < r \(\le\) |0.3|
  • correlación mediana : |0.3| < r \(\le\) |0.5|
  • correlación fuerte o alta: r > |0.5|

Entonces existe una correlación mediana entre las variables numéricas.

Cantidad de personas que han sobrevivido

ggplot(data1, aes(x = Survived, fill=Survived)) +
  geom_bar(width=0.5) +
  geom_text(stat='count', aes(label=stat(count)), vjust=-0.5) +
  xlab("Sobrevivió")+ylab("Conteo")+ggtitle("Diagrama de barras variable: sobrevivió")+
  theme_classic()

ggplot(data1, aes(x = Survived, fill=Sex)) +
 geom_bar(position = position_dodge()) +
 geom_text(stat="count",aes(label=stat(count)), 
           position = position_dodge(width=1), vjust=-0.5)+xlab("Sobrevivió")+ylab("Conteo")+ggtitle("Sobrevivir de acuerdo al sexo")+
 theme_classic()

Se puede observar que sobrevivió un número muy reducido de personas y en ellas sobrevivió un mayor número de mujeres que de hombres.

ggplot(data1, aes(x = Survived, fill=Pclass)) +
 geom_bar(position = position_dodge()) +
 geom_text(stat="count", 
           aes(label=stat(count)), 
           position = position_dodge(width=1), 
           vjust=-0.5)+xlab("Sobrevivió")+ylab("Conteo")+ggtitle("Sobrevivir por Pclass")+
 theme_classic()

Para analizar si sobrevive por edad, se realiza una discretizacion d ela variable edad, en este caso se van agrupar por deciles, es decir, considerando grupos de edades de la siguiente forma:

  • [0,10)

  • [10,20)

  • [20,30)

y asi sicesivamente.

data1$Discret.edad = cut(data1$Age, c(0,10,20,30,40,50,60,70,80,100))

#grafica 
ggplot(data1, aes(x = Discret.edad, fill=Survived)) +
  geom_bar(position = position_dodge()) +
  geom_text(stat='count', aes(label=stat(count)), position = position_dodge(width=1), vjust=-0.5)+xlab("Rango de edad")+ylab("Conteo")+ggtitle("Sobrevivir por rango de edad")+
  theme_classic()

table(data1$Embarked)
## 
##       C   Q   S 
##   2 130  28 554
ggplot(data1,aes(Embarked,fill=Survived))+geom_bar(position="dodge2")+theme_classic()

data1 %>% 
  ggplot() +
  aes(Age, Fare, color =Survived) +
  geom_point() +
  xlab("Edad") +
  ylab("Precio Ticket") +
  ggtitle("Gráfico de dispersión de la Edad vs Precio")+
  theme_classic()

modelizacion

abrboles de desicion

logitic

naive bayes