Problema 2 Considere los datos “titanic.csv”, sobre la tragedia del Titanic. Una descripción detallada de las variables puede ser consultada en el siguiente link: https://www.kaggle.com/c/titanic/data.

(1)

  1. Cargue el conjunto de datos en la sesión de trabajo de R.
tabla<-read.csv("titanic.csv")
tabla<-data.frame(tabla)

(2)

  1. Usando la función summary(), obtenga estadísticos descriptivos de las variables y discuta los resultados.
summary(tabla)
##   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                   
##  Embarked          Title    
##  C   :168   Master    : 40  
##  Q   : 77   Miss      :185  
##  S   :644   Mr        :517  
##  NA's:  2   Mrs       :126  
##             Rare Title: 23  
##                             
## 

(3)

  1. Cree una variable que indique el tamaño total de la familia del pasajero (incluyéndose él mismo).
#según mi consideración, la familia esta contemplada por "sibsp+parch", y para lograr incluir al pasajero se sumará 1

#sibsp             # de hermanos / cónyuges a bordo del Titanic 
#parch             # de padres / hijos a bordo del Titanic  
#PASAJERO = 1     

#CREAREMOS LA NUEVA VARIABLE TTF= TAMAÑO TOTAL FAMILIA

names(tabla) #observar los nombres de las variables
##  [1] "PassengerId" "Survived"    "Pclass"      "Name"        "Sex"        
##  [6] "Age"         "SibSp"       "Parch"       "Ticket"      "Fare"       
## [11] "Embarked"    "Title"
str(tabla) #ver el contenido con mas detalle
## '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 ...
##  $ Embarked   : Factor w/ 3 levels "C","Q","S": 3 1 3 3 3 2 3 3 3 1 ...
##  $ Title      : Factor w/ 5 levels "Master","Miss",..: 3 4 2 4 3 3 3 1 4 4 ...
hermanosconyuges<-head(tabla$SibSp)
padreshijos<-head(tabla$Parch)


tabla$TTF<- tabla$SibSp+tabla$Parch+1

 #la nueva variable
head(tabla$TTF, 20) #MUESTRA LOS PRIMEROS 20 VALORES DE LA VARIABLE TTF
##  [1] 2 2 1 2 1 1 1 5 3 2 3 1 1 7 1 1 6 1 2 1
summary(tabla$TTF)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   1.000   1.000   1.000   1.905   2.000  11.000

(4)

  1. Grafique la relación entre la tasa de sobrevivientes y el tamaño de la familia.
#donde STTF= RELACION ENTRE SOBREVIVIENTES Y TAMAÑO DE FAMILIA
#STTF$proporcion = (tabla$TTF, tabla$Survived)=0/((tabla$TTF, tabla$Survived)=1+(tabla$TTF, tabla$Survived)=0)

STTF<-table(tabla$TTF, tabla$Survived)

STTF<-data.frame("0"=STTF[,1],"1"=STTF[,2])

STTF$proporcion<-(STTF$X1/(STTF$X1+STTF$X0))

MUERE<-(STTF$X0)
VIVE<-(STTF$X1)

MUEREVIVE<-data.frame(MUERE,VIVE)

summary(STTF)
##        X0            X1        proporcion    
##  Min.   :  6   Min.   :  0   Min.   :0.0000  
##  1st Qu.:  8   1st Qu.:  3   1st Qu.:0.1364  
##  Median : 12   Median :  4   Median :0.3035  
##  Mean   : 61   Mean   : 38   Mean   :0.3143  
##  3rd Qu.: 43   3rd Qu.: 59   3rd Qu.:0.5528  
##  Max.   :374   Max.   :163   Max.   :0.7241
plot(MUERE, type = "o", ylim = c(0, max(MUERE, VIVE)), col = "RED")  ## EL PLOT IMPRIME CON UNA VARIABLE "MUERE" Y LA UNE CON LA VARIABLE "VIVE"
lines(VIVE, type = "o", lty = 2, col = "BLUE")  ## ESTA VARIABLE SE SUMA AL PLOT ANTERIOR, AGREGANDO ASI LA VARIABLE "VIVE"

#SEGÚN EL GRÁFICO ANTERIOR PODEMOS CONCLUIR QUE, LOS GRUPOS FAMILIARES COMPUESTOS DE 2 A 4 INTEGRANTES TIENEN MAYOR PROBABILIDAD DE SOBREVIVIR A LA CATASTROFE. 

(5)

  1. En base a lo observado en el punto anterior, proponga e implemente la discretización del tamaño de la familia. Justifique su decisión.
#SE DIVIDIRÁN POR CATEGORIAS     1= PROB ALTA DE MUERE,    [2,4]= PROB DE SOBREVIVIR,     >=5 PROB DE MUERTE

#SE CREA EL NUEVO DATA.FRAME CON LAS TRES CATEGORIAS QUE SE OBSERVARON EN EL PUNTO ANTERIOR

tabla$DISfamilia[tabla$TTF == 1] <- 1
tabla$DISfamilia[tabla$TTF < 5 & tabla$TTF > 1] <- 2
tabla$DISfamilia[tabla$TTF > 4] <- 3

v<-data.frame(tabla$DISfamilia,tabla$TTF, MUEREVIVE$MUERE, MUEREVIVE$VIVE) #NUEVO DATA.FRAME CON DISCRETIZACION



#GRAFICAMENTE SE PUEDE MOSTRAR LA DISCRETIZACIÓN POR EL MÉTODO DEL ÁRBOL

