En el análisis estadístico, muchas situaciones prácticas no se ajustan a los supuestos de la regresión lineal. Esto ocurre cuando el fenómeno que deseamos explicar no se mide en una escala continua, sino que implica decisiones, categorías o eventos dicotómicos: aprobar o reprobar, comprar o no comprar, estar enfermo o sano, contratar o no contratar. En este tipo de casos, el modelo lineal clásico deja de ser apropiado porque puede generar predicciones fuera del rango lógico, y no captura adecuadamente la naturaleza probabilística del evento.
La regresión logística surge precisamente para abordar este tipo de problemas. Se trata de un método diseñado para estimar la probabilidad de ocurrencia de un evento, en función de una o varias variables explicativas. A diferencia de la regresión lineal, que busca ajustar una recta, la regresión logística emplea una función sigmoide (o en forma de “S”) que restringe los valores posibles entre 0 y 1, permitiendo así interpretar los resultados como probabilidades.
Desde el punto de vista práctico, este modelo permite comprender qué factores aumentan o disminuyen la probabilidad de que ocurra un determinado resultado, y cuantificar la fuerza de esa relación. Por ejemplo:
En mercadeo, puede utilizarse para estimar la probabilidad de que un cliente realice una compra.
En salud, para evaluar el riesgo de padecer una enfermedad.
En educación, para identificar qué variables influyen en la probabilidad de éxito académico.
La regresión logística utiliza la misma lógica que la regresión lineal: se busca establecer una relación entre una variable dependiente y un conjunto de variables independientes. La diferencia fundamental es que, en este caso, la variable dependiente \(Y\) es binaria (toma solo los valores 0 o 1).
El modelo parte de la idea de estimar la probabilidad de que
ocurra el evento \(Y = 1\),
denotada como \(P(Y=1)\). Sin embargo,
modelar directamente la probabilidad puede ser problemático, ya que debe
estar siempre entre 0 y 1.
Para resolver esto, la regresión logística utiliza el logaritmo de
las probabilidades relativas, también llamado
logit:
\[ \text{logit}(p) = \ln\left(\frac{p}{1-p}\right) \]
donde:
El logit transforma las probabilidades (que están acotadas entre 0 y 1), en una escala continua que puede tomar cualquier valor real, lo cual permite aplicar un modelo lineal de la forma:
\[ \ln\left(\frac{p}{1-p}\right) = \beta_0 + \beta_1X_1 + \dots + \beta_kX_k \]
A partir de esta ecuación, se despeja \(p\) y se obtiene la forma logística del modelo:
\[ p = \frac{e^{\beta_0 + \beta_1X_1 + \dots + \beta_kX_k}}{1 + e^{\beta_0 + \beta_1X_1 + \dots + \beta_kX_k}} \]
Esta formulación garantiza que todas las predicciones del modelo estén en el rango de 0 a 1 y que los efectos de las variables se interpreten como cambios en la razón de probabilidades.
En la regresión logística, cada coeficiente \(\beta_i\) refleja el efecto que tiene la variable explicativa \(X_i\) sobre el logit de la probabilidad del evento, manteniendo las demás variables constantes. Aunque el modelo se estima en la escala logarítmica, los coeficientes pueden interpretarse de dos formas complementarias: en términos del logit o del odds ratio.
En esta escala, el coeficiente \(\beta_i\) indica cuánto cambia el logaritmo de la razón de probabilidades cuando \(X_i\) aumenta en una unidad.
Por ejemplo, si \(\beta_1 = 0.5\), significa que por cada unidad adicional en \(X_1\), el logit de la probabilidad de que ocurra el evento aumenta en 0.5 unidades. Sin embargo, esta interpretación suele ser poco intuitiva, por lo que normalmente se transforma el coeficiente mediante la función exponencial.
El odds ratio (OR) se obtiene como \(e^{\beta_i}\) y ofrece una interpretación más directa:
Por ejemplo, si \(\beta_1 = 0.7\),
entonces \(e^{0.7} \approx
2.01\).
Esto significa que por cada unidad que aumenta \(X_1\), la razón de probabilidades de que
ocurra el evento es 2.01 veces mayor que la de que no ocurra.
Cuando una variable independiente es categórica, su interpretación se realiza en comparación con una categoría de referencia.
Por ejemplo, si una variable Género tiene las categorías
Hombre (referencia) y Mujer, y el modelo arroja \(\beta_{\text{Mujer}} = 0.4\):
\[ e^{0.4} \approx 1.49 \]
Esto se interpreta como que las mujeres tienen 1.49 veces más probabilidades de que ocurra el evento en comparación con los hombres, manteniendo las demás variables constantes.
Imaginemos que un banco desea identificar qué factores influyen para
que un cliente solicite un préstamo.
Para ello, construye un modelo de regresión logística donde la variable
dependiente es:
Y considera como variables independientes:
Supongamos que el modelo estimado arroja los siguientes coeficientes:
| Variable | Coeficiente (\(\beta\)) | Odds Ratio (\(e^{\beta}\)) |
|---|---|---|
| Intercepto | -2.0 | 0.14 |
| Ingreso mensual | 0.8 | 2.23 |
| Nivel de endeudamiento | -1.1 | 0.33 |
| Historial crediticio (Bueno) | 1.5 | 4.48 |
Interpretaciones:
Intercepto: odds ratio asociado al intercepto (\(e^{-2.0} = 0.14\)) representa la razón de probabilidades base de solicitar un préstamo cuando todas las variables explicativas son cero. Aunque esta situación no es realista, el intercepto funciona como un punto de referencia: la probabilidad base de que un cliente solicite un préstamo es muy baja (solo el \(14\%\) respecto a la probabilidad de no solicitarlo) antes de considerar los efectos de las demás variables.
Ingreso mensual: por cada aumento de una unidad en el ingreso (mil dólares adicionales), la razón de probabilidades de solicitar un préstamo se multiplica por \(2.23\), manteniendo las demás variables constantes. Es decir, la probabilidad de hacer un préstamo aumenta un \(123\%\) respecto a no hacerlo \((2.23-1=1.23)\). Esto implica que los clientes con mayor ingreso tienen más disposición a solicitarlo.
Nivel de endeudamiento: a medida que aumenta el nivel de endeudamiento, la razón de probabilidades de solicitar un préstamo se multiplica por \(0.33\). Es decir, la probabilidad de hacer un préstamo disminuye un \(67\%\) respecto a no hacerlo \((1-0.33=0.67)\). En otras palabras, los clientes más endeudados son menos propensos a solicitar nuevos créditos.
Historial crediticio: los clientes con historial crediticio de referencia (bueno) tienen \(4.48\) veces más probabilidades de solicitar un préstamo que aquellos con historial malo, manteniendo las demás variables constantes. Es decir, la probabilidad de hacer el préstamo aumenta en \(348\%\) respecto a no hacerlo \((4.48 - 1 = 3.48)\).
A continuación se presentan diferentes contextos de aplicación y su implementación en R.
En Puerto Rico, los constantes aumentos en la factura eléctrica y la frecuencia de apagones han llevado a muchos hogares a considerar la instalación de sistemas solares con batería. Un investigador desea analizar qué factores influyen en la decisión de instalar o no instalar el sistema, utilizando información de 500 hogares.
La variable dependiente representa la decisión del hogar:
1: el hogar instaló un sistema solar con batería.0: el hogar no lo instaló.Las variables explicativas son tres indicadores numéricos:
factura): medida en centenas
de dólares (cada 1 = $100).apagones): en bloques de 10
horas.interes): tasa de financiamiento del
préstamo solar en puntos porcentuales (cada 1 = 1 pp).El interés principal es determinar cómo cambian las probabilidades de instalar un sistema solar según estas condiciones.
Datos simulados
## Datos simulados
set.seed(2025)
n <- 500
factura <- pmax(0, round(rnorm(n, mean = 4.0, sd = 1.2), 1))
apagones <- pmax(0, round(rnorm(n, mean = 2.2, sd = 1.0), 1))
interes <- pmax(0, round(rnorm(n, mean = 9.0, sd = 2.5), 1))
b0 <- -2.2
b1 <- 0.26
b2 <- 0.41
b3 <- -0.29
eta <- b0 + b1*factura + b2*apagones + b3*interes
p <- 1/(1 + exp(-eta))
instala <- rbinom(n, 1, p)
data1 <- data.frame(instala,factura,apagones,interes)
head(data1)## instala factura apagones interes
## 1 0 4.7 0.9 11.2
## 2 0 4.0 4.2 3.8
## 3 0 4.9 2.7 7.5
## 4 1 5.5 3.2 5.4
## 5 0 4.4 3.6 7.2
## 6 0 3.8 1.4 7.2
Modelo logístico ajustado:
# Ajuste del modelo logístico
modelo1 <- glm(instala ~ factura + apagones + interes, family = binomial, data=data1)
coefs <- summary(modelo1)$coefficients
# Tabla de resultados
tabla_mod1 <- data.frame(
Termino = rownames(coefs),
Logit = round(coefs[, 1], 3),
Odds_Ratio = round(exp(coefs[, 1]), 3),
row.names = NULL)
tabla_mod1## Termino Logit Odds_Ratio
## 1 (Intercept) -1.576 0.207
## 2 factura 0.203 1.226
## 3 apagones 0.431 1.538
## 4 interes -0.333 0.716
Interpretación de los resultados:
En los últimos años, Puerto Rico ha experimentado olas de calor cada vez más intensas, afectando la jornada escolar y el rendimiento de los estudiantes. Ante esta situación, algunas escuelas han decidido ajustar sus horarios para reducir la exposición al calor extremo. El objetivo del análisis es identificar qué factores aumentan la probabilidad de adoptar un horario reducido.
La variable dependiente representa la decisión de la escuela:
1: la escuela adopta horario reducido.0: la escuela no adopta horario reducido.Las variables explicativas son categóricas:
region): Metro, Norte, Sur (referencia:
Metro).nivel): Elemental, Intermedia, Superior
(referencia: Elemental).planta): A/C central, A/C parcial, sin
A/C (referencia: A/C central).El interés principal es determinar qué condiciones institucionales y ambientales se asocian con una mayor probabilidad de que una escuela adopte un horario reducido.
Datos simulados
## Datos simulados
set.seed(2025)
n <- 800
region <- factor(
sample(c("Metro","Norte","Sur"), n, replace = TRUE, prob = c(0.5, 0.25, 0.25)),
levels = c("Metro","Norte","Sur")
)
nivel <- factor(
sample(c("Elemental","Intermedia","Superior"), n, replace = TRUE, prob = c(0.4, 0.3, 0.3)),
levels = c("Elemental","Intermedia","Superior")
)
planta <- factor(
sample(c("AC_central","AC_parcial","SinAC"), n, replace = TRUE, prob = c(0.35, 0.35, 0.30)),
levels = c("AC_central","AC_parcial","SinAC")
)
# Coeficientes
b0 <- -1.2
b_Nor <- log(1.10)
b_Sur <- log(1.90)
b_Int <- log(1.20)
b_Sup <- log(1.60)
b_ACp <- log(1.40)
b_Sin <- log(3.10)
eta <- b0 + ifelse(region == "Norte", b_Nor, 0) + ifelse(region == "Sur", b_Sur, 0) + ifelse(nivel == "Intermedia", b_Int, 0) + ifelse(nivel == "Superior", b_Sup, 0) + ifelse(planta == "AC_parcial", b_ACp, 0) + ifelse(planta == "SinAC", b_Sin, 0)
p <- 1 / (1 + exp(-eta))
adopta <- rbinom(n, 1, p)
data2 <- data.frame(adopta, region, nivel, planta)
head(data2)## adopta region nivel planta
## 1 1 Sur Superior AC_central
## 2 0 Metro Superior AC_central
## 3 0 Sur Elemental AC_central
## 4 0 Metro Elemental SinAC
## 5 0 Norte Elemental SinAC
## 6 1 Sur Elemental AC_central
Modelo logístico ajustado:
# Ajuste del modelo
modelo2 <- glm(adopta ~ region + nivel + planta, family = binomial, data = data2)
coefs2 <- summary(modelo2)$coefficients
# Tabla
tabla_mod2 <- data.frame(
Termino = rownames(coefs2),
Logit = round(coefs2[, "Estimate"], 3),
Odds_Ratio = round(exp(coefs2[, "Estimate"]), 3),
row.names = NULL,
check.names = FALSE
)
tabla_mod2## Termino Logit Odds_Ratio
## 1 (Intercept) -1.026 0.358
## 2 regionNorte 0.125 1.133
## 3 regionSur 0.778 2.178
## 4 nivelIntermedia -0.148 0.862
## 5 nivelSuperior 0.129 1.137
## 6 plantaAC_parcial 0.268 1.307
## 7 plantaSinAC 0.988 2.687
Interpretaciones:
Intercepto: \((OR = 0.36)\) representa la situación de referencia (región Metro, nivel Elemental y AC_central). En ese escenario, la probabilidad base de adoptar horario reducido es baja, por lo que el plantel tiende a no adoptarlo.
Región Norte (vs. Metro): las escuelas en la región Norte presentan una probabilidad de adoptar el horario reducido \(13\%\) mayor respecto a no adoptarlo, en comparación con las escuelas del área Metro (\(1.133 - 1 = 0.133\)), manteniendo constantes las demás variables.
Región Sur (vs. Metro): las escuelas en la región Sur tienen una probabilidad de adoptar el horario reducido \(118\%\) mayor respecto a no adoptarlo (\(2.178 - 1 = 1.178\)), manteniendo constantes las demás variables.
Nivel Intermedia (vs Elemental): las escuelas de nivel Intermedia muestran una probabilidad de adoptar el horario reducido \(14\%\) menor respecto a no adoptarlo (\(1 - 0.862 = 0.138\)), manteniendo constantes las demás variables.
Nivel Superior (vs. Elemental): las escuelas de nivel Superior presentan un incremento del \(14\%\) de adoptar el horario (\(1.137 - 1 = 0.137\)), manteniendo constantes las demás variables.
A/C parcial (vs. A/C central): las escuelas con A/C parcial muestran una probabilidad de adoptar el horario reducido \(31\%\) mayor respecto a no adoptarlo (\(1.307 - 1 = 0.307\)), manteniendo constantes las demás variables.
Sin A/C (vs. A/C central): las escuelas sin aire acondicionado presentan una probabilidad de adoptar el horario reducido \(169\%\) mayor respecto a no adoptarlo (\(2.687 - 1 = 1.687\)), lo que muestra que las condiciones térmicas son un factor determinante.
En Puerto rico, tras el paso de huracanes, muchas PyMEs en Puerto Rico han enfrentado pérdidas económicas. Un banco desea analizar qué factores influyen en su decisión de hacer o no hacer un microcrédito de recuperación a estas empresas.
La variable dependiente representa la decisión del banco:
1: el banco hace el
microcrédito.0: el banco no lo hace.Las variables explicativas incluyen factores financieros y de riesgo:
ventas_10k): bloques de $10,000 (cada
1 = $10,000).seguro): No /
Si (referencia: No).morosidad): No /
Si (referencia: No).ventas_10k * seguro (el efecto de ventas
puede ser distinto si la empresa está asegurada).El interés principal es determinar cómo cambian las probabilidades de hacer el préstamo frente a no hacerlo según estas condiciones.
Datos simulados:
## Datos simulados
set.seed(2025)
n <- 700
# Predictores
ventas_10k <- pmax(0, round(rlnorm(n, meanlog = log(2.0), sdlog = 0.6), 1))
seguro <- factor(sample(c("No","Si"), n, replace = TRUE, prob = c(0.55, 0.45)),levels = c("No","Si"))
morosidad <- factor(sample(c("No","Si"), n, replace = TRUE, prob = c(0.70, 0.30)),levels = c("No","Si"))
# Coeficientes
b0 <- -1.8
bV <- 0.41
bS <- 0.79
bM <- -0.92
bVS <- 0.26
# Variable dependiente
eta3 <- b0 + bV*ventas_10k + bS*(seguro=="Si") + bM*(morosidad=="Si") + bVS*ventas_10k*(seguro=="Si")
p3 <- 1/(1+exp(-eta3))
hace <- rbinom(n, 1, p3)
# Conjunto de datos
data3 <- data.frame(hace, ventas_10k, seguro, morosidad)
head(data3)## hace ventas_10k seguro morosidad
## 1 1 2.9 No No
## 2 0 2.0 Si Si
## 3 1 3.2 No Si
## 4 1 4.3 Si No
## 5 0 2.5 Si No
## 6 1 1.8 No Si
Modelo ajustado:
# Ajuste del modelo logístico con interacción
modelo3 <- glm(hace ~ ventas_10k * seguro + morosidad, family = binomial, data = data3)
coefs3 <- summary(modelo3)$coefficients
# Tabla
tabla_mod3 <- data.frame(
Termino = rownames(coefs3),
Logit = round(coefs3[, "Estimate"], 3),
Odds_Ratio = round(exp(coefs3[, "Estimate"]), 3),
row.names = NULL,
check.names = FALSE
)
tabla_mod3## Termino Logit Odds_Ratio
## 1 (Intercept) -1.371 0.254
## 2 ventas_10k 0.291 1.338
## 3 seguroSi 0.213 1.237
## 4 morosidadSi -0.972 0.378
## 5 ventas_10k:seguroSi 0.464 1.590
Interpretación de los resultados:
Intercepto: situación base (empresa sin seguro, sin morosidad y con ventas bajas).
ventas mensuales: por cada $10,000 adicionales en ventas, la probabilidad de hacer el microcrédito aumenta un \(34\%\) respecto a no hacerlo, manteniendo constantes las demás variables.
Seguro: tener seguro aumenta en \(24\%\) la probabilidad de hacer el microcrédito respecto a no hacerlo, manteniendo constantes las demás variables.
Morosidad: tener morosidad disminuye en \(62\%\) la probabilidad de hacer el microcrédito respecto a no hacerlo, manteniendo constantes las demás variables.
Interacción ventas:seguro: cuando hay seguro, cada $10,000 extra en ventas, la probabilidad de hacer el préstamo es \(59\%\) mayor que la de no hacerlo. En otras palabras, las ventas ya incrementan la probabilidad de otorgar el crédito, pero ese aumento es todavía más pronunciado cuando la empresa está asegurada.
Aprobación de préstamos: una institución financiera
quiere entender qué factores inciden en la aprobación de solicitudes de
préstamo. Contamos con un conjunto de datos reales (archivo:
Loan_Approval_Dataset.csv, disponible en Moodle) que
incluye información del solicitante, su situación laboral, activos
reportados y el resultado de la solicitud.
Variable objetivo (binaria):
Loan_Status: Decisión de solicitud (Approved,
Rejected)Variables explicativas disponibles:
| Variable | Descripción | Tipo sugerido |
|---|---|---|
Income |
Ingreso mensual (USD) | Numérica |
Loan_Amount |
Monto solicitado (USD) | Numérica |
Education |
Nivel educativo (Graduate / Not Graduate) | Categórica |
Self_Employed |
Trabaja por cuenta propia (Yes / No) | Categórica |
Cibil_Score |
Puntaje crediticio | Numérica |
Ajustar un modelo de regresión logística para explicar la probabilidad de aprobación del préstamo e interpretar los resultados en términos de odds ratio.