1. Problemática de investigación

Pregunta de investigación:
¿En qué medida variables clínicas como la glucosa, el índice de masa corporal, la edad, la presión arterial, los antecedentes familiares y otros factores metabólicos permiten explicar o predecir la presencia de diabetes en los pacientes incluidos en la base de datos analizada?

La diabetes mellitus representa un problema relevante para la gestión sanitaria debido a su impacto en la carga de enfermedad, el seguimiento clínico, la demanda de servicios, el uso de medicamentos y la prevención de complicaciones. Desde una perspectiva cuantitativa, el análisis de datos clínicos permite identificar patrones asociados con la presencia de diabetes y apoyar la toma de decisiones en salud.

En este contexto, la base de datos utilizada contiene variables clínicas y demográficas relacionadas con el riesgo metabólico, tales como glucosa, índice de masa corporal, presión arterial, edad, número de embarazos, insulina, grosor del pliegue cutáneo y función de pedigrí de diabetes. A partir de esta información, se busca construir, validar y comparar modelos estadísticos que permitan evaluar la capacidad explicativa y predictiva de dichas variables.

2. Planteamiento del problema

Aunque se reconoce que variables como la glucosa, el índice de masa corporal y la edad se encuentran relacionadas con el riesgo de diabetes, no siempre es claro cuál es el aporte estadístico de cada variable dentro de un modelo cuantitativo aplicado a una base de datos específica. Además, en bases clínicas pueden existir valores atípicos, datos incompletos o registros que requieren depuración antes de la estimación del modelo.

Por tanto, surge la necesidad de desarrollar un proceso de modelamiento que incluya la exploración analítica de los datos, la estimación de modelos, la validación de supuestos, la evaluación del desempeño y la interpretación de resultados. Este proceso permite valorar si los modelos construidos representan adecuadamente la realidad observada y si pueden aportar información útil para la toma de decisiones en gestión sanitaria.

3. Justificación metodológica

Para el desarrollo de esta actividad se emplean modelos estadísticos con enfoque cuantitativo. En primer lugar, se ajusta un modelo de regresión lineal múltiple para explicar los niveles de glucosa como variable cuantitativa continua, utilizando como predictores la edad, el índice de masa corporal y la presión arterial.

Posteriormente, se construyen modelos de regresión logística, debido a que la variable principal de interés, Outcome, es dicotómica: 0 indica ausencia de diabetes y 1 indica presencia de diabetes. La regresión logística es adecuada cuando el objetivo consiste en estimar la probabilidad de ocurrencia de un evento.

Finalmente, se utiliza el método de momentos como aproximación complementaria para evaluar el comportamiento de la variable Pregnancies. Este procedimiento permite contrastar si la media y la varianza son consistentes con el supuesto de una distribución de Poisson.

La actividad se desarrolla de acuerdo con los lineamientos de la Semana 5, incluyendo problemática de investigación, planteamiento del problema, exploración analítica de datos, estadísticas descriptivas, modelo matemático, validación, testeo, evaluación de desempeño, interpretación de resultados y conclusiones.

4. Carga y descripción de la base de datos

En esta etapa se realiza la importación de la base de datos que será utilizada durante el análisis estadístico. Inicialmente se verifica si el archivo se encuentra disponible en el directorio de trabajo; de no ser así, el usuario puede seleccionarlo manualmente mediante el explorador de archivos. Posteriormente, se inspecciona la estructura del conjunto de datos para confirmar el número de observaciones, las variables disponibles y su tipo de dato.

