Cesar Tinoco Alvarez

Carnet: 13003387

Regresion Logistica Sobre el Titanic

 En el siguiente proyecto realizaremos una prediccion acerca del personal
 del titanic que logro sobrevivir en base a la tarifa que pagaron para 
 poder abordar el barco.
library(ISLR)
library(ggplot2)
library(caret)
## Loading required package: lattice
library(readr)
titanic_data <- read_csv("titanic_data.csv")
## Warning: Missing column names filled in: 'X1' [1]
## Parsed with column specification:
## cols(
##   X1 = col_integer(),
##   PassengerId = col_integer(),
##   Survived = col_integer(),
##   Sex = col_integer(),
##   Age = col_double(),
##   Fare = col_double(),
##   Pclass_1 = col_integer(),
##   Pclass_2 = col_integer(),
##   Pclass_3 = col_integer(),
##   Family_size = col_double(),
##   Title_1 = col_integer(),
##   Title_2 = col_integer(),
##   Title_3 = col_integer(),
##   Title_4 = col_integer(),
##   Emb_1 = col_integer(),
##   Emb_2 = col_integer(),
##   Emb_3 = col_integer()
## )
titanic_data$Age<-titanic_data$Age*100
titanic_data$Age<-round(titanic_data$Age)
titanic_data$Family_size<-titanic_data$Family_size*10
titanic_data$Family_size<-round(titanic_data$Family_size)
titanic_data$Fare<-titanic_data$Fare*100
titanic_data$Fare<-round(titanic_data$Fare)

Definimos el Modelo del DataSet

logit_model<-glm(formula = Survived ~ Fare, data =titanic_data,
               family = binomial(link="logit"))
summary(logit_model)
## 
## Call:
## glm(formula = Survived ~ Fare, family = binomial(link = "logit"), 
##     data = titanic_data)
## 
## Deviance Residuals: 
##     Min       1Q   Median       3Q      Max  
## -2.3657  -0.8992  -0.8730   1.3560   1.5805  
## 
## Coefficients:
##             Estimate Std. Error z value Pr(>|z|)    
## (Intercept) -0.91108    0.10016  -9.096  < 2e-16 ***
## Fare         0.07150    0.01148   6.230 4.67e-10 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 1056.68  on 791  degrees of freedom
## Residual deviance:  999.34  on 790  degrees of freedom
## AIC: 1003.3
## 
## Number of Fisher Scoring iterations: 4

Definicion de Dominio y Probabilidad

domain <- seq(min(titanic_data$Fare), max(titanic_data$Fare),1)

prediction <- predict(object = logit_model,
              newdata = list(Fare = domain),
              type = "response")
plot.logit <- data.frame(domain,prediction)
colnames(plot.logit) <- c("Fare", "Probabilidad")
plot.logit

Gráfica del modelo

ggplot(data = plot.logit, aes(x = Fare, y = Probabilidad)) +
  ggtitle("Regresion Logistica del Titanic") +
  geom_line(color = "red", size = 2) +
  labs(x = "Tarifa") +
  labs(y = "Probabilidad") +
  theme_minimal()

dataframe.train <- titanic_data[1:(0.3*(nrow(titanic_data))), ]

dataframe.test <- titanic_data[(0.3*nrow(titanic_data)) : nrow(titanic_data), ]

logit_model2 <- glm(formula = Survived ~ Fare, data = dataframe.train,
               family = binomial(link = "logit"))

summary(logit_model2)
## 
## Call:
## glm(formula = Survived ~ Fare, family = binomial(link = "logit"), 
##     data = dataframe.train)
## 
## Deviance Residuals: 
##     Min       1Q   Median       3Q      Max  
## -1.4125  -0.8981  -0.8887   1.4505   1.5084  
## 
## Coefficients:
##             Estimate Std. Error z value Pr(>|z|)    
## (Intercept) -0.77688    0.17435  -4.456 8.35e-06 ***
## Fare         0.02577    0.01964   1.312    0.189    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 305.70  on 236  degrees of freedom
## Residual deviance: 303.94  on 235  degrees of freedom
## AIC: 307.94
## 
## Number of Fisher Scoring iterations: 4
prediction2 <- predict(object = logit_model2,
                newdata = dataframe.test,
                type = "response")

dataframe.result <- data.frame(dataframe.test$Fare, Probabilidad=prediction2)
dataframe.result

Resultado de la Prediccion

thresholdresult <- ifelse(dataframe.result$Probabilidad >= 0.5, "Yes", "No")

dataframe.test$Survived <- as.factor(dataframe.test$Survived)
levels(dataframe.test$Survived) <- c("No","Yes")
confusionMatrix(as.factor(thresholdresult), dataframe.test$Survived)
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction  No Yes
##        No  327 210
##        Yes   4  14
##                                           
##                Accuracy : 0.6144          
##                  95% CI : (0.5725, 0.6551)
##     No Information Rate : 0.5964          
##     P-Value [Acc > NIR] : 0.2058          
##                                           
##                   Kappa : 0.0592          
##  Mcnemar's Test P-Value : <2e-16          
##                                           
##             Sensitivity : 0.9879          
##             Specificity : 0.0625          
##          Pos Pred Value : 0.6089          
##          Neg Pred Value : 0.7778          
##              Prevalence : 0.5964          
##          Detection Rate : 0.5892          
##    Detection Prevalence : 0.9676          
##       Balanced Accuracy : 0.5252          
##                                           
##        'Positive' Class : No              
## 

Conclusiones

* Se pudo observar que el modelo tiene un 61.44% de exactitud 
  en la correcta clasificacion de los datos.
  
* Se predijeron correctamente que 327 personas sobrevivieron gracias a la 
  tarifa que pagaron para abordar el titanic.
  
* Se obtuvo una sensibilidad en la clasificacion de los datos, los cuales    
  clasifico como positivos y que en su valor real si eran positivos
  esta sensibilidad fue del 98.79%, clasificando los datos de una muy
  buena manera.
  
* Se obtuvo un 6.25% de especificidad, la cual nos garantiza que el modelo
  nos funciono correctamnete y que los datos en un porcentaje muy alto
  si se lograron clasificar.