En regresión logística, los coeficientes están en escala logarítmica, por lo que aplicamos la función exponencial para obtener los odds ratios.
El odds ratio para VOL indica cuánto cambian las probabilidades de CAPSULE=1 por cada unidad de aumento en VOL.
Si OR > 1: aumenta la probabilidad de CAPSULE=1 cuando aumenta VOL.
Si OR < 1: disminuye la probabilidad de CAPSULE=1 cuando aumenta VOL.
Los intervalos de confianza nos indican la precisión de la estimación.
1.5 Paso 5: Evaluar la bondad de ajuste del modelo
Code
# Instalar y cargar ResourceSelection si no está instaladoif (!require("ResourceSelection")) {install.packages("ResourceSelection")library(ResourceSelection)} else {library(ResourceSelection)}# Este código:# - Se asegura de que no haya errores de longitud.# - Ejecuta el test de Hosmer-Lemeshow correctamente.# - Muestra los valores clave de manera clara.# Eliminar casos con NA en las variables relevantesdatos_completos <-na.omit(datos[, c("CAPSULE", "VOL")])# Ajustar el modelo con los datos completosmodelo <-glm(CAPSULE ~ VOL, family = binomial, data = datos_completos)# Test de Hosmer-Lemeshow (g=10 grupos predichos)hoslem <-hoslem.test(datos_completos$CAPSULE, fitted(modelo), g =10)print(hoslem)
Hosmer and Lemeshow goodness of fit (GOF) test
data: datos_completos$CAPSULE, fitted(modelo)
X-squared = 5.8677, df = 4, p-value = 0.2092
Code
# Devianza, grados de libertad y p-valordevianza <-with(modelo, null.deviance - deviance)gl <-with(modelo, df.null - df.residual)pvalor <-with(modelo, pchisq(devianza, gl, lower.tail =FALSE))# Mostrar resultados con nombrescat("\nEstadístico Chi-cuadrado:", round(devianza, 4),"\nGrados de libertad:", gl,"\nValor-p:", round(pvalor, 4), "\n")
Estadístico Chi-cuadrado: 5.399
Grados de libertad: 1
Valor-p: 0.0201
1.5.1 Explicación
El test de Hosmer-Lemeshow evalúa si las probabilidades predichas concuerdan con las observadas.
Un valor p > 0.05 sugiere un buen ajuste (no hay diferencias significativas entre valores observados y predichos).
La diferencia de devianza (null.deviance - deviance) sigue una distribución Chi-cuadrado.
El valor p asociado a esta diferencia nos indica si nuestro modelo es significativamente mejor que un modelo nulo (sin predictores).
1.6 Paso 6: Analizar la capacidad predictiva del modelo
Code
# Instalar y cargar ResourceSelection si no está instaladoif (!require("pROC")) {install.packages("pROC")library(pROC)} else {library(pROC)}# Filtrar los datos sin valores perdidos en las variables del modelodatos_completos <-na.omit(datos[, c("CAPSULE", "VOL")])# Ajustar el modelo logístico con los datos completosmodelo <-glm(CAPSULE ~ VOL, family = binomial, data = datos_completos)# Obtener probabilidades predichasprob_pred <-predict(modelo, type ="response")# Calcular la curva ROC usando CAPSULE y las probabilidades predichascurva_roc <-roc(datos_completos$CAPSULE, prob_pred)# Graficar la curva ROCplot(curva_roc, main ="Curva ROC - Modelo logístico", col ="blue")
Code
# Calcular y mostrar el AUC (área bajo la curva)auc(curva_roc)
Area under the curve: 0.5543
1.7 Paso 7: Clasificación y evaluación del rendimiento
Code
# Instalar y cargar paquetes necesariospaquetes_necesarios <-c("knitr")for (p in paquetes_necesarios) {if (!require(p, character.only =TRUE)) {install.packages(p)library(p, character.only =TRUE) } else {library(p, character.only =TRUE) }}# Asegurar que se usen los datos completosdatos_completos <-na.omit(datos[, c("CAPSULE", "VOL")])# Ajustar modelo de regresión logísticamodelo <-glm(CAPSULE ~ VOL, family = binomial, data = datos_completos)# Obtener probabilidades predichasprob_pred <-predict(modelo, type ="response")# Clasificación con umbral de 0.5pred_class <-ifelse(prob_pred >0.5, 1, 0)# Convertir a factores con niveles definidosreal <-factor(datos_completos$CAPSULE, levels =c(0, 1))pred <-factor(pred_class, levels =c(0, 1))# Tabla de clasificacióntabla <-table(Real = real, Predicho = pred)tabla_df <-as.data.frame.matrix(tabla)# Mostrar tabla con formatoknitr::kable(tabla_df, caption ="Matriz de Confusión", align ="c")