##   Pregnancies Glucose BloodPressure SkinThickness Insulin  BMI
## 1           6     148            72            35       0 33.6
## 2           1      85            66            29       0 26.6
## 3           8     183            64             0       0 23.3
## 4           1      89            66            23      94 28.1
## 5           0     137            40            35     168 43.1
## 6           5     116            74             0       0 25.6
##   DiabetesPedigreeFunction Age Outcome
## 1                    0.627  50       1
## 2                    0.351  31       0
## 3                    0.672  32       1
## 4                    0.167  21       0
## 5                    2.288  33       1
## 6                    0.201  30       0
## 'data.frame':    768 obs. of  9 variables:
##  $ Pregnancies             : int  6 1 8 1 0 5 3 10 2 8 ...
##  $ Glucose                 : int  148 85 183 89 137 116 78 115 197 125 ...
##  $ BloodPressure           : int  72 66 64 66 40 74 50 0 70 96 ...
##  $ SkinThickness           : int  35 29 0 23 35 0 32 0 45 0 ...
##  $ Insulin                 : int  0 0 0 94 168 0 88 0 543 0 ...
##  $ BMI                     : num  33.6 26.6 23.3 28.1 43.1 25.6 31 35.3 30.5 0 ...
##  $ DiabetesPedigreeFunction: num  0.627 0.351 0.672 0.167 2.288 ...
##  $ Age                     : int  50 31 32 21 33 30 26 29 53 54 ...
##  $ Outcome                 : int  1 0 1 0 1 0 1 0 1 1 ...

Se identificaron 768 observaciones y 9 variables. La variable respuesta corresponde a Outcome, mientras que las demás variables representan características clínicas y demográficas que serán utilizadas como variables explicativas durante el proceso de modelamiento.

5. Exploración y preparación de los datos

Antes de construir los modelos estadísticos, se realiza una exploración inicial de la base de datos con el fin de identificar las variables disponibles, revisar su comportamiento y preparar aquellas que serán utilizadas en el análisis cuantitativo.

En esta base, algunas variables clínicas presentan valores iguales a cero que no son clínicamente plausibles, por ejemplo glucosa, presión arterial, índice de masa corporal, insulina y grosor del pliegue cutáneo. Por tanto, estos valores se tratan como datos faltantes para evitar que sean interpretados como mediciones reales.

names(datos)
## [1] "Pregnancies"              "Glucose"                 
## [3] "BloodPressure"            "SkinThickness"           
## [5] "Insulin"                  "BMI"                     
## [7] "DiabetesPedigreeFunction" "Age"                     
## [9] "Outcome"
variables_cero <- c("Glucose", "BloodPressure", "SkinThickness", "Insulin", "BMI")

datos_limpios <- datos
for (v in variables_cero) {
  datos_limpios[[v]][datos_limpios[[v]] == 0] <- NA
}

colSums(is.na(datos_limpios))
##              Pregnancies                  Glucose            BloodPressure 
##                        0                        5                       35 
##            SkinThickness                  Insulin                      BMI 
##                      227                      374                       11 
## DiabetesPedigreeFunction                      Age                  Outcome 
##                        0                        0                        0

La depuración de la base permite mejorar la calidad del análisis, dado que valores clínicamente improbables pueden afectar la estimación de los coeficientes y la evaluación del desempeño del modelo. Esta etapa es fundamental porque la validez del modelamiento depende en gran medida de la calidad de los datos utilizados.

6. Estadísticas descriptivas

Se realiza una descripción general de las variables con el propósito de identificar medidas de tendencia central, dispersión y distribución de la variable respuesta.

summary(datos_limpios)
##   Pregnancies        Glucose      BloodPressure    SkinThickness  
##  Min.   : 0.000   Min.   : 44.0   Min.   : 24.00   Min.   : 7.00  
##  1st Qu.: 1.000   1st Qu.: 99.0   1st Qu.: 64.00   1st Qu.:22.00  
##  Median : 3.000   Median :117.0   Median : 72.00   Median :29.00  
##  Mean   : 3.845   Mean   :121.7   Mean   : 72.41   Mean   :29.15  
##  3rd Qu.: 6.000   3rd Qu.:141.0   3rd Qu.: 80.00   3rd Qu.:36.00  
##  Max.   :17.000   Max.   :199.0   Max.   :122.00   Max.   :99.00  
##                   NAs    :5       NAs    :35       NAs    :227    
##     Insulin            BMI        DiabetesPedigreeFunction      Age       
##  Min.   : 14.00   Min.   :18.20   Min.   :0.0780           Min.   :21.00  
##  1st Qu.: 76.25   1st Qu.:27.50   1st Qu.:0.2437           1st Qu.:24.00  
##  Median :125.00   Median :32.30   Median :0.3725           Median :29.00  
##  Mean   :155.55   Mean   :32.46   Mean   :0.4719           Mean   :33.24  
##  3rd Qu.:190.00   3rd Qu.:36.60   3rd Qu.:0.6262           3rd Qu.:41.00  
##  Max.   :846.00   Max.   :67.10   Max.   :2.4200           Max.   :81.00  
##  NAs    :374      NAs    :11                                              
##     Outcome     
##  Min.   :0.000  
##  1st Qu.:0.000  
##  Median :0.000  
##  Mean   :0.349  
##  3rd Qu.:1.000  
##  Max.   :1.000  
## 
tabla_outcome <- table(datos$Outcome)
prop_outcome <- prop.table(tabla_outcome)