library(rpart)       # performing regression trees
library(rpart.plot)  # plotting regression trees
library(ipred)       # bagging
library(caret)       # bagging
## Loading required package: lattice
## Loading required package: ggplot2
m1 <- rpart(
  formula = tabla$DISfamilia ~ .,
  data    = v,
  method  = "anova"
  )


rpart.plot(m1)

(6)

  1. IdentiÖque los pasajeros con datos faltantes para la variable embarked y age usando la funciÛn is.na(). Qué tipo de mecanismo de generaciÛn de datos faltantes podrÌa ser valido en cada caso? Justifique su respuesta.
######CASO 1 = EMBARKED  SE OBSERVAN SOLO 2 DATOS CON NA, POR LO QUE SE PODRÍAN ELIMINAR DE LA TABLA.

   na_embarked <- tabla[is.na(tabla$Embarked),]
   
   
   #proceso para eliminar filas NA
   na_embarked2<-data.frame(na_embarked)
   
   na_embarked2[!is.na(na_embarked$Embarked),]
######CASO 2 = "AGE" SE OBSERVA GRAN CANTIDAD DE NA, EXISTEN DOS OPCIONES LA PRIMERA ES ELIMINAR LA VAIABLE EN CASO DE NO PRESENTAR GRAN UTILIDAD, LA SEGUNDA ES USAR ALGÚN MÉTODO PARA DAR UN VALOR A NA.
   
   na_age <- tabla[is.na(tabla$Age),]
   
   
   #PRIMERO CONTAREMOS LOS NULOS POR COLUMNA
   
   sapply(na_age, function(x) sum(is.na(x)))  #se encuentran 177 nulos de 891 datos
## PassengerId    Survived      Pclass        Name         Sex         Age 
##           0           0           0           0           0         177 
##       SibSp       Parch      Ticket        Fare    Embarked       Title 
##           0           0           0           0           0           0 
##         TTF  DISfamilia 
##           0           0
   summary(na_age$Age)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
##      NA      NA      NA     NaN      NA      NA     177
     # Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
     # NA      NA      NA     NaN      NA      NA     177 
   
   #Existen demasiados NA 177, se debe ver otro método que simplemente repetir la media.
   
   tablaage<-tabla$Age
   tg<-data.frame(tablaage)
      #ahora se eliminaran todas las filas con valor nulo para limpiar los datos y que sirvan para realizar calculos
datostg <- na.omit(tg)

     summary(datostg)
##     tablaage    
##  Min.   : 0.42  
##  1st Qu.:20.12  
##  Median :28.00  
##  Mean   :29.70  
##  3rd Qu.:38.00  
##  Max.   :80.00
     #      tablaage    
     #Min.   : 0.42  
     #1st Qu.:20.12  ***
     #Median :28.00  ****
     #Mean1   :29.70  ****
     #3rd Qu.:38.00  ***
     #Max.   :80.00 
     
         valorgenerado<-sample(20:38,177,replace=T) #SE GENERAN NUMEROS ALEATORIOS ENTRE EL 1ER Y 3ER QUINTIL QUE LUEGO SE REEEMPLAZARÁN POR LOS NA
         
         
              tg[is.na(tg)] <- valorgenerado #OPERATORIA DE REEMPLAZO DE NA POR VALORES GENERADOS
              
                   TABLAAGE_ARREGLADA<-data.frame(tg)
                  
                
     summary(TABLAAGE_ARREGLADA)
##     tablaage    
##  Min.   : 0.42  
##  1st Qu.:22.00  
##  Median :29.00  
##  Mean   :29.58  
##  3rd Qu.:36.00  
##  Max.   :80.00
     #      tablaage    
     #Min.   : 0.42  
     #1st Qu.:22.00  ***
     #Median :28.00  ****
     #Mean2   :29.45  ****
     #3rd Qu.:36.00  ***
     #Max.   :80.00  
     
#CONCLUSIÓN CASO 2, EL MÉTODO ANTERIOR ES ACEPTADO YA QUE LAS MEDIAS SON CASI IGUALES MEAN1=29.7 Y MEAN2=29.45

(7)

  1. Genere un conjunto de datos completos al imputar los valores faltantes de la variable embarked por la del puerto C y los valores faltantes de la variable edad por el promedio de edad de los datos observados.
te<-data.frame(tabla$Embarked) #generamos data.frame para mayor comodidad de operación.

sapply(te, function(x) sum(is.na(x))) # contamos el numero de NA que es  NA=2
## tabla.Embarked 
##              2
te[is.na(te)] <- "C"

Cte<-data.frame(te)

sapply(Cte, function(x) sum(is.na(x))) # contamos el numero de NA que es  NA=0 , ASI SE COMPRUEBA QUE LA OPERACIÓN ESTÁ BIEN REALIZADA.
## tabla.Embarked 
##              0
#PARA LA EDAD CONSIDERAMOS LA VARIABLE CREADA EN EL PUNTO (6) TABLAAGE_ARREGLADA, YA QUE ESTÁ REEMPLAZÓ LOS NA EN BASE A LOS CUARTILES, INCLUYENDO UN RANGO ENTRE 20 Y 38 AÑOS, CON UNA MEDIA DE 29.45, MEDIA CERCANA A LA MEDIA INICIAL.

tabla$Age<-TABLAAGE_ARREGLADA
tabla$Embarked<-Cte

 
 View(tabla) #ESTA ES LA NUEVA TABLA CON LOS CAMBIOS REALIZADOS.