Regresión logística

library(pacman)
p_load("DT","xfun","ggplot2", "readr")

Regresión logística

La Regresión Logística Simple, desarrollada por David Cox en 1958, es un método de regresión que permite estimar la probabilidad de una variable cualitativa binaria en función de una variable cuantitativa. Una de las principales aplicaciones de la regresión logística es la de clasificación binaria, en el que las observaciones se clasifican en un grupo u otro dependiendo del valor que tome la variable empleada como predictor. Por ejemplo, clasificar a un individuo desconocido como hombre o mujer en función del tamaño de la mandíbula.

Es importante tener en cuenta que, aunque la regresión logística permite clasificar, se trata de un modelo de regresión que modela el logaritmo de la probabilidad de pertenecer a cada grupo. La asignación final se hace en función de las probabilidades predichas.

La existencia de una relación significativa entre una variable cualitativa con dos niveles y una variable continua se puede estudiar mediante otros test estadísticos tales como t-test o ANOVA (un ANOVA de dos grupos es equivalente al t-test). Sin embargo, la regresión logística permite además calcular la probabilidad de que la variable dependiente pertenezca a cada una de las dos categorías en función del valor que adquiera la variable independiente.

Por qué regresión logística y no lineal?

Si una variable cualitativa con dos niveles se codifica como 1 y 0, matemáticamente es posible ajustar un modelo de regresión lineal por mínimos cuadrados y =β0+β1x . El problema de esta aproximación es que, al tratarse de una recta, para valores extremos del predictor, se obtienen valores de Y menores que 0 o mayores que 1, lo que entra en contradicción con el hecho de que las probabilidades siempre están dentro del rango [0,1].

En el siguiente ejemplo se modela la probabilidad de fraude por impago (default) en función del balance de la cuenta bancaria (balance).

la regresión logística transforma el valor devuelto por la regresión lineal (β0+β1X) empleando una función cuyo resultado está siempre comprendido entre 0 y 1. Existen varias funciones que cumplen esta descripción, una de las más utilizadas es la función logística (también conocida como función sigmoide):

\[ \text{función sigmoide} = \sigma(x) = \dfrac{1}{1 + e^{-x}} \tag{1} \]

Para valores de x muy grandes positivos, el valor de e−x es aproximadamente 0 por lo que el valor de la función sigmoide es 1.

Para valores de x muy grandes negativos, el valor e−x tiende a infinito por lo que el valor de la función sigmoide es 0.

Sustituyendo la x de la ecuación 1 por la función lineal (β0+β1X) se obtiene que:

\[ P(Y=k|X = x)= \frac{1}{1+e^{-(\beta_0+\beta_1X)}} = \]

\[ \frac{1}{\frac{e^{\beta_0+\beta_1X}}{e^{\beta_0+\beta_1X}} + \frac{1}{e^{\beta_0+\beta_1X}}}= \] \[ \frac{1}{\frac{1 + e^{\beta_0+\beta_1X}}{e^{\beta_0+\beta_1X}}}= \]

\[ \frac{e^{\beta_0+\beta_1X}}{1+e^{\beta_0+\beta_1X}} \]

Caso de estudio: Camarones

Se debe determinar la cantidad óptima de comida diaria en la última semana de crecimiento para que los camarones lleguen a tener su peso óptimo de 12 gramos ( 0 = menor a 12 gramos, 1= mayor o igual a 12 gramos)

Importar datos

camarones <- read_csv("camarones.csv")
## Rows: 12 Columns: 2
## -- Column specification --------------------------------------------------------
## Delimiter: ","
## dbl (2): AlimentoDiario, Exito
## 
## i Use `spec()` to retrieve the full column specification for this data.
## i Specify the column types or set `show_col_types = FALSE` to quiet this message.
datatable(camarones)

Se puede Observar que los datos estan etiquetados en exito=1 y fracaso=0 variable categórica “Y” donde si los camarones pesan más de 12 sgramos = 1, si pesan menos de 12 gramos = 0