tabla_outcome
## 
##   0   1 
## 500 268
round(prop_outcome, 3)
## 
##     0     1 
## 0.651 0.349

La variable Outcome muestra la distribución de pacientes con y sin diabetes en la base de datos. Esta revisión es importante porque, en modelos de clasificación, la proporción de casos positivos y negativos puede influir en la interpretación de métricas como exactitud, sensibilidad y especificidad.

7. Visualización de variables clínicas

Con el propósito de complementar el análisis descriptivo, se generan representaciones gráficas que permiten visualizar la distribución de la glucosa, la relación entre edad y glucosa, y las diferencias de glucosa e índice de masa corporal según la presencia o ausencia de diabetes.

hist(datos_limpios$Glucose,
     main = "Distribución de los niveles de glucosa",
     xlab = "Glucosa",
     col = "lightblue",
     border = "white")

El histograma permite observar el comportamiento general de los niveles de glucosa. Esta variable es clínicamente relevante porque representa uno de los principales criterios asociados con el diagnóstico y seguimiento de la diabetes.

plot(datos_limpios$Age, datos_limpios$Glucose,
     main = "Relación entre edad y glucosa",
     xlab = "Edad",
     ylab = "Glucosa",
     pch = 19,
     col = "gray")
abline(lm(Glucose ~ Age, data = datos_limpios), col = "red", lwd = 2)

La relación entre edad y glucosa permite evaluar si existe una tendencia positiva entre ambas variables. Aunque la relación no es perfecta, se observa un patrón que justifica considerar la edad dentro de los modelos explicativos y predictivos.

boxplot(Glucose ~ Outcome, data = datos_limpios,
        main = "Glucosa según presencia de diabetes",
        xlab = "Diabetes (0 = No, 1 = Sí)",
        ylab = "Glucosa",
        col = c("lightgray", "lightblue"))

boxplot(BMI ~ Outcome, data = datos_limpios,
        main = "BMI según presencia de diabetes",
        xlab = "Diabetes (0 = No, 1 = Sí)",
        ylab = "BMI",
        col = c("lightgray", "lightblue"))

Los diagramas de caja permiten observar que los pacientes clasificados con diabetes tienden a presentar mayores valores de glucosa y, en algunos casos, mayor índice de masa corporal. Estos hallazgos respaldan la inclusión de estas variables en el modelo logístico.

8. Análisis de correlación

Para verificar la relación lineal entre las variables numéricas y detectar posibles problemas de multicolinealidad, se calcula la matriz de correlación de Pearson.

variables_cor <- datos_limpios[, c("Pregnancies", "Glucose", "BloodPressure",
                                   "SkinThickness", "Insulin", "BMI",
                                   "DiabetesPedigreeFunction", "Age")]

round(cor(variables_cor, use = "complete.obs", method = "pearson"), 3)
##                          Pregnancies Glucose BloodPressure SkinThickness
## Pregnancies                    1.000   0.198         0.213         0.093
## Glucose                        0.198   1.000         0.210         0.199
## BloodPressure                  0.213   0.210         1.000         0.233
## SkinThickness                  0.093   0.199         0.233         1.000
## Insulin                        0.079   0.581         0.099         0.182
## BMI                           -0.025   0.210         0.304         0.664
## DiabetesPedigreeFunction       0.008   0.140        -0.016         0.160
## Age                            0.680   0.344         0.300         0.168
##                          Insulin    BMI DiabetesPedigreeFunction   Age
## Pregnancies                0.079 -0.025                    0.008 0.680
## Glucose                    0.581  0.210                    0.140 0.344
## BloodPressure              0.099  0.304                   -0.016 0.300
## SkinThickness              0.182  0.664                    0.160 0.168
## Insulin                    1.000  0.226                    0.136 0.217
## BMI                        0.226  1.000                    0.159 0.070
## DiabetesPedigreeFunction   0.136  0.159                    1.000 0.085
## Age                        0.217  0.070                    0.085 1.000

