En el ámbito de la gestión de recursos sanitarios, el uso de modelos matemáticos se ha convertido en una herramienta esencial para la optimización de la planificación. La sostenibilidad financiera de las instituciones de salud (aseguradoras y hospitales) depende de la capacidad de anticipar costos. La incertidumbre en la estimación del gasto médico por paciente puede llevar a errores de planificación y asignaciones ineficientes de presupuesto.
¿Es posible construir y validar un modelo matemático robusto que prediga los costos médicos individuales basándose en variables demográficas y de estilo de vida, garantizando que sus predicciones sean confiables para la toma de decisiones?
La falta de validación de estos modelos puede generar sesgos y errores que afecten la calidad del servicio. Por tanto, el objetivo es no solo ajustar un modelo, sino someterlo a un riguroso proceso de validación y testeo para evaluar su capacidad explicativa y predictiva.
Utilizaremos la base de datos de costos de seguros médicos para simular un entorno de gestión de riesgos en salud.
# Carga de datos desde el repositorio (Opción K de la guía)
url <- "https://raw.githubusercontent.com/stedy/Machine-Learning-with-R-datasets/master/insurance.csv"
datos <- read.csv(url)
# Inspección inicial
str(datos)
## 'data.frame': 1338 obs. of 7 variables:
## $ age : int 19 18 28 33 32 31 46 37 37 60 ...
## $ sex : chr "female" "male" "male" "male" ...
## $ bmi : num 27.9 33.8 33 22.7 28.9 ...
## $ children: int 0 1 3 0 0 0 1 3 2 0 ...
## $ smoker : chr "yes" "no" "no" "no" ...
## $ region : chr "southwest" "southeast" "southeast" "northwest" ...
## $ charges : num 16885 1726 4449 21984 3867 ...
summary(datos)
## age sex bmi children
## Min. :18.00 Length:1338 Min. :15.96 Min. :0.000
## 1st Qu.:27.00 Class :character 1st Qu.:26.30 1st Qu.:0.000
## Median :39.00 Mode :character Median :30.40 Median :1.000
## Mean :39.21 Mean :30.66 Mean :1.095
## 3rd Qu.:51.00 3rd Qu.:34.69 3rd Qu.:2.000
## Max. :64.00 Max. :53.13 Max. :5.000
## smoker region charges
## Length:1338 Length:1338 Min. : 1122
## Class :character Class :character 1st Qu.: 4740
## Mode :character Mode :character Median : 9382
## Mean :13270
## 3rd Qu.:16640
## Max. :63770
Verificamos las relaciones entre variables para asegurar que sean consistentes con la realidad sanitaria.
# Matriz de correlación para variables numéricas
datos_num <- datos %>% select_if(is.numeric)
cor_matrix <- cor(datos_num)
corrplot(cor_matrix, method = "circle", type = "upper", tl.col = "black")
Interpretación: Se observa una correlación positiva
entre la edad (age) y los cargos (charges),
así como con el índice de masa corporal (bmi).
Se propone un modelo de Regresión Lineal Múltiple. Este modelo busca explicar la variable dependiente (Costos Médicos) a partir de variables independientes (Edad, BMI, Hijos, Fumador, Región).
# División de datos para Validación Externa
# Se separa el 80% para entrenamiento y 20% para prueba.
set.seed(123)
index <- createDataPartition(datos$charges, p = 0.8, list = FALSE)
train_set <- datos[index, ]
test_set <- datos[-index, ]
# Ajuste del modelo con datos de entrenamiento
modelo_final <- lm(charges ~ age + bmi + children + smoker + region, data = train_set)
summary(modelo_final)
##
## Call:
## lm(formula = charges ~ age + bmi + children + smoker + region,
## data = train_set)
##
## Residuals:
## Min 1Q Median 3Q Max
## -11805.6 -2739.1 -903.9 1443.9 29556.8
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -11271.51 1085.21 -10.386 < 2e-16 ***
## age 247.22 13.23 18.692 < 2e-16 ***
## bmi 327.09 31.67 10.328 < 2e-16 ***
## children 437.22 154.20 2.835 0.00466 **
## smokeryes 24232.46 453.80 53.399 < 2e-16 ***
## regionnorthwest -515.51 532.28 -0.968 0.33302
## regionsoutheast -980.37 523.68 -1.872 0.06147 .
## regionsouthwest -1041.98 536.01 -1.944 0.05217 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 6008 on 1064 degrees of freedom
## Multiple R-squared: 0.7594, Adjusted R-squared: 0.7578
## F-statistic: 479.7 on 7 and 1064 DF, p-value: < 2.2e-16
De acuerdo con García Díaz (2025), la utilidad de un modelo radica en su capacidad para representar la realidad con precisión. A continuación, aplicamos las técnicas de validación sugeridas.
Evaluamos qué tan bien el modelo representa los datos observados utilizando el Coeficiente de Determinación (\(R^2\)).
Análisis: El valor de \(R^2\) indica la proporción de variabilidad explicada por el modelo. Un valor cercano a 0.75 sugiere que el modelo tiene una alta capacidad explicativa sobre los costos médicos, permitiendo comprender los factores de riesgo.
Más allá del ajuste, la precisión predictiva es fundamental para hacer pronósticos confiables. Utilizamos el set de datos de prueba (datos no vistos por el modelo) para calcular el Error Cuadrático Medio (ECM o RMSE).
# Predicciones sobre el conjunto de prueba
predicciones <- predict(modelo_final, newdata = test_set)
# Cálculo del RMSE (Raíz del Error Cuadrático Medio)
rmse_val <- rmse(test_set$charges, predicciones)
cat("El RMSE del modelo en datos de prueba es:", round(rmse_val, 2))
## El RMSE del modelo en datos de prueba es: 6290.48
Interpretación: El RMSE evalúa la diferencia promedio entre las predicciones y los valores observados. Este valor nos da un margen de error monetario que debe ser considerado en la reserva presupuestal.
El análisis de residuos es esencial para detectar patrones sistemáticos o sesgos.
par(mfrow = c(2, 2))
plot(modelo_final)
Diagnóstico: Si se observan patrones no aleatorios en los residuos, el modelo podría tener problemas de especificación o falta de linealidad en las relaciones, lo cual es común en costos médicos que crecen exponencialmente.
A la luz de la gestión sanitaria: * Fumadores: Ser fumador incrementa significativamente el costo médico, manteniendo las demás variables constantes. Esto valida que las relaciones son consistentes con la realidad clínica. * Edad: Existe un incremento progresivo del costo por cada año de vida, lo cual justifica políticas de prevención en poblaciones mayores.
Validez del Modelo: Se ha realizado una validación externa separando los datos, lo que garantiza que el modelo no esté sobreajustado a los datos de entrenamiento y sea generalizable a nuevos pacientes.
Capacidad Predictiva: El modelo presenta un \(R^2\) robusto, lo que indica una buena capacidad explicativa. Sin embargo, el análisis de residuos sugiere que podrían explorarse modelos no lineales (como modelos lineales generalizados o transformaciones logarítmicas) para corregir la heterocedasticidad detectada.
Impacto en la Gestión: Contar con modelos validados permite reducir la incertidumbre en la toma de decisiones y mejorar la asignación de recursos. Este modelo permite a la administración segregar pacientes de alto costo (fumadores, alto BMI) para programas de intervención temprana.
Referencias: García Díaz, C. M. (2025). Validación y testeo de un modelo. Fundación Universitaria de Ciencias de la Salud.