Tabla de frecuencia de los datos

tabla <- table(camarones$Exito)
tabla
## 
## 0 1 
## 9 3

Según la tabla anterior se presentó que de las 12 cantidades de alimento suministrado, 9 cantidades de alimento hará que los camarones pesen menos de 12 gramos y en 3 cantidades de alimento pesará más de 12 gramos

Viendo esta relación gráficamente

colores <- NULL
colores[camarones$Exito == 0] <- "green"
colores[camarones$Exito == 1] <- "red"
plot(camarones$AlimentoDiario, camarones$Exito, pch=21, bg= colores,
     xlab = "Alimento diario", ylab = "Probabilidad de peso óptimo")
legend("bottomleft", c("Más de 12 gramos", "Menos de 12 gramos"), pch=21, col = c("green", "red")      )

Tomando en cuenta los datos anteriores, es correcto pensar que la cantidad de alimento que se le da diariamente al camaron puede influir en la probabilidad de que pese más de 12 gramos o no

regresion <- glm(Exito ~ AlimentoDiario, data=camarones, family= binomial)
summary(regresion)
## 
## Call:
## glm(formula = Exito ~ AlimentoDiario, family = binomial, data = camarones)
## 
## Deviance Residuals: 
##      Min        1Q    Median        3Q       Max  
## -1.28965  -0.68424  -0.39705  -0.00008   2.00729  
## 
## Coefficients:
##                Estimate Std. Error z value Pr(>|z|)
## (Intercept)    -35.1229    25.8776  -1.357    0.175
## AlimentoDiario   0.1194     0.0901   1.325    0.185
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 13.496  on 11  degrees of freedom
## Residual deviance: 11.311  on 10  degrees of freedom
## AIC: 15.311
## 
## Number of Fisher Scoring iterations: 5

en el modelo de regresión logística la raíz de las desviaciones representa el papel de los residuos:

\[ D_i = \mp \sqrt{-2 [Y_i\log \hat p_i + (1-Y_i)\log(1-\hat p_i)]}, \] donde el signo coincide con el signo de Yi−p̂i . En la salida anterior estas cantidades se denominan deviance residuals.

  • Análisis del modelo

  • Formulación matemática del modelo de regresión logísitca

\[ P(Y=1|X)=\dfrac{e^{15.0429-0.2322x}}{1+e^{15.0429-0.2322x}} \]

En la tabla coeficientes, la temperatura es significativa con pvalor= 0.0320 el cual es menor que el valor de significancia de 0.05. Lo anterior nos permite concluir que la hipoesis nula se rechaza

$ H_0:{1}=0 $ $ H_1:{1} $

Con respecto al intercepto: También es sinificativo dado que p valor= 0.0415< 0.05. Lo que significa que se rechaza la hipotesis nula, que afirma el intercepto es cero. Más aun, significa que bajísimos, lo que demuestra que ambas variables son importantes para explicar la variable dependiente (probabilidad de éxito).

Predicción para valores nuevos con el modelo ajustado

Para representar gráficamente la función logística estimada, calculamos las probabilidades de fallo estimadas (usando el comando predict) para un vector adecuado de nuevas cantidades de alimento diario (entre 270 y 297):

Primero generamos una nueva secuencia de datos, el cula llamaremos datos nuevos