La matriz de correlación permite identificar asociaciones entre las variables clínicas. Correlaciones muy altas entre variables explicativas podrían indicar multicolinealidad; sin embargo, en esta base no se observan correlaciones extremas que impidan continuar con el modelamiento. La interpretación debe mantenerse cuidadosa porque las variables clínicas pueden estar relacionadas entre sí desde el punto de vista fisiopatológico.

9. Modelo 1: regresión lineal múltiple para explicar niveles de glucosa

Como primera aproximación, se construye un modelo de regresión lineal múltiple usando como variable dependiente la glucosa y como variables explicativas la edad, el índice de masa corporal y la presión arterial. Este modelo permite evaluar la capacidad explicativa de variables clínicas sobre una variable continua.

datos_lineal <- na.omit(datos_limpios[, c("Glucose", "Age", "BMI", "BloodPressure")])

modelo_lineal <- lm(Glucose ~ Age + BMI + BloodPressure,
                    data = datos_lineal)

summary(modelo_lineal)
## 
## Call:
## lm(formula = Glucose ~ Age + BMI + BloodPressure, data = datos_lineal)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -74.266 -20.145  -2.425  16.733  87.553 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   57.27920    7.33514   7.809 2.04e-14 ***
## Age            0.59871    0.09670   6.191 1.00e-09 ***
## BMI            0.85492    0.16307   5.243 2.08e-07 ***
## BloodPressure  0.23314    0.09593   2.430   0.0153 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 28.84 on 720 degrees of freedom
## Multiple R-squared:  0.1241, Adjusted R-squared:  0.1205 
## F-statistic:    34 on 3 and 720 DF,  p-value: < 2.2e-16
pred_lineal <- predict(modelo_lineal)
res_lineal <- residuals(modelo_lineal)

RMSE_lineal <- sqrt(mean(res_lineal^2))
R2_lineal <- summary(modelo_lineal)$r.squared
R2_ajustado_lineal <- summary(modelo_lineal)$adj.r.squared

data.frame(
  Indicador = c("R2", "R2 ajustado", "RMSE"),
  Valor = round(c(R2_lineal, R2_ajustado_lineal, RMSE_lineal), 4)
)
##     Indicador   Valor
## 1          R2  0.1241
## 2 R2 ajustado  0.1205
## 3        RMSE 28.7589

Interpretación del Modelo 1

El modelo lineal evidencia que la edad, el índice de masa corporal y la presión arterial presentan relación estadística con los niveles de glucosa. Sin embargo, el coeficiente de determinación es limitado, lo que indica que estas variables explican solo una parte de la variabilidad de la glucosa. Esto sugiere que existen otros factores metabólicos, genéticos o clínicos no incluidos en el modelo que también influyen sobre los niveles de glucosa.

10. Validación de supuestos del Modelo 1

Una vez estimado el modelo lineal, se procede a verificar gráficamente los supuestos básicos de la regresión: linealidad, normalidad de los residuos, homocedasticidad y presencia de observaciones influyentes.

par(mfrow = c(2, 2))
plot(modelo_lineal)

par(mfrow = c(1, 1))

shapiro.test(residuals(modelo_lineal))
## 
##  Shapiro-Wilk normality test
## 
## data:  residuals(modelo_lineal)
## W = 0.9839, p-value = 3.806e-07

Interpretación de los supuestos

Los gráficos diagnósticos permiten evaluar si el modelo lineal representa adecuadamente los datos observados. En bases clínicas es frecuente encontrar desviaciones parciales de normalidad o presencia de observaciones influyentes, por lo que la validación debe interpretarse de manera conjunta con la utilidad del modelo y su capacidad explicativa. La prueba de Shapiro-Wilk complementa la evaluación gráfica de la normalidad de los residuos.

