Teoría

La regresión logística es un modelo estadístico de clasificación binaria, que estima la probabilidad de que ocurra un evento (valor 1) frente a que no ocurra (valor 0), en función de variables independientes.

Instalar paquetes y llamar librerías

#install.packages("titanic")
library(titanic)
#install.packages("caret")
library(caret)
## Cargando paquete requerido: ggplot2
## Cargando paquete requerido: lattice
#install.packages("tidyverse")
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.2.0     ✔ readr     2.1.6
## ✔ forcats   1.0.1     ✔ stringr   1.6.0
## ✔ lubridate 1.9.5     ✔ tibble    3.3.1
## ✔ purrr     1.2.1     ✔ tidyr     1.3.2
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ✖ purrr::lift()   masks caret::lift()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors

Crear la base de datos

df <- read.csv("C:\\Users\\eveyu\\Downloads\\concentración\\m2_R\\titanic.csv")

Entender la base de datos

summary(df)
##      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
str(df)
## 'data.frame':    1310 obs. of  14 variables:
##  $ pclass   : int  1 1 1 1 1 1 1 1 1 1 ...
##  $ survived : int  1 1 0 0 0 1 1 0 1 0 ...
##  $ name     : chr  "Allen, Miss. Elisabeth Walton" "Allison, Master. Hudson Trevor" "Allison, Miss. Helen Loraine" "Allison, Mr. Hudson Joshua Creighton" ...
##  $ sex      : chr  "female" "male" "female" "male" ...
##  $ age      : num  29 0.917 2 30 25 ...
##  $ sibsp    : int  0 1 1 1 1 0 1 0 2 0 ...
##  $ parch    : int  0 2 2 2 2 0 0 0 0 0 ...
##  $ ticket   : chr  "24160" "113781" "113781" "113781" ...
##  $ fare     : num  211 152 152 152 152 ...
##  $ cabin    : chr  "B5" "C22 C26" "C22 C26" "C22 C26" ...
##  $ embarked : chr  "S" "S" "S" "S" ...
##  $ boat     : chr  "2" "11" "" "" ...
##  $ body     : int  NA NA NA 135 NA NA NA NA NA 22 ...
##  $ home.dest: chr  "St Louis, MO" "Montreal, PQ / Chesterville, ON" "Montreal, PQ / Chesterville, ON" "Montreal, PQ / Chesterville, ON" ...
df <- df[, c("survived", "pclass","sex","age")]
df <- na.omit(df)
df$survived <- as.factor(df$survived)
df$pclass <- as.factor(df$pclass)
df$sex <- as.factor(df$sex)

Crear el modelo

modelo <- glm(survived ~ ., data=df, family=binomial)
summary(modelo)
## 
## Call:
## glm(formula = survived ~ ., family = binomial, data = df)
## 
## Coefficients:
##              Estimate Std. Error z value Pr(>|z|)    
## (Intercept)  3.522074   0.326702  10.781  < 2e-16 ***
## pclass2     -1.280570   0.225538  -5.678 1.36e-08 ***
## pclass3     -2.289661   0.225802 -10.140  < 2e-16 ***
## sexmale     -2.497845   0.166037 -15.044  < 2e-16 ***
## age         -0.034393   0.006331  -5.433 5.56e-08 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 1414.62  on 1045  degrees of freedom
## Residual deviance:  982.45  on 1041  degrees of freedom
## AIC: 992.45
## 
## Number of Fisher Scoring iterations: 4

Probar el modelo

prueba <- data.frame(pclass=as.factor(c(1,3)), sex=as.factor(c("female","male")),age=c(25,40))
probabilidad <- predict(modelo, newdata=prueba, type="response")
cbind(prueba, Probabilidad_Sobrevive=probabilidad)
##   pclass    sex age Probabilidad_Sobrevive
## 1      1 female  25             0.93476160
## 2      3   male  40             0.06653593

Conclusiones

Todas las variables incluidas (pclass2, pclass3, sexmale y age) resultaron altamente significativas, lo que indica que aportan información importante para predecir la supervivencia.

Al interpretar los coeficientes, se observa que ser hombre (sexmale) y viajar en segunda o tercera clase (pclass2, pclass3) reduce significativamente la probabilidad de sobrevivir, siendo el efecto más fuerte el del sexo. Asimismo, la edad tiene un efecto negativo más leve, de manera que los pasajeros mayores tenían menor probabilidad de supervivencia que los más jóvenes. En conjunto, estos resultados reflejan patrones históricos del Titanic, donde las mujeres y los pasajeros de primera clase tenían más probabilidades de sobrevivir, y validan que el modelo captura correctamente las relaciones clave entre las características de los pasajeros y su supervivencia.

Se evaluó el desempeño del modelo usando dos observaciones de prueba. La primera correspondía a un pasajero de primera clase, mujer, 25 años, y el modelo asignó una probabilidad de supervivencia de 0.93, lo que indica que predijo correctamente que sobreviviría. La segunda observación correspondía a un pasajero de tercera clase, hombre, 40 años, para quien el modelo calculó una probabilidad de supervivencia de 0.067, prediciendo correctamente que no sobreviviría. Estos resultados muestran que el modelo captura correctamente los patrones históricos de supervivencia del Titanic.