datos_nuevos <-data.frame(AlimentoDiario= seq(270,297,0.1)   )
datos_nuevos
##     AlimentoDiario
## 1            270.0
## 2            270.1
## 3            270.2
## 4            270.3
## 5            270.4
## 6            270.5
## 7            270.6
## 8            270.7
## 9            270.8
## 10           270.9
## 11           271.0
## 12           271.1
## 13           271.2
## 14           271.3
## 15           271.4
## 16           271.5
## 17           271.6
## 18           271.7
## 19           271.8
## 20           271.9
## 21           272.0
## 22           272.1
## 23           272.2
## 24           272.3
## 25           272.4
## 26           272.5
## 27           272.6
## 28           272.7
## 29           272.8
## 30           272.9
## 31           273.0
## 32           273.1
## 33           273.2
## 34           273.3
## 35           273.4
## 36           273.5
## 37           273.6
## 38           273.7
## 39           273.8
## 40           273.9
## 41           274.0
## 42           274.1
## 43           274.2
## 44           274.3
## 45           274.4
## 46           274.5
## 47           274.6
## 48           274.7
## 49           274.8
## 50           274.9
## 51           275.0
## 52           275.1
## 53           275.2
## 54           275.3
## 55           275.4
## 56           275.5
## 57           275.6
## 58           275.7
## 59           275.8
## 60           275.9
## 61           276.0
## 62           276.1
## 63           276.2
## 64           276.3
## 65           276.4
## 66           276.5
## 67           276.6
## 68           276.7
## 69           276.8
## 70           276.9
## 71           277.0
## 72           277.1
## 73           277.2
## 74           277.3
## 75           277.4
## 76           277.5
## 77           277.6
## 78           277.7
## 79           277.8
## 80           277.9
## 81           278.0
## 82           278.1
## 83           278.2
## 84           278.3
## 85           278.4
## 86           278.5
## 87           278.6
## 88           278.7
## 89           278.8
## 90           278.9
## 91           279.0
## 92           279.1
## 93           279.2
## 94           279.3
## 95           279.4
## 96           279.5
## 97           279.6
## 98           279.7
## 99           279.8
## 100          279.9
## 101          280.0
## 102          280.1
## 103          280.2
## 104          280.3
## 105          280.4
## 106          280.5
## 107          280.6
## 108          280.7
## 109          280.8
## 110          280.9
## 111          281.0
## 112          281.1
## 113          281.2
## 114          281.3
## 115          281.4
## 116          281.5
## 117          281.6
## 118          281.7
## 119          281.8
## 120          281.9
## 121          282.0
## 122          282.1
## 123          282.2
## 124          282.3
## 125          282.4
## 126          282.5
## 127          282.6
## 128          282.7
## 129          282.8
## 130          282.9
## 131          283.0
## 132          283.1
## 133          283.2
## 134          283.3
## 135          283.4
## 136          283.5
## 137          283.6
## 138          283.7
## 139          283.8
## 140          283.9
## 141          284.0
## 142          284.1
## 143          284.2
## 144          284.3
## 145          284.4
## 146          284.5
## 147          284.6
## 148          284.7
## 149          284.8
## 150          284.9
## 151          285.0
## 152          285.1
## 153          285.2
## 154          285.3
## 155          285.4
## 156          285.5
## 157          285.6
## 158          285.7
## 159          285.8
## 160          285.9
## 161          286.0
## 162          286.1
## 163          286.2
## 164          286.3
## 165          286.4
## 166          286.5
## 167          286.6
## 168          286.7
## 169          286.8
## 170          286.9
## 171          287.0
## 172          287.1
## 173          287.2
## 174          287.3
## 175          287.4
## 176          287.5
## 177          287.6
## 178          287.7
## 179          287.8
## 180          287.9
## 181          288.0
## 182          288.1
## 183          288.2
## 184          288.3
## 185          288.4
## 186          288.5
## 187          288.6
## 188          288.7
## 189          288.8
## 190          288.9
## 191          289.0
## 192          289.1
## 193          289.2
## 194          289.3
## 195          289.4
## 196          289.5
## 197          289.6
## 198          289.7
## 199          289.8
## 200          289.9
## 201          290.0
## 202          290.1
## 203          290.2
## 204          290.3
## 205          290.4
## 206          290.5
## 207          290.6
## 208          290.7
## 209          290.8
## 210          290.9
## 211          291.0
## 212          291.1
## 213          291.2
## 214          291.3
## 215          291.4
## 216          291.5
## 217          291.6
## 218          291.7
## 219          291.8
## 220          291.9
## 221          292.0
## 222          292.1
## 223          292.2
## 224          292.3
## 225          292.4
## 226          292.5
## 227          292.6
## 228          292.7
## 229          292.8
## 230          292.9
## 231          293.0
## 232          293.1
## 233          293.2
## 234          293.3
## 235          293.4
## 236          293.5
## 237          293.6
## 238          293.7
## 239          293.8
## 240          293.9
## 241          294.0
## 242          294.1
## 243          294.2
## 244          294.3
## 245          294.4
## 246          294.5
## 247          294.6
## 248          294.7
## 249          294.8
## 250          294.9
## 251          295.0
## 252          295.1
## 253          295.2
## 254          295.3
## 255          295.4
## 256          295.5
## 257          295.6
## 258          295.7
## 259          295.8
## 260          295.9
## 261          296.0
## 262          296.1
## 263          296.2
## 264          296.3
## 265          296.4
## 266          296.5
## 267          296.6
## 268          296.7
## 269          296.8
## 270          296.9
## 271          297.0