11. Modelo 2: regresión logística inicial para presencia de diabetes

Dado que la variable Outcome es dicotómica, se ajusta un modelo de regresión logística para estimar la probabilidad de presentar diabetes a partir de glucosa, índice de masa corporal y edad. Este modelo se considera clínicamente interpretable porque utiliza variables de fácil disponibilidad.

datos_logit <- na.omit(datos_limpios[, c("Outcome", "Glucose", "BMI", "Age")])

modelo_logit_inicial <- glm(Outcome ~ Glucose + BMI + Age,
                            data = datos_logit,
                            family = binomial)

summary(modelo_logit_inicial)
## 
## Call:
## glm(formula = Outcome ~ Glucose + BMI + Age, family = binomial, 
##     data = datos_logit)
## 
## Coefficients:
##              Estimate Std. Error z value Pr(>|z|)    
## (Intercept) -9.032377   0.711037 -12.703  < 2e-16 ***
## Glucose      0.035548   0.003481  10.212  < 2e-16 ***
## BMI          0.089753   0.014377   6.243  4.3e-10 ***
## Age          0.028699   0.007809   3.675 0.000238 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 974.75  on 751  degrees of freedom
## Residual deviance: 724.96  on 748  degrees of freedom
## AIC: 732.96
## 
## Number of Fisher Scoring iterations: 4
OR_inicial <- exp(coef(modelo_logit_inicial))
IC_inicial <- exp(confint.default(modelo_logit_inicial))

data.frame(
  Variable = names(OR_inicial),
  OR = round(OR_inicial, 3),
  IC_2.5 = round(IC_inicial[, 1], 3),
  IC_97.5 = round(IC_inicial[, 2], 3)
)
##                Variable    OR IC_2.5 IC_97.5
## (Intercept) (Intercept) 0.000  0.000   0.000
## Glucose         Glucose 1.036  1.029   1.043
## BMI                 BMI 1.094  1.064   1.125
## Age                 Age 1.029  1.013   1.045

Interpretación del Modelo 2

El modelo logístico inicial permite estimar la probabilidad de presentar diabetes. Los coeficientes positivos indican que, al aumentar la glucosa, el índice de masa corporal o la edad, se incrementa la probabilidad estimada del evento. La transformación de los coeficientes a Odds Ratio facilita la interpretación: valores superiores a 1 indican aumento en las probabilidades de presentar diabetes.

12. Validación y desempeño del Modelo 2

El desempeño predictivo del modelo logístico inicial se evalúa mediante matriz de confusión, exactitud, sensibilidad, especificidad, AIC, BIC y pseudo R² de McFadden.

metricas_clasificacion <- function(modelo, datos_base, corte = 0.5) {
  prob <- predict(modelo, type = "response")
  pred <- ifelse(prob >= corte, 1, 0)
  obs <- datos_base$Outcome
  
  matriz <- table(Observado = obs, Predicho = pred)
  
  exactitud <- mean(pred == obs)
  sensibilidad <- sum(pred == 1 & obs == 1) / sum(obs == 1)
  especificidad <- sum(pred == 0 & obs == 0) / sum(obs == 0)
  
  list(
    Matriz = matriz,
    Indicadores = data.frame(
      Exactitud = round(exactitud, 3),
      Sensibilidad = round(sensibilidad, 3),
      Especificidad = round(especificidad, 3)
    )
  )
}

desempeno_inicial <- metricas_clasificacion(modelo_logit_inicial, datos_logit)

desempeno_inicial$Matriz
##          Predicho
## Observado   0   1
##         0 429  59
##         1 114 150
desempeno_inicial$Indicadores
##   Exactitud Sensibilidad Especificidad
## 1      0.77        0.568         0.879
pseudo_R2_inicial <- 1 - as.numeric(logLik(modelo_logit_inicial) / logLik(update(modelo_logit_inicial, . ~ 1)))

data.frame(
  Indicador = c("AIC", "BIC", "Pseudo R2 de McFadden"),
  Valor = round(c(AIC(modelo_logit_inicial), BIC(modelo_logit_inicial), pseudo_R2_inicial), 4)
)
##               Indicador    Valor
## 1                   AIC 732.9579
## 2                   BIC 751.4489
## 3 Pseudo R2 de McFadden   0.2563