LS0tDQp0aXRsZTogIlJlZ3Jlc2nDs24gTG9nw61zdGljYSAtIFRpdGFuaWMiDQphdXRob3I6ICJFdmVseW4gUm9kcsOtZ3VleiBZdWRpY2hlIg0KZGF0ZTogIjIwMjYtMDItMTkiDQpvdXRwdXQ6IA0KICBodG1sX2RvY3VtZW50Og0KICAgIHRvYzogVFJVRQ0KICAgIHRvY19mbG9hdDogVFJVRQ0KICAgIGNvZGVfZG93bmxvYWQ6IFRSVUUNCiAgICB0aGVtZTogYm9vdHN0cmFwDQotLS0NCjxjZW50ZXI+DQohW10oZm90b190aXRhbmljLnBuZykNCg0KIyA8c3BhbiBzdHlsZT0iY29sb3I6Ymx1ZSI+IFRlb3LDrWEgPC9zcGFuPg0KTGEgKipyZWdyZXNpw7NuIGxvZ8Otc3RpY2EqKiBlcyB1biBtb2RlbG8gZXN0YWTDrXN0aWNvIGRlIGNsYXNpZmljYWNpw7NuIGJpbmFyaWEsIHF1ZSBlc3RpbWEgbGEgcHJvYmFiaWxpZGFkIGRlIHF1ZSBvY3VycmEgdW4gZXZlbnRvICh2YWxvciAxKSBmcmVudGUgYSBxdWUgbm8gb2N1cnJhICh2YWxvciAwKSwgZW4gZnVuY2nDs24gZGUgdmFyaWFibGVzIGluZGVwZW5kaWVudGVzLiAgDQoNCiMgPHNwYW4gc3R5bGU9ImNvbG9yOmJsdWUiPiBJbnN0YWxhciBwYXF1ZXRlcyB5IGxsYW1hciBsaWJyZXLDrWFzIDwvc3Bhbj4NCmBgYHtyfQ0KI2luc3RhbGwucGFja2FnZXMoInRpdGFuaWMiKQ0KbGlicmFyeSh0aXRhbmljKQ0KI2luc3RhbGwucGFja2FnZXMoImNhcmV0IikNCmxpYnJhcnkoY2FyZXQpDQojaW5zdGFsbC5wYWNrYWdlcygidGlkeXZlcnNlIikNCmxpYnJhcnkodGlkeXZlcnNlKQ0KYGBgDQoNCiMgPHNwYW4gc3R5bGU9ImNvbG9yOmJsdWUiPiBDcmVhciBsYSBiYXNlIGRlIGRhdG9zIDwvc3Bhbj4NCmBgYHtyfQ0KZGYgPC0gcmVhZC5jc3YoIkM6XFxVc2Vyc1xcZXZleXVcXERvd25sb2Fkc1xcY29uY2VudHJhY2nDs25cXG0yX1JcXHRpdGFuaWMuY3N2IikNCmBgYA0KDQojIDxzcGFuIHN0eWxlPSJjb2xvcjpibHVlIj4gRW50ZW5kZXIgbGEgYmFzZSBkZSBkYXRvcyA8L3NwYW4+DQpgYGB7cn0NCnN1bW1hcnkoZGYpDQpzdHIoZGYpDQpkZiA8LSBkZlssIGMoInN1cnZpdmVkIiwgInBjbGFzcyIsInNleCIsImFnZSIpXQ0KZGYgPC0gbmEub21pdChkZikNCmRmJHN1cnZpdmVkIDwtIGFzLmZhY3RvcihkZiRzdXJ2aXZlZCkNCmRmJHBjbGFzcyA8LSBhcy5mYWN0b3IoZGYkcGNsYXNzKQ0KZGYkc2V4IDwtIGFzLmZhY3RvcihkZiRzZXgpDQpgYGANCg0KIyA8c3BhbiBzdHlsZT0iY29sb3I6Ymx1ZSI+IENyZWFyIGVsIG1vZGVsbyA8L3NwYW4+DQpgYGB7cn0NCm1vZGVsbyA8LSBnbG0oc3Vydml2ZWQgfiAuLCBkYXRhPWRmLCBmYW1pbHk9Ymlub21pYWwpDQpzdW1tYXJ5KG1vZGVsbykNCmBgYA0KDQojIDxzcGFuIHN0eWxlPSJjb2xvcjpibHVlIj4gUHJvYmFyIGVsIG1vZGVsbyA8L3NwYW4+DQpgYGB7cn0NCnBydWViYSA8LSBkYXRhLmZyYW1lKHBjbGFzcz1hcy5mYWN0b3IoYygxLDMpKSwgc2V4PWFzLmZhY3RvcihjKCJmZW1hbGUiLCJtYWxlIikpLGFnZT1jKDI1LDQwKSkNCnByb2JhYmlsaWRhZCA8LSBwcmVkaWN0KG1vZGVsbywgbmV3ZGF0YT1wcnVlYmEsIHR5cGU9InJlc3BvbnNlIikNCmNiaW5kKHBydWViYSwgUHJvYmFiaWxpZGFkX1NvYnJldml2ZT1wcm9iYWJpbGlkYWQpDQpgYGANCg0KIyA8c3BhbiBzdHlsZT0iY29sb3I6Ymx1ZSI+IENvbmNsdXNpb25lcyA8L3NwYW4+DQpUb2RhcyBsYXMgdmFyaWFibGVzIGluY2x1aWRhcyAocGNsYXNzMiwgcGNsYXNzMywgc2V4bWFsZSB5IGFnZSkgcmVzdWx0YXJvbiBhbHRhbWVudGUgc2lnbmlmaWNhdGl2YXMsIGxvIHF1ZSBpbmRpY2EgcXVlIGFwb3J0YW4gaW5mb3JtYWNpw7NuIGltcG9ydGFudGUgcGFyYSBwcmVkZWNpciBsYSBzdXBlcnZpdmVuY2lhLg0KDQpBbCBpbnRlcnByZXRhciBsb3MgY29lZmljaWVudGVzLCBzZSBvYnNlcnZhIHF1ZSBzZXIgaG9tYnJlIChzZXhtYWxlKSB5IHZpYWphciBlbiBzZWd1bmRhIG8gdGVyY2VyYSBjbGFzZSAocGNsYXNzMiwgcGNsYXNzMykgcmVkdWNlIHNpZ25pZmljYXRpdmFtZW50ZSBsYSBwcm9iYWJpbGlkYWQgZGUgc29icmV2aXZpciwgc2llbmRvIGVsIGVmZWN0byBtw6FzIGZ1ZXJ0ZSBlbCBkZWwgc2V4by4gQXNpbWlzbW8sIGxhIGVkYWQgdGllbmUgdW4gZWZlY3RvIG5lZ2F0aXZvIG3DoXMgbGV2ZSwgZGUgbWFuZXJhIHF1ZSBsb3MgcGFzYWplcm9zIG1heW9yZXMgdGVuw61hbiBtZW5vciBwcm9iYWJpbGlkYWQgZGUgc3VwZXJ2aXZlbmNpYSBxdWUgbG9zIG3DoXMgasOzdmVuZXMuIEVuIGNvbmp1bnRvLCBlc3RvcyByZXN1bHRhZG9zIHJlZmxlamFuIHBhdHJvbmVzIGhpc3TDs3JpY29zIGRlbCBUaXRhbmljLCBkb25kZSBsYXMgbXVqZXJlcyB5IGxvcyBwYXNhamVyb3MgZGUgcHJpbWVyYSBjbGFzZSB0ZW7DrWFuIG3DoXMgcHJvYmFiaWxpZGFkZXMgZGUgc29icmV2aXZpciwgeSB2YWxpZGFuIHF1ZSBlbCBtb2RlbG8gY2FwdHVyYSBjb3JyZWN0YW1lbnRlIGxhcyByZWxhY2lvbmVzIGNsYXZlIGVudHJlIGxhcyBjYXJhY3RlcsOtc3RpY2FzIGRlIGxvcyBwYXNhamVyb3MgeSBzdSBzdXBlcnZpdmVuY2lhLg0KDQpTZSBldmFsdcOzIGVsIGRlc2VtcGXDsW8gZGVsIG1vZGVsbyB1c2FuZG8gZG9zIG9ic2VydmFjaW9uZXMgZGUgcHJ1ZWJhLiBMYSBwcmltZXJhIGNvcnJlc3BvbmTDrWEgYSB1biBwYXNhamVybyBkZSBwcmltZXJhIGNsYXNlLCBtdWplciwgMjUgYcOxb3MsIHkgZWwgbW9kZWxvIGFzaWduw7MgdW5hIHByb2JhYmlsaWRhZCBkZSBzdXBlcnZpdmVuY2lhIGRlIDAuOTMsIGxvIHF1ZSBpbmRpY2EgcXVlIHByZWRpam8gY29ycmVjdGFtZW50ZSBxdWUgc29icmV2aXZpcsOtYS4gTGEgc2VndW5kYSBvYnNlcnZhY2nDs24gY29ycmVzcG9uZMOtYSBhIHVuIHBhc2FqZXJvIGRlIHRlcmNlcmEgY2xhc2UsIGhvbWJyZSwgNDAgYcOxb3MsIHBhcmEgcXVpZW4gZWwgbW9kZWxvIGNhbGN1bMOzIHVuYSBwcm9iYWJpbGlkYWQgZGUgc3VwZXJ2aXZlbmNpYSBkZSAwLjA2NywgcHJlZGljaWVuZG8gY29ycmVjdGFtZW50ZSBxdWUgbm8gc29icmV2aXZpcsOtYS4gRXN0b3MgcmVzdWx0YWRvcyBtdWVzdHJhbiBxdWUgZWwgbW9kZWxvIGNhcHR1cmEgY29ycmVjdGFtZW50ZSBsb3MgcGF0cm9uZXMgaGlzdMOzcmljb3MgZGUgc3VwZXJ2aXZlbmNpYSBkZWwgVGl0YW5pYy4NCg0K