El primer paso, importar el archvio .csv
df <- read.csv("/Users/gerardorodarte/Desktop/ITESM/Tercer semestre/Bootcamp Programación/Actividad 4/titanic.csv")
Imprimir un resumen para observar los valores y variables de la Base de Datos
resumen <- summary(df)
resumen
## pclass survived name sex
## Min. :1.000 Min. :0.000 Length:1310 Length:1310
## 1st Qu.:2.000 1st Qu.:0.000 Class :character Class :character
## Median :3.000 Median :0.000 Mode :character Mode :character
## Mean :2.295 Mean :0.382
## 3rd Qu.:3.000 3rd Qu.:1.000
## Max. :3.000 Max. :1.000
## NA's :1 NA's :1
## age sibsp parch ticket
## Min. : 0.1667 Min. :0.0000 Min. :0.000 Length:1310
## 1st Qu.:21.0000 1st Qu.:0.0000 1st Qu.:0.000 Class :character
## Median :28.0000 Median :0.0000 Median :0.000 Mode :character
## Mean :29.8811 Mean :0.4989 Mean :0.385
## 3rd Qu.:39.0000 3rd Qu.:1.0000 3rd Qu.:0.000
## Max. :80.0000 Max. :8.0000 Max. :9.000
## NA's :264 NA's :1 NA's :1
## fare cabin embarked boat
## Min. : 0.000 Length:1310 Length:1310 Length:1310
## 1st Qu.: 7.896 Class :character Class :character Class :character
## Median : 14.454 Mode :character Mode :character Mode :character
## Mean : 33.295
## 3rd Qu.: 31.275
## Max. :512.329
## NA's :2
## body home.dest
## Min. : 1.0 Length:1310
## 1st Qu.: 72.0 Class :character
## Median :155.0 Mode :character
## Mean :160.8
## 3rd Qu.:256.0
## Max. :328.0
## NA's :1189
Filtramos la base de datos para utilizar solo aquellos que queremos
Titanic <- df[,c("pclass","age", "sex", "survived")]
Volvemos algunas variables a factores
Titanic$survived <- as.factor (ifelse(Titanic$survived==0, "Murió", "Sobrevivió"))
Titanic$pclass <- as.factor(Titanic$pclass)
Titanic$sex <- as.factor(Titanic$sex)
str(Titanic)
## 'data.frame': 1310 obs. of 4 variables:
## $ pclass : Factor w/ 3 levels "1","2","3": 1 1 1 1 1 1 1 1 1 1 ...
## $ age : num 29 0.917 2 30 25 ...
## $ sex : Factor w/ 3 levels "","female","male": 2 3 2 3 2 3 2 3 2 3 ...
## $ survived: Factor w/ 2 levels "Murió","Sobrevivió": 2 2 1 1 1 2 2 1 2 1 ...
Eliminamos los NA de nuestras variables para que no nos afecten
sum(is.na(Titanic))
## [1] 266
Titanic <- na.omit(Titanic)
Instalamos rpart y creamos el arbol de decisión
# install.packages("rpart")
library(rpart)
arbol <- rpart (formula = survived ~., data = Titanic)
arbol
## n= 1046
##
## node), split, n, loss, yval, (yprob)
## * denotes terminal node
##
## 1) root 1046 427 Murió (0.59177820 0.40822180)
## 2) sex=male 658 135 Murió (0.79483283 0.20516717)
## 4) age>=9.5 615 110 Murió (0.82113821 0.17886179) *
## 5) age< 9.5 43 18 Sobrevivió (0.41860465 0.58139535)
## 10) pclass=3 29 11 Murió (0.62068966 0.37931034) *
## 11) pclass=1,2 14 0 Sobrevivió (0.00000000 1.00000000) *
## 3) sex=female 388 96 Sobrevivió (0.24742268 0.75257732)
## 6) pclass=3 152 72 Murió (0.52631579 0.47368421)
## 12) age>=1.5 145 66 Murió (0.54482759 0.45517241) *
## 13) age< 1.5 7 1 Sobrevivió (0.14285714 0.85714286) *
## 7) pclass=1,2 236 16 Sobrevivió (0.06779661 0.93220339) *
Utilizamos el paquete rpart.plot
#install.packages("rpart.plot")
library(rpart.plot)
rpart.plot(arbol)
Para una mayor comodidad eliminamos los porcentajes
prp(arbol, extra=7, prefix="fracción\n")
De esta Base de Datos y de estos gráficos podemos concluir que, en el Titanic, la 1ª clase tuvo enormes beneficios al compararlos con los de la 3ª clase, entre ellos, las probabilidades de sobrevivir, tan solo en los diagramas se expresa que los niños de primera clase de 9.5 años o menos tenían el 100% de probabilidad de salvarse, mientras que los de 3ª clase tenían solo el 38% de probabilidades.
Por otra parte, se puede concluir que, efectivamente, fueron mujeres y niños primero, esto lo podemos comprobar en el diagrama debido a que se puede observar que las mujeres que eran de 3ª clase tuvieron 93% de probabilidades de sobrevivir, esto sin importar que no fueran de primera clase, y que los niños, aun siendo de 3ª clase, tuvieron 38% de probabilidades de sobrevivir, probabilidad mayor a la de los hombres mayores de 9.5 años (18%).