Interpretación del desempeño

La exactitud permite conocer la proporción total de clasificaciones correctas. La sensibilidad evalúa la capacidad del modelo para identificar correctamente a los pacientes con diabetes, mientras que la especificidad mide la identificación correcta de pacientes sin diabetes. En gestión sanitaria, estas métricas son relevantes porque un modelo no solo debe ajustarse estadísticamente, sino también aportar utilidad práctica para orientar decisiones clínicas y administrativas.

13. Modelo 3: regresión logística ampliada

Se construye un modelo logístico ampliado incorporando un mayor número de variables clínicas. Este modelo permite evaluar si la inclusión de variables adicionales mejora la capacidad predictiva frente al modelo logístico inicial.

variables_ampliadas <- c("Outcome", "Pregnancies", "Glucose", "BloodPressure",
                         "SkinThickness", "Insulin", "BMI",
                         "DiabetesPedigreeFunction", "Age")

datos_logit_ampliado <- na.omit(datos_limpios[, variables_ampliadas])

modelo_logit_inicial_comp <- glm(Outcome ~ Glucose + BMI + Age,
                                 data = datos_logit_ampliado,
                                 family = binomial)

modelo_logit_ampliado <- glm(Outcome ~ Pregnancies + Glucose + BloodPressure +
                               SkinThickness + Insulin + BMI +
                               DiabetesPedigreeFunction + Age,
                             data = datos_logit_ampliado,
                             family = binomial)

summary(modelo_logit_ampliado)
## 
## Call:
## glm(formula = Outcome ~ Pregnancies + Glucose + BloodPressure + 
##     SkinThickness + Insulin + BMI + DiabetesPedigreeFunction + 
##     Age, family = binomial, data = datos_logit_ampliado)
## 
## Coefficients:
##                            Estimate Std. Error z value Pr(>|z|)    
## (Intercept)              -1.004e+01  1.218e+00  -8.246  < 2e-16 ***
## Pregnancies               8.216e-02  5.543e-02   1.482  0.13825    
## Glucose                   3.827e-02  5.768e-03   6.635 3.24e-11 ***
## BloodPressure            -1.420e-03  1.183e-02  -0.120  0.90446    
## SkinThickness             1.122e-02  1.708e-02   0.657  0.51128    
## Insulin                  -8.253e-04  1.306e-03  -0.632  0.52757    
## BMI                       7.054e-02  2.734e-02   2.580  0.00989 ** 
## DiabetesPedigreeFunction  1.141e+00  4.274e-01   2.669  0.00760 ** 
## Age                       3.395e-02  1.838e-02   1.847  0.06474 .  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 498.10  on 391  degrees of freedom
## Residual deviance: 344.02  on 383  degrees of freedom
## AIC: 362.02
## 
## Number of Fisher Scoring iterations: 5
OR_ampliado <- exp(coef(modelo_logit_ampliado))
IC_ampliado <- exp(confint.default(modelo_logit_ampliado))

data.frame(
  Variable = names(OR_ampliado),
  OR = round(OR_ampliado, 3),
  IC_2.5 = round(IC_ampliado[, 1], 3),
  IC_97.5 = round(IC_ampliado[, 2], 3)
)
##                                          Variable    OR IC_2.5 IC_97.5
## (Intercept)                           (Intercept) 0.000  0.000   0.000
## Pregnancies                           Pregnancies 1.086  0.974   1.210
## Glucose                                   Glucose 1.039  1.027   1.051
## BloodPressure                       BloodPressure 0.999  0.976   1.022
## SkinThickness                       SkinThickness 1.011  0.978   1.046
## Insulin                                   Insulin 0.999  0.997   1.002
## BMI                                           BMI 1.073  1.017   1.132
## DiabetesPedigreeFunction DiabetesPedigreeFunction 3.130  1.354   7.233
## Age                                           Age 1.035  0.998   1.072

Interpretación del Modelo 3