Cálculo de las nuevas probabilidades

probabilidades_nuevas <- predict(regresion, datos_nuevos, type="response")
probabilidades_nuevas 
##          1          2          3          4          5          6          7 
## 0.05242200 0.05301810 0.05362060 0.05422956 0.05484503 0.05546707 0.05609576 
##          8          9         10         11         12         13         14 
## 0.05673114 0.05737328 0.05802224 0.05867808 0.05934087 0.06001067 0.06068755 
##         15         16         17         18         19         20         21 
## 0.06137156 0.06206276 0.06276124 0.06346704 0.06418023 0.06490089 0.06562907 
##         22         23         24         25         26         27         28 
## 0.06636484 0.06710826 0.06785941 0.06861835 0.06938514 0.07015986 0.07094257 
##         29         30         31         32         33         34         35 
## 0.07173333 0.07253223 0.07333931 0.07415466 0.07497834 0.07581042 0.07665097 
##         36         37         38         39         40         41         42 
## 0.07750006 0.07835775 0.07922413 0.08009924 0.08098318 0.08187600 0.08277778 
##         43         44         45         46         47         48         49 
## 0.08368858 0.08460848 0.08553755 0.08647586 0.08742348 0.08838047 0.08934692 
##         50         51         52         53         54         55         56 
## 0.09032289 0.09130844 0.09230367 0.09330862 0.09432338 0.09534802 0.09638260 
##         57         58         59         60         61         62         63 
## 0.09742720 0.09848188 0.09954672 0.10062180 0.10170717 0.10280291 0.10390909 
##         64         65         66         67         68         69         70 
## 0.10502578 0.10615305 0.10729096 0.10843960 0.10959902 0.11076930 0.11195050 
##         71         72         73         74         75         76         77 
## 0.11314270 0.11434596 0.11556035 0.11678593 0.11802278 0.11927096 0.12053053 
##         78         79         80         81         82         83         84 
## 0.12180157 0.12308413 0.12437829 0.12568410 0.12700164 0.12833096 0.12967212 
##         85         86         87         88         89         90         91 
## 0.13102520 0.13239025 0.13376733 0.13515650 0.13655782 0.13797136 0.13939716 
##         92         93         94         95         96         97         98 
## 0.14083529 0.14228581 0.14374876 0.14522421 0.14671221 0.14821282 0.14972607 
##         99        100        101        102        103        104        105 
## 0.15125204 0.15279076 0.15434229 0.15590668 0.15748396 0.15907420 0.16067744 
##        106        107        108        109        110        111        112 
## 0.16229371 0.16392307 0.16556555 0.16722120 0.16889005 0.17057215 0.17226752 
##        113        114        115        116        117        118        119 
## 0.17397622 0.17569826 0.17743369 0.17918254 0.18094482 0.18272059 0.18450985 
##        120        121        122        123        124        125        126 
## 0.18631264 0.18812899 0.18995890 0.19180241 0.19365953 0.19553029 0.19741469 
##        127        128        129        130        131        132        133 
## 0.19931276 0.20122449 0.20314991 0.20508903 0.20704184 0.20900836 0.21098859 
##        134        135        136        137        138        139        140 
## 0.21298253 0.21499018 0.21701153 0.21904658 0.22109534 0.22315777 0.22523389 
##        141        142        143        144        145        146        147 
## 0.22732366 0.22942708 0.23154414 0.23367480 0.23581906 0.23797688 0.24014824 
##        148        149        150        151        152        153        154 
## 0.24233311 0.24453146 0.24674327 0.24896848 0.25120707 0.25345899 0.25572421 
##        155        156        157        158        159        160        161 
## 0.25800268 0.26029434 0.26259916 0.26491708 0.26724804 0.26959199 0.27194887 
##        162        163        164        165        166        167        168 
## 0.27431861 0.27670116 0.27909644 0.28150439 0.28392493 0.28635798 0.28880348 
##        169        170        171        172        173        174        175 
## 0.29126134 0.29373148 0.29621381 0.29870824 0.30121469 0.30373307 0.30626327 
##        176        177        178        179        180        181        182 
## 0.30880520 0.31135876 0.31392384 0.31650035 0.31908816 0.32168718 0.32429728 
##        183        184        185        186        187        188        189 
## 0.32691836 0.32955029 0.33219294 0.33484621 0.33750996 0.34018406 0.34286838 
##        190        191        192        193        194        195        196 
## 0.34556279 0.34826715 0.35098133 0.35370518 0.35643856 0.35918132 0.36193332 
##        197        198        199        200        201        202        203 
## 0.36469440 0.36746442 0.37024321 0.37303063 0.37582650 0.37863068 0.38144300 
##        204        205        206        207        208        209        210 
## 0.38426328 0.38709137 0.38992709 0.39277027 0.39562074 0.39847832 0.40134284 
##        211        212        213        214        215        216        217 
## 0.40421411 0.40709195 0.40997619 0.41286662 0.41576308 0.41866537 0.42157330 
##        218        219        220        221        222        223        224 
## 0.42448667 0.42740531 0.43032901 0.43325757 0.43619080 0.43912851 0.44207048 
##        225        226        227        228        229        230        231 
## 0.44501653 0.44796645 0.45092004 0.45387708 0.45683739 0.45980074 0.46276695 
##        232        233        234        235        236        237        238 
## 0.46573579 0.46870705 0.47168054 0.47465604 0.47763335 0.48061224 0.48359251 
##        239        240        241        242        243        244        245 
## 0.48657394 0.48955634 0.49253948 0.49552314 0.49850713 0.50149123 0.50447521 
##        246        247        248        249        250        251        252 
## 0.50745888 0.51044202 0.51342441 0.51640585 0.51938612 0.52236502 0.52534232 
##        253        254        255        256        257        258        259 
## 0.52831782 0.53129131 0.53426258 0.53723142 0.54019763 0.54316098 0.54612129 
##        260        261        262        263        264        265        266 
## 0.54907834 0.55203193 0.55498185 0.55792790 0.56086988 0.56380758 0.56674082 
##        267        268        269        270        271 
## 0.56966938 0.57259308 0.57551172 0.57842510 0.58133303

Por defecto esta probabilidad se calcula como: $ log p_{i}/(1-p_{i}) $

Representación gráfica del ajuste:

colores <- NULL
colores[camarones$Exito == 0] <- "green"
colores[camarones$Exito == 1] <- "red"
plot(camarones$AlimentoDiario, camarones$Exito, pch=21, bg= colores,
     xlab = "Alimento diario", ylab = "Probabilidad de peso óptimo")
legend("bottomleft", c("Más de 12 gramos", "Menos de 12 gramos"), pch=21, col = c("green", "red"))
lines(datos_nuevos$AlimentoDiario, probabilidades_nuevas, col ="blue", lwd= 3)

Accidente del transbordador espacial

Descarga este código

xfun::embed_file("A4U1.Rmd")

Download A4U1.Rmd