Regresion Logistica Simple y Multiple
Regresion Logistica Simple y Multiple
Regresion Logistica Simple y Multiple
Tabla de contenidos
Regresión logística simple ............................................................................................................................................. 3
Introducción .................................................................................................................................................................... 3
¿Por qué regresión logística y no lineal? ............................................................................................................ 4
Concepto de ODDS o razón de probabilidad, ratio de ODDS y logaritmo de ODDS ..................... 7
Ajuste del modelo .......................................................................................................................................................... 8
Evaluación del modelo ................................................................................................................................................ 8
Interpretación del modelo ........................................................................................................................................ 9
Condiciones...................................................................................................................................................................... 9
Predicciones ...................................................................................................................................................................10
Convertir probabilidad en clasificación ............................................................................................................10
Ejemplo ............................................................................................................................................................................11
Representación de las observaciones ............................................................................................................12
Generar el modelo de regresión logística ....................................................................................................13
Gráfico del modelo .................................................................................................................................................14
Evaluación del modelo .........................................................................................................................................16
Comparación de clasificación predicha y observaciones .....................................................................18
Conclusión .................................................................................................................................................................19
Regresión logística múltiple........................................................................................................................................20
Idea intuitiva .................................................................................................................................................................20
Ejemplo1 ..........................................................................................................................................................................21
Análisis de las observaciones ............................................................................................................................23
Generar el modelo de regresión logística ....................................................................................................24
Representación gráfica del modelo ................................................................................................................25
Evaluación del modelo .........................................................................................................................................27
Comparación de las predicciones con las observaciones .....................................................................28
Conclusión .................................................................................................................................................................29
Ejemplo2 .........................................................................................................................................................................30
Regresión logística simple y múltiple
Anexos ...................................................................................................................................................................................34
Ajuste por descenso de gradiente ........................................................................................................................34
Bibliografía..........................................................................................................................................................................42
2
Regresión logística simple y múltiple
Introducción
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. Supóngase que se
quiere estudiar la relación entre los niveles de colesterol y los ataques de corazón. Para ello, se
mide el colesterol de un grupo de personas y durante los siguientes 20 años se monitoriza que
individuos han sufrido un ataque. Un t-test entre los niveles de colesterol de las personas que
han sufrido ataque vs las que no lo han sufrido permitiría contrastar la hipótesis de que el
colesterol y los ataques al corazón están asociados. Si además se desea conocer la probabilidad
de que una persona con un determinado nivel de colesterol sufra un infarto en los próximos 20
años, o poder conocer cuánto tiene que reducir el colesterol un paciente para no superar un
50% de probabilidad de padecer un infarto en los próximos 20 años, se tiene que recurrir a la
regresión logística.
3
Regresión logística simple y múltiple
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 𝛽0 + 𝛽1 𝑥. 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].
library(tidyverse)
library(ISLR)
datos <- Default
## default balance
## 1 0 729.5265
## 2 0 817.1804
## 3 0 1073.5492
## 4 0 529.2506
## 5 0 785.6559
## 6 0 919.5885
4
Regresión logística simple y múltiple
Al tratarse de una recta, si por ejemplo, se predice la probabilidad de default para alguien que
tiene un balance de 10000, el valor obtenido es mayor que 1.
## 1
## 1.22353
Para evitar estos problemas, la regresión logística transforma el valor devuelto por la regresión
lineal (𝛽0 + 𝛽1 𝑋) 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):
1
𝐹𝑢𝑛𝑐𝑖ó𝑛 𝑠𝑖𝑔𝑚𝑜𝑖𝑑𝑒 = 𝜎(𝑥) = 1+𝑒 −𝑥 (1)
1 1 1 𝑒 𝛽0 +𝛽1 𝑋
𝑃(𝑌 = 𝑘|𝑋 = 𝑥) = = 𝑒𝛽0+𝛽1𝑋 = 1+𝑒𝛽0 +𝛽1 𝑋
=
1+𝑒 −(𝛽0+𝛽1𝑋) +
1 1+𝑒 𝛽0+𝛽1𝑋
𝑒𝛽0 +𝛽1 𝑋 𝑒𝛽0 +𝛽1 𝑋 𝑒𝛽0 +𝛽1 𝑋
donde 𝑃𝑟(𝑌 = 𝑘|𝑋 = 𝑥) puede interpretarse como: la probabilidad de que la variable cualitativa
Y adquiera el valor k (el nivel de referencia, codificado como 1), dado que el predictor X tiene el
valor x.
5
Regresión logística simple y múltiple
Esta función, puede ajustarse de forma sencilla con métodos de regresión lineal si se emplea su
versión logarítmica, obteniendo lo que se conoce como LOG of ODDs
𝑝(𝑌 = 𝑘|𝑋 = 𝑥)
𝑙𝑛( ) = 𝛽0 + 𝛽1 𝑋
1 − 𝑝(𝑌 = 𝑘|𝑋 = 𝑥)
6
Regresión logística simple y múltiple
Supóngase que la probabilidad de que un evento sea verdadero es de 0.8, por lo que la
probabilidad de evento falso es de 1 - 0.8 = 0.2. Los ODDs o razón de probabilidad de
verdadero se definen como el ratio entre la probabilidad de evento verdadero y la probabilidad
𝑝
de evento falso 𝑞. En este caso los ODDs de verdadero son 0.8 / 0.2 = 4, lo que equivale a decir
que se esperan 4 eventos verdaderos por cada evento falso.
p odds Log(odds)
0.001 0.001001 -6.906755
0.01 0.010101 -4.59512
0.2 0.25 -1.386294
0.3 0.4285714 -0.8472978
0.4 0.6666667 -0.4054651
0.5 1 0
0.6 1.5 0.4054651
0.7 2.333333 0.8472978
0.8 4 1.386294
0.9 9 2.197225
0.999 999 6.906755
0.9999 9999 9.21024
7
Regresión logística simple y múltiple
Una vez obtenida la relación lineal entre el logaritmo de los ODDs y la variable predictora X, se
tienen que estimar los parámetros 𝛽0 y 𝛽1. La combinación óptima de valores será aquella que
tenga la máxima verosimilitud (maximum likelihood ML), es decir el valor de los parámetros
𝛽0 y 𝛽1 con los que se maximiza la probabilidad de obtener los datos observados.
Otra forma para ajustar un modelo de regresión logística es empleando descenso de gradiente.
Si bien este no es el método de optimización más adecuado para resolver la regresión logística,
está muy extendido en el ámbito del machine learning para ajustar otros modelos. En los
Anexos puede encontrarse una implementación completa.
8
Regresión logística simple y múltiple
Wald chi-square: está muy expandido pero pierde precisión con tamaños muestrales
pequeños.
Likelihood ratio: usa la diferencia entre la probabilidad de obtener los valores
observados con el modelo logístico creado y las probabilidades de hacerlo con un
modelo sin relación entre las variables. Para ello, calcula la significancia de la diferencia
de residuos entre el modelo con predictores y el modelo nulo (modelo sin predictores).
El estadístico tiene una distribución chi-cuadrado con grados de libertad equivalentes a
la diferencia de grados de libertad de los dos modelos comparados. Si se compara
respecto al modelo nulo, los grados de libertad equivalen al número de predictores del
modelo generado. En el libro Handbook for biological statistics se recomienda usar
este.
Condiciones
9
Regresión logística simple y múltiple
Predicciones
Una vez estimados los coeficientes del modelo logístico, es posible conocer la probabilidad de
que la variable dependiente pertenezca al nivel de referencia, dado un determinado valor del
predictor. Para ello se emplea la ecuación del modelo:
𝑒 𝛽0 +𝛽1𝑋
𝑝̂ (𝑌 = 1|𝑋) = (2)
1+𝑒 𝛽0+𝛽1𝑋
Más adelante en este documento, se emplea la función glm() con family="binomial" para
ajustar modelos de regresión logística. Esta función predice por defecto el log(ODDs) de la
variable respuesta. Para obtener las probabilidades 𝑃(𝑦 = 1) hay que aplicar la ecuación (2),
^ ^
donde el valor 𝑒 𝛽0 +𝛽1𝑋 es el log(ODDs) devuelto por el modelo. Otra opción es indicar el
argumento type="response" en la función predict().
10
Regresión logística simple y múltiple
Ejemplo
Un estudio quiere establecer un modelo que permita calcular la probabilidad de obtener una
matrícula de honor al final del bachillerato en función de la nota que se ha obtenido en
matemáticas. La variable matrícula está codificada como 0 si no se tiene matrícula y 1 si se
tiene.
## matricula matematicas
## 1 0 41
## 2 0 53
## 3 0 54
## 4 0 47
11
Regresión logística simple y múltiple
Representar las observaciones es útil para intuir si la variable independiente escogida está
relacionada con la variable respuesta y, por lo tanto, puede ser un buen predictor.
library(ggplot2)
table(datos$matricula)
##
## 0 1
## 151 49
Parece existir una diferencia entre la nota de las personas con matrícula y sin matrícula.
12
Regresión logística simple y múltiple
##
## Call:
## glm(formula = matricula ~ matematicas, family = "binomial", data = datos)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -2.0332 -0.6785 -0.3506 -0.1565 2.6143
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -9.79394 1.48174 -6.610 3.85e-11 ***
## matematicas 0.15634 0.02561 6.105 1.03e-09 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 222.71 on 199 degrees of freedom
## Residual deviance: 167.07 on 198 degrees of freedom
## AIC: 171.07
##
## Number of Fisher Scoring iterations: 5
El coeficiente estimado para la intersección es el valor esperado del logaritmo de odds de que
un estudiante obtenga matrícula teniendo un 0 en en matemáticas. Como es de esperar, los
odds son muy bajos 𝑒 −9.793942 = 5.579𝑒 −5, lo que se corresponde con una probabilidad de
𝑒 −9.793942
obtener matrícula de 𝑝 = 1+𝑒 −9.793942 = 5.579𝑒 −5.
Acorde al modelo, el logaritmo de los odds de que un estudiante tenga matrícula está
positivamente relacionado con la puntuación obtenida en matemáticas (coeficiente de
regresión = 0.1563404). Esto significa que, por cada unidad que se incrementa la variable
matemáticas, se espera que el logaritmo de odds de la variable matrícula se incremente en
promedio 0.1563404 unidades. Aplicando la inversa del logaritmo natural (𝑒 0.1563404 = 1.169)
se obtiene que, por cada unidad que se incrementa la variable matemáticas, los odds de obtener
matrícula se incremente en promedio 1.169 unidades. No hay que confundir esto último con
que la probabilidad de matrícula se incremente un 1.169 %.
13
Regresión logística simple y múltiple
Además del valor de las estimaciones de los coeficientes parciales de correlación del modelo, es
conveniente calcular sus correspondientes intervalos de confianza. En el caso de regresión
logística, estos intervalos suelen calcularse empleando el método de profile likelihood (en R es
el método por defecto si se tiene instalado el paquete MASS). Para una descripción más
detallada ver: http://www.math.umt.edu/patterson/ProfileLikelihoodCI.pdf
## 2.5 % 97.5 %
## (Intercept) -12.9375208 -7.0938806
## matematicas 0.1093783 0.2103937
Dado que un modelo logístico modela el logaritmo de ODDs, estas son las unidades en las que
se devuelven las predicciones. Es necesario convertirlas de nuevo en probabilidad mediante la
función logit. En R, la función predict() puede devolver directamente las probabilidades en
lugar de los logODDs si se indica el argumento type="response". Sin embargo, si se quieren
calcular intervalos de confianza y que estos no se salgan del rango [0, 1] es necesario emplear
los logODDs y una vez que se les ha sustraído o sumado el margen de error (Z x SE) se
transforman en probabilidades.
14
Regresión logística simple y múltiple
15
Regresión logística simple y múltiple
Se considera que el modelo es útil si es capaz de mostrar una mejora explicando las
observaciones respecto al modelo nulo (sin predictores). El test Likelihood ratio calcula la
significancia de la diferencia de residuos entre el modelo de interés y el modelo nulo. El
estadístico sigue una distribución chi-cuadrado con grados de libertad equivalentes a la
diferencia de grados de libertad de los dos modelos.
16
Regresión logística simple y múltiple
# Diferencia de residuos
# En R, un objeto glm almacena la "deviance" del modelo, así como la "deviance"
# del modelo nulo.
dif_residuos <- modelo$null.deviance - modelo$deviance
# Grados libertad
df <- modelo$df.null - modelo$df.residual
# p-value
p_value <- pchisq(q = dif_residuos,df = df, lower.tail = FALSE)
paste("p-value:", p_value)
17
Regresión logística simple y múltiple
idea de esta fórmula es que, 𝑙𝑛(𝐿^), tiene un significado análogo a la suma de cuadrados de
la regresión lineal. De ahí que se le denomine 𝑝𝑠𝑒𝑢𝑑𝑜𝑅 2.
library(vcd)
predicciones <- ifelse(test = modelo$fitted.values > 0.5, yes = 1, no = 0)
matriz_confusion <- table(modelo$model$matricula, predicciones,
dnn = c("observaciones", "predicciones"))
matriz_confusion
## predicciones
## observaciones 0 1
## 0 140 11
## 1 27 22
18
Regresión logística simple y múltiple
140+22
El modelo es capaz de clasificar correctamente = 0.81(81%) de las observaciones
140+22+27+11
cuando se emplean los datos de entrenamiento. No hay que olvidar que este es el error de
entrenamiento, por lo que no es generalizable a nuevas observaciones. Para obtener una
estimación más realista hay que calcular el error de test.
Conclusión
El modelo logístico creado para predecir la probabilidad de que un alumno obtenga matrícula
de honor a partir de la nota de matemáticas es en conjunto significativo acorde al Likelihood
ratio (p-value = 8.717591e-14). El p-value del predictor matemáticas es significativo (p-value
= 1.03e-09).
19
Regresión logística simple y múltiple
Idea intuitiva
La regresión logística múltiple es una extensión de la regresión logística simple. Se basa en los
mismos principios que la regresión logística simple (explicados anteriormente) pero ampliando
el número de predictores. Los predictores pueden ser tanto continuos como categóricos.
𝑝
ln( ) = 𝛽0 + 𝛽1 𝑥1 + 𝛽2 𝑥2 +. . . +𝛽𝑖 𝑥𝑖
1−𝑝
𝑙𝑜𝑔𝑖𝑡(𝑌) = 𝛽0 + 𝛽1 𝑥1 + 𝛽2 𝑥2 +. . . +𝛽𝑖 𝑥𝑖
20
Regresión logística simple y múltiple
Ejemplo1
Un estudio considera que existe relación entre el hecho de que un estudiante asista a clases de
repaso de lectura (sí = 1, no = 0), la nota que obtiene en un examen de lectura estándar
(realizado antes de iniciar las clases de repaso) y el sexo (hombre = 1, mujer = 0). Se quiere
generar un modelo en el que a partir de las variables puntuación del examen y sexo, prediga
la probabilidad de que el estudiante tenga que asistir a clases de repaso.
21
Regresión logística simple y múltiple
22
Regresión logística simple y múltiple
Las tablas de frecuencia así como representaciones gráficas de las observaciones son útiles para
intuir si las variables independientes escogidas están relacionadas con la variable respuesta y
por lo tanto ser buenos predictores.
library(ggplot2)
tabla <- table(datos$clases_repaso, datos$sexo,
dnn = c("clases de repaso","sexo"))
addmargins(tabla)
## sexo
## clases de repaso hombre mujer Sum
## 0 57 73 130
## 1 36 23 59
## Sum 93 96 189
## sexo
## clases de repaso hombre mujer Sum
## 0 30.15873 38.62434 68.78307
## 1 19.04762 12.16931 31.21693
## Sum 49.20635 50.79365 100.00000
23
Regresión logística simple y múltiple
El número de estudiantes en la muestra es semejante para ambos sexos (96, 93). Parece ser
mayor el porcentaje de hombres que necesitan clases de repaso (19.04762, 12.16931). El
promedio de las notas de lectura de los estudiantes que requieren de clases particulares es
menor que el de los que no requieren clases. En vista de estos datos, tiene sentido considerar el
sexo y la nota como posibles predictores.
##
## Call:
## glm(formula = clases_repaso ~ examen_lectura + sexo, family = "binomial",
## data = datos)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -1.2079 -0.8954 -0.7243 1.2592 2.0412
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 1.18365 0.78559 1.507 0.1319
## examen_lectura -0.02617 0.01223 -2.139 0.0324 *
## sexomujer -0.64749 0.32484 -1.993 0.0462 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 234.67 on 188 degrees of freedom
## Residual deviance: 224.64 on 186 degrees of freedom
## AIC: 230.64
##
## Number of Fisher Scoring iterations: 4
Acorde al modelo, el logaritmo de odds de que un estudiante necesite clases de repaso esta
negativamente relacionado con la puntuación obtenida en el examen de lectura (coeficiente
parcial = -0.02617), siento significativa esta relación (p-value = 0.0324). También existe una
relación significativa positiva entre el logaritmo de odds de necesitar clases de repaso y el
género del estudiante (p-value = 0.0462), siendo, para un mismo resultado en el examen de
24
Regresión logística simple y múltiple
lectura, mayor si el estudiante es hombre. En concreto los odds de que un hombre requiera
clases de repaso son 𝑒 0.64749 = 1.910739 mayores que los de las mujeres. (Esto se puede ver
gráficamente representando el modelo para hombres y mujeres).
Además del valor estimado de los coeficientes parciales de correlación calculados por el
modelo, es conveniente generar sus correspondientes intervalos de confianza. En el caso de
regresión logística, estos intervalos suelen calcularse basados en profile likelihood (en R es el
método por defecto si se tiene instalado el paquete MASS ).
confint(modelo_glm)
## 2.5 % 97.5 %
## (Intercept) -0.2973940 2.799267537
## examen_lectura -0.0518029 -0.003536647
## sexomujer -1.2931216 -0.015658932
## 2.5 % 97.5 %
## (Intercept) -0.35608462 2.723378445
## examen_lectura -0.05015001 -0.002192983
## sexomujer -1.28416605 -0.010807125
library(ggplot2)
# Para graficar los valores en ggplot junto con la curva, la variable respuesta
# tiene que ser numérica en lugar de factor.
datos$clases_repaso <- as.numeric(as.character(datos$clases_repaso))
25
Regresión logística simple y múltiple
26
Regresión logística simple y múltiple
Likelihood ratio:
# Diferencia de residuos
dif_residuos <- modelo_glm$null.deviance - modelo_glm$deviance
# Grados libertad
df <- modelo_glm$df.null - modelo_glm$df.residual
# p-value
p_value <- pchisq(q = dif_residuos,df = df, lower.tail = FALSE)
27
Regresión logística simple y múltiple
## predicciones
## observaciones 0 1
## 0 129 1
## 1 56 3
129+3
El modelo es capaz de clasificar correctamente 129+3+56+1 = 0.698(69.8%) de las observaciones
de entrenamiento. Si se analiza en detalle cómo se distribuye el error, se aprecia que el modelo
solo ha sido capaz de identificar correctamente a 3 de los 59 alumnos que realmente asisten a
clases de repaso. El porcentaje de falsos negativos es muy alto. Seleccionar otro threshold
puede mejorar la exactitud del modelo.
28
Regresión logística simple y múltiple
library(vcd)
predicciones <- ifelse(test = modelo_glm$fitted.values > 0.45, yes = 1, no = 0)
matriz_confusion <- table(modelo_glm$model$clases_repaso, predicciones,
dnn = c("observaciones", "predicciones"))
matriz_confusion
## predicciones
## observaciones 0 1
## 0 122 8
## 1 45 14
Conclusión
El modelo logístico creado para predecir la probabilidad de que un alumno tenga que asistir a
clases de repaso a partir de la nota obtenida en un examen de lectura y el sexo del alumno es en
conjunto significativo acorde al Likelihood ratio (p-value = 0.0066). El p-value de ambos
predictores es significativo (examen_lectura = 0.0324, sexo1 = 0.0462). El ratio de error
obtenido empleando las observaciones con las que se ha entrenado el modelo muestra un
porcentaje de falsos negativos muy alto.
29
Regresión logística simple y múltiple
Ejemplo2
Se dispone de un registro que contiene cientos de emails con información de cada uno de ellos.
El objetivo de estudio es intentar crear un modelo que permita filtrar qué emails son “spam” y
cuáles no, en función de determinadas características. Ejemplo extraído del libro OpenIntro
Statistics.
library(openintro)
data(email)
str(email)
En este caso se van a emplear únicamente como posibles predictores variables categóricas. Esto
se debe a que los outliers complican bastante la creación de estos modelos y, en el data set que
se emplea como ejemplo, las variables cuantitativas son muy asimétricas. En particular, las
variables que se van a estudiar como posibles predictores son:
30
Regresión logística simple y múltiple
En primer lugar se genera el modelo completo introduciendo todas las variables como
predictores.
## Call:
## glm(formula = spam ~ to_multiple + format + cc + attach + dollar +
## winner + inherit + password + re_subj + exclaim_subj, family = binomial,
## data = email)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -1.6348 -0.4325 -0.2566 -0.0945 3.8846
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -0.79976 0.08935 -8.950 < 2e-16 ***
## to_multiple -2.84097 0.31158 -9.118 < 2e-16 ***
## format -1.52284 0.12270 -12.411 < 2e-16 ***
## cc 0.03134 0.01895 1.654 0.098058 .
## attach 0.20351 0.05851 3.478 0.000505 ***
## dollar -0.07304 0.02306 -3.168 0.001535 **
## winneryes 1.83103 0.33641 5.443 5.24e-08 ***
## inherit 0.32999 0.15223 2.168 0.030184 *
## password -0.75953 0.29597 -2.566 0.010280 *
## re_subj -3.11857 0.36522 -8.539 < 2e-16 ***
## exclaim_subj 0.24399 0.22502 1.084 0.278221
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 2437.2 on 3920 degrees of freedom
## Residual deviance: 1936.2 on 3910 degrees of freedom
## AIC: 1958.2
##
## Number of Fisher Scoring iterations: 7
31
Regresión logística simple y múltiple
##
## Call:
## glm(formula = spam ~ to_multiple + format + attach + dollar +
## winner + inherit + password + re_subj, family = binomial,
## data = email)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -1.6591 -0.4373 -0.2544 -0.0944 3.8707
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -0.78138 0.08860 -8.820 < 2e-16 ***
## to_multiple -2.77682 0.30752 -9.030 < 2e-16 ***
## format -1.51770 0.12226 -12.414 < 2e-16 ***
## attach 0.20419 0.05789 3.527 0.00042 ***
## dollar -0.06970 0.02239 -3.113 0.00185 **
## winneryes 1.86675 0.33652 5.547 2.9e-08 ***
## inherit 0.33614 0.15073 2.230 0.02575 *
## password -0.76035 0.29680 -2.562 0.01041 *
## re_subj -3.11329 0.36519 -8.525 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 2437.2 on 3920 degrees of freedom
## Residual deviance: 1939.6 on 3912 degrees of freedom
## AIC: 1957.6
##
## Number of Fisher Scoring iterations: 7
Con este modelo podemos saber la probabilidad, dadas unas determinadas características, de
que el email sea spam (valor 1 de la variable).
Para evaluar el modelo, se puede comparar el valor real (si realmente es spam) con el predicho
por el modelo.
32
Regresión logística simple y múltiple
library(vcd)
predicciones <- ifelse(test = modelo_final$fitted.values > 0.5, yes = 1, no = 0)
matriz_confusion <- table(modelo_final$model$spam, predicciones,
dnn = c("observaciones", "predicciones"))
matriz_confusion
## predicciones
## observaciones 0 1
## 0 3551 3
## 1 355 12
El modelo generado no es capaz de diferenciar bien entre spam y no spam, solo 12 de los 367
correos spam se han identificado correctamente. Si fuese capaz, la probabilidad calculada por
el modelo para aquellos emails del dataset que sí son spam deberían estar por encima del 0.5.
33
Regresión logística simple y múltiple
Anexos
• La tolerancia: Al tratarse de un algoritmo iterativo, hay que indicar una regla de parada.
Lo idóneo es que el algoritmo se detenga al encontrar el mínimo, pero como normalmente
se desconoce cuál es, hay que conseguir que se pare lo más cerca posible. Una forma de
cuantificar la proximidad al mínimo es controlar cuanto desciende el valor de la función
entre iteraciones consecutivas. Si el descenso es muy pequeño, significa que se encuentra
muy cerca del valor. La tolerancia se define como un valor tal que, si la diferencia en el
descenso es menor o igual, se considera que se ha alcanzado el mínimo (el algoritmo
converge). Una alternativa a calcular la distancia entre las dos iteraciones es medir la
longitud del vector gradiente en cada iteración. Si su longitud es muy pequeña, también lo
es la distancia al mínimo.
• Iteraciones máximas: Si la posición de inicio en la búsqueda está muy alejada del mínimo
de la función y el learning rate es muy pequeño, se pueden necesitar muchas iteraciones
para alcanzarlo. Para evitar un proceso iterativo excesivamente largo, se suele establecer
un número máximo de iteraciones permitidas.
34
Regresión logística simple y múltiple
Funciones auxiliares
Importante: los cálculos se han implementado asumiendo que, en la matriz de datos 𝑋, cada
fila es una observación y cada columna un predictor.
s <- 1 / (1 + exp(-x))
return(s)
}
35
Regresión logística simple y múltiple
# Gradientes respecto a W y b.
dW <- (1/nrow(X)) * t(A-Y) %*% X
db <- (1/nrow(X)) * sum(A-Y)
## $activacion
## [,1]
## [1,] 0.999876605424013687
## [2,] 0.999993855825397793
## [3,] 0.004496273160941178
##
## $coste
## [1] 5.801545319394553
##
## $dW
## [,1]
36
Regresión logística simple y múltiple
## [1,] 0.998456014637956
## [2,] 2.395072388486207
##
## $db
## [1] 0.001455578136784208
# Esta función optimiza los valores de los pesos (W) y bias(b) de un modelo de
# regresión logística empleando el método de descenso de gradiente.
#
# Argumentos:
# W: vector con los pesos del modelo.
# b: bias (un escalar).
# X: matriz con el valor de los predictores para cada observación. Cada fila
# es una observación y cada columna un predictor.
# Y: vector con el valor de la variable respuesta (1 o 0) para cada
# observación.
# max_iter: número máximo de iteraciones en la optimización.
# learning_rate: learning rate del algoritmo de descenso de gradiente.
#
# Retorno:
# W: valor de los pesos tras la optimización.
# b: valor del bias tras la optimización.
# dW: gradientes finales de W.
# db: gradiente finale de b.
# costes: valor del coste en cada iteración proceso de optimización.
37
Regresión logística simple y múltiple
## $W
## [,1]
## [1,] 0.1903359088860433
## [2,] 0.1225915924656141
##
## $b
## [1] 1.925359830084575
##
## $dW
## [,1]
## [1,] 0.6775204222153582
## [2,] 1.4162549526380881
##
## $db
## [1] 0.2191945045406766
##
## $costes
## [1] 5.801545319394553 5.740950502809333 5.680375426895574
## [4] 5.619821667177627 5.559290922630777 5.498785024864459
## [7] 5.438305948070814 5.377855819606451 5.317436931189180
## [10] 5.257051750930272 5.196702936040730 5.136393346354229
## [13] 5.076126058631377 5.015904381700863 4.955731872427952
## [16] 4.895612352538271 4.835549926277942 4.775548998918993
## [19] 4.715614296080809 4.655750883842328 4.595964189588867
## [22] 4.536260023537635 4.476644600852061 4.417124564226807
## [25] 4.357707006833278 4.298399495423375 4.239210093432046
## [28] 4.180147383816733 4.121220491375143 4.062439104215671
## [31] 4.003813494033473 3.945354534777397 3.887073719253970
## [34] 3.828983173173290 3.771095666089990 3.713424618643993
## [37] 3.655984105487431 3.598788853232609 3.541854232753109
## [40] 3.485196245157411 3.428831500765508 3.372777190449042
## [43] 3.317051048752004 3.261671308280287 3.206656644961654
## [46] 3.152026113905351 3.097799075761740 3.043995113670948
## [49] 2.990633941112374 2.937735301207008 2.885318858284809
## [52] 2.833404082794996 2.782010130904063 2.731155720379143
## [55] 2.680859004584204 2.631137446610226 2.582007695704986
## [58] 2.533485468253436 2.485585435579075 2.438321120781088
## [61] 2.391704806691144 2.345747456830605 2.300458650974883
## [64] 2.255846536602117 2.211917797125800 2.168677637404739
## [67] 2.126129786604603 2.084276518069984 2.043118685473982
## [70] 2.002655774155893 1.962885966252069 1.923806217977676
## [73] 1.885412347235535 1.847699129612681 1.810660400776116
38
Regresión logística simple y múltiple
if(probabilidad){
predicciones <- A
}else{
predicciones <- ifelse(A>0.5, 1, 0)
}
return(predicciones)
}
predecir(
W = c(0.1124579, 0.23106775),
b = -0.3,
X = cbind(c(1.,-1.1,-3.2),c(1.2,2.,0.1))
)
## [,1]
## [1,] 0.5224198
## [2,] 0.5096068
## [3,] 0.3459797
39
Regresión logística simple y múltiple
Función principal
# Optimización
optimizacion <- optimizar(W=W,
b=b,
X=X_train,
Y=Y_train,
max_iter=max_iter,
learning_rate=learning_rate)
return(list(W=optimizacion[["W"]],
b = optimizacion[["b"]],
costes=optimizacion[["costes"]])
)
}
Ejemplo
x1 <- c(7.0, 6.4, 6.9, 5.5, 6.5, 5.7, 6.3, 4.9, 6.6, 5.2, 5.0, 5.9, 6.0, 6.1, 5.6,
6.7, 5.6, 5.8, 6.2, 5.6, 5.9, 6.1, 6.3, 6.1, 6.4, 6.6, 6.8, 6.7, 6.0, 5.7,
5.5, 5.5, 5.8, 6.0, 5.4, 6.0, 6.7, 6.3, 5.6, 5.5, 5.5, 6.1, 5.8, 5.0, 5.6,
5.7, 5.7, 6.2, 5.1, 5.7, 6.3, 5.8, 7.1, 6.3, 6.5, 7.6, 4.9, 7.3, 6.7, 7.2,
6.5, 6.4, 6.8, 5.7, 5.8, 6.4, 6.5, 7.7, 7.7, 6.0, 6.9, 5.6, 7.7, 6.3, 6.7,
7.2, 6.2, 6.1, 6.4, 7.2, 7.4, 7.9, 6.4, 6.3, 6.1, 7.7, 6.3, 6.4, 6.0, 6.9,
6.7, 6.9, 5.8, 6.8, 6.7, 6.7, 6.3, 6.5, 6.2, 5.9)
x2 <- c(3.2, 3.2, 3.1, 2.3, 2.8, 2.8, 3.3, 2.4, 2.9, 2.7, 2.0, 3.0, 2.2, 2.9, 2.9,
3.1, 3.0, 2.7, 2.2, 2.5, 3.2, 2.8, 2.5, 2.8, 2.9, 3.0, 2.8, 3.0, 2.9, 2.6,
2.4, 2.4, 2.7, 2.7, 3.0, 3.4, 3.1, 2.3, 3.0, 2.5, 2.6, 3.0, 2.6, 2.3, 2.7,
3.0, 2.9, 2.9, 2.5, 2.8, 3.3, 2.7, 3.0, 2.9, 3.0, 3.0, 2.5, 2.9, 2.5, 3.6,
3.2, 2.7, 3.0, 2.5, 2.8, 3.2, 3.0, 3.8, 2.6, 2.2, 3.2, 2.8, 2.8, 2.7, 3.3,
3.2, 2.8, 3.0, 2.8, 3.0, 2.8, 3.8, 2.8, 2.8, 2.6, 3.0, 3.4, 3.1, 3.0, 3.1,
3.1, 3.1, 2.7, 3.2, 3.3, 3.0, 2.5, 3.0, 3.4, 3.0)
x3 <- c(4.7, 4.5, 4.9, 4.0, 4.6, 4.5, 4.7, 3.3, 4.6, 3.9, 3.5, 4.2, 4.0, 4.7, 3.6,
4.4, 4.5, 4.1, 4.5, 3.9, 4.8, 4.0, 4.9, 4.7, 4.3, 4.4, 4.8, 5.0, 4.5, 3.5,
3.8, 3.7, 3.9, 5.1, 4.5, 4.5, 4.7, 4.4, 4.1, 4.0, 4.4, 4.6, 4.0, 3.3, 4.2,
4.2, 4.2, 4.3, 3.0, 4.1, 6.0, 5.1, 5.9, 5.6, 5.8, 6.6, 4.5, 6.3, 5.8, 6.1,
5.1, 5.3, 5.5, 5.0, 5.1, 5.3, 5.5, 6.7, 6.9, 5.0, 5.7, 4.9, 6.7, 4.9, 5.7,
6.0, 4.8, 4.9, 5.6, 5.8, 6.1, 6.4, 5.6, 5.1, 5.6, 6.1, 5.6, 5.5, 4.8, 5.4,
5.6, 5.1, 5.1, 5.9, 5.7, 5.2, 5.0, 5.2, 5.4, 5.1)
40
Regresión logística simple y múltiple
x4 <- c(1.4, 1.5, 1.5, 1.3, 1.5, 1.3, 1.6, 1.0, 1.3, 1.4, 1.0, 1.5, 1.0, 1.4, 1.3,
1.4, 1.5, 1.0, 1.5, 1.1, 1.8, 1.3, 1.5, 1.2, 1.3, 1.4, 1.4, 1.7, 1.5, 1.0,
1.1, 1.0, 1.2, 1.6, 1.5, 1.6, 1.5, 1.3, 1.3, 1.3, 1.2, 1.4, 1.2, 1.0, 1.3,
1.2, 1.3, 1.3, 1.1, 1.3, 2.5, 1.9, 2.1, 1.8, 2.2, 2.1, 1.7, 1.8, 1.8, 2.5,
2.0, 1.9, 2.1, 2.0, 2.4, 2.3, 1.8, 2.2, 2.3, 1.5, 2.3, 2.0, 2.0, 1.8, 2.1,
1.8, 1.8, 1.8, 2.1, 1.6, 1.9, 2.0, 2.2, 1.5, 1.4, 2.3, 2.4, 1.8, 1.8, 2.1,
2.4, 2.3, 1.9, 2.3, 2.5, 2.3, 1.9, 2.0, 2.3, 1.8)
## [,1]
## x1 1.275074329076017143
## x2 0.982365538228177404
## x3 -1.797522101518687077
## x4 -1.632167147076912572
## [1] 0.644761927696687
## [,1]
## [1,] 0.8787306
## [2,] 0.8040351
## [3,] 0.7741682
## [4,] 0.6468464
## [5,] 0.7244246
## [6,] 0.6112673
41
Regresión logística simple y múltiple
Bibliografía
OpenIntro Statistics
http://www.ats.ucla.edu/stat/r/dae/logit.htm
http://ww2.coastal.edu/kingw/statistics/R-tutorials/index.html
Points of Significance: Logistic regression Jake Lever, Martin Krzywinski & Naomi Altman.
Nature Methods
This work by Joaquín Amat Rodrigo is licensed under a Creative Commons Attribution 4.0
International License.
This work is licensed under a Creative Commons Attribution 4.0 International License
42