El modelo ampliado permite evaluar el aporte de variables como número de embarazos, presión arterial, insulina, grosor del pliegue cutáneo y antecedentes familiares. No obstante, incluir más variables también incrementa la complejidad del modelo y puede reducir el número de observaciones disponibles cuando existen datos faltantes. Por esta razón, su utilidad debe analizarse no solo con criterios estadísticos, sino también con criterios de interpretabilidad y aplicabilidad.

14. Comparación entre modelos logísticos

Finalmente, se comparan el modelo logístico inicial y el modelo logístico ampliado mediante prueba de razón de verosimilitud, AIC, BIC, pseudo R² y métricas de clasificación.

anova(modelo_logit_inicial_comp, modelo_logit_ampliado, test = "Chisq")
## Analysis of Deviance Table
## 
## Model 1: Outcome ~ Glucose + BMI + Age
## Model 2: Outcome ~ Pregnancies + Glucose + BloodPressure + SkinThickness + 
##     Insulin + BMI + DiabetesPedigreeFunction + Age
##   Resid. Df Resid. Dev Df Deviance Pr(>Chi)  
## 1       388     354.37                       
## 2       383     344.02  5   10.344  0.06605 .
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
AIC(modelo_logit_inicial_comp, modelo_logit_ampliado)
##                           df      AIC
## modelo_logit_inicial_comp  4 362.3656
## modelo_logit_ampliado      9 362.0212
BIC(modelo_logit_inicial_comp, modelo_logit_ampliado)
##                           df      BIC
## modelo_logit_inicial_comp  4 378.2506
## modelo_logit_ampliado      9 397.7626
pseudo_R2_inicial_comp <- 1 - as.numeric(logLik(modelo_logit_inicial_comp) / logLik(update(modelo_logit_inicial_comp, . ~ 1)))
pseudo_R2_ampliado <- 1 - as.numeric(logLik(modelo_logit_ampliado) / logLik(update(modelo_logit_ampliado, . ~ 1)))

data.frame(
  Modelo = c("Logístico inicial", "Logístico ampliado"),
  Pseudo_R2_McFadden = round(c(pseudo_R2_inicial_comp, pseudo_R2_ampliado), 4),
  AIC = round(c(AIC(modelo_logit_inicial_comp), AIC(modelo_logit_ampliado)), 2),
  BIC = round(c(BIC(modelo_logit_inicial_comp), BIC(modelo_logit_ampliado)), 2)
)
##               Modelo Pseudo_R2_McFadden    AIC    BIC
## 1  Logístico inicial             0.2886 362.37 378.25
## 2 Logístico ampliado             0.3093 362.02 397.76
desempeno_inicial_comp <- metricas_clasificacion(modelo_logit_inicial_comp, datos_logit_ampliado)
desempeno_ampliado <- metricas_clasificacion(modelo_logit_ampliado, datos_logit_ampliado)

desempeno_inicial_comp$Indicadores
##   Exactitud Sensibilidad Especificidad
## 1     0.796          0.6         0.893
desempeno_ampliado$Indicadores
##   Exactitud Sensibilidad Especificidad
## 1     0.783        0.569         0.889

Interpretación de la comparación

La comparación permite determinar si el aumento en la complejidad del modelo ampliado se justifica por una mejora real en el desempeño. Si el modelo ampliado presenta menor AIC, mayor pseudo R² y una prueba de razón de verosimilitud significativa, puede considerarse que aporta información adicional. Sin embargo, cuando el BIC o las métricas de clasificación favorecen al modelo más simple, debe considerarse el principio de parsimonia.

En esta base, el modelo logístico inicial conserva una ventaja importante: es más simple, utiliza variables clínicas de fácil disponibilidad y mantiene buena interpretabilidad. El modelo ampliado permite explorar más factores, pero depende de variables con mayor proporción de datos faltantes.

15. Validación gráfica del modelo logístico seleccionado

Se revisan las probabilidades estimadas y los residuos de deviance del modelo logístico inicial, dado que constituye una alternativa parsimoniosa y clínicamente interpretable.

prob_inicial <- predict(modelo_logit_inicial, type = "response")
resid_dev <- residuals(modelo_logit_inicial, type = "deviance")

boxplot(prob_inicial ~ datos_logit$Outcome,
        main = "Probabilidades estimadas según diagnóstico",
        xlab = "Outcome observado (0 = No diabetes, 1 = Diabetes)",
        ylab = "Probabilidad estimada",
        col = c("lightgray", "lightblue"))

plot(prob_inicial, resid_dev,
     main = "Residuos de deviance vs probabilidad estimada",
     xlab = "Probabilidad estimada",
     ylab = "Residuo de deviance",
     pch = 19,
     col = "gray")
abline(h = 0, col = "red", lwd = 2)

Interpretación de la validación gráfica

La distribución de probabilidades estimadas permite observar si el modelo asigna mayores probabilidades a los pacientes con diabetes. Por su parte, el análisis de residuos de deviance ayuda a identificar posibles observaciones con errores importantes de clasificación o patrones no explicados por el modelo. Esta validación complementa las métricas numéricas y fortalece la evaluación del desempeño.

16. Método de momentos para la variable Pregnancies

Como análisis complementario, se evalúa si la variable número de embarazos puede aproximarse a una distribución de Poisson. En una distribución Poisson, la media y la varianza deberían ser aproximadamente iguales.

media_preg <- mean(datos$Pregnancies, na.rm = TRUE)
var_preg <- var(datos$Pregnancies, na.rm = TRUE)
lambda <- media_preg

data.frame(
  Estadistico = c("Media", "Varianza", "Lambda estimado"),
  Valor = round(c(media_preg, var_preg, lambda), 3)
)
##       Estadistico  Valor
## 1           Media  3.845
## 2        Varianza 11.354
## 3 Lambda estimado  3.845

Interpretación del método de momentos

El método de momentos estima el parámetro lambda mediante la media muestral. Sin embargo, si la varianza es considerablemente mayor que la media, existe sobredispersión. En ese caso, una distribución Poisson simple no describe de forma adecuada el comportamiento de la variable Pregnancies, lo cual evidencia la importancia de validar los supuestos del modelo antes de aceptar una distribución teórica.

17. Conclusiones

El análisis permitió desarrollar y validar modelos estadísticos aplicados a una base clínica de diabetes. Inicialmente, el modelo de regresión lineal múltiple mostró que variables como edad, índice de masa corporal y presión arterial aportan información para explicar los niveles de glucosa, aunque la variabilidad explicada es limitada.

El modelo de regresión logística permitió evaluar la probabilidad de presentar diabetes a partir de variables clínicas relevantes. La glucosa, el índice de masa corporal y la edad constituyen predictores importantes y de fácil interpretación clínica. La evaluación mediante matriz de confusión, sensibilidad, especificidad, AIC, BIC y pseudo R² permitió valorar la capacidad predictiva del modelo.

La comparación entre el modelo logístico inicial y el modelo logístico ampliado evidenció que la inclusión de más variables debe evaluarse cuidadosamente, ya que puede aumentar la complejidad del modelo y reducir la cantidad de observaciones disponibles debido a datos faltantes. Por tanto, la selección del modelo final debe considerar tanto el desempeño estadístico como la interpretabilidad y la aplicabilidad en gestión sanitaria.

Finalmente, el método de momentos mostró que la variable número de embarazos presenta sobredispersión frente a una distribución Poisson simple. Este hallazgo resalta la importancia de validar supuestos antes de aceptar un modelo matemático. En conjunto, los resultados evidencian la utilidad del modelamiento estadístico para apoyar decisiones en salud basadas en evidencia cuantitativa.

18. Referencias

James, G., Witten, D., Hastie, T., & Tibshirani, R. (2021). An Introduction to Statistical Learning with Applications in R (2nd ed.). Springer.

Kuhn, M., & Johnson, K. (2013). Applied Predictive Modeling. Springer.

R Core Team. (2025). R: A Language and Environment for Statistical Computing. R Foundation for Statistical Computing. https://www.r-project.org/

Smith, J. W., Everhart, J. E., Dickson, W. C., Knowler, W. C., & Johannes, R. S. (1988). Using the ADAP learning algorithm to forecast the onset of diabetes mellitus. Proceedings of the Annual Symposium on Computer Application in Medical Care, 261–265.

Steyerberg, E. W. (2019). Clinical Prediction Models: A Practical Approach to Development, Validation, and Updating (2nd ed.). Springer.