En el ámbito de la gestión de recursos sanitarios, la planificación financiera y la asignación eficiente de recursos dependen de la capacidad de las instituciones para anticipar el gasto asociado a la atención de sus usuarios. El costo individual de la atención no se distribuye de manera homogénea entre la población, sino que se concentra de forma marcada en subgrupos con características clínicas y conductuales específicas. Esta heterogeneidad dificulta la elaboración de presupuestos realistas y, cuando no se modela de forma adecuada, conduce a errores de planificación que comprometen tanto la sostenibilidad financiera de la institución como la equidad en el acceso a los servicios.
Los modelos matemáticos y estadísticos constituyen una herramienta esencial para abordar esta dificultad, en la medida en que permiten cuantificar la influencia de los factores que determinan el gasto y anticipar el costo esperado de nuevos usuarios. No obstante, la utilidad de un modelo no se agota en su formulación, sino que depende de su capacidad para representar con precisión la realidad y de generar predicciones confiables en contextos distintos a aquel en el que fue construido. Por ello, la validación y el testeo del modelo se convierten en un paso imprescindible antes de utilizar sus resultados para sustentar decisiones de gestión.
El problema que orienta el presente análisis consiste en determinar en qué medida un conjunto de características demográficas, antropométricas y conductuales de los usuarios permite explicar y predecir el costo individual de la atención médica, y en establecer si un modelo que incorpora relaciones no lineales e interacciones entre factores de riesgo mejora de manera significativa la capacidad explicativa y predictiva frente a un modelo lineal de referencia. En consecuencia, la pregunta de investigación se formula de la siguiente manera: ¿cómo influyen la edad, el sexo, el índice de masa corporal, el número de hijos a cargo, el hábito de fumar y la región de residencia en el costo individual de la atención médica, y qué especificación del modelo ofrece predicciones más confiables para la planificación de recursos sanitarios?
El análisis se realiza sobre el conjunto de datos
insurance.csv, que reúne información de mil trescientos
treinta y ocho usuarios y siete variables. La carga se efectúa
directamente desde un repositorio público, lo que garantiza la
reproducibilidad del procedimiento sin necesidad de autenticación.
url <- "https://raw.githubusercontent.com/stedy/Machine-Learning-with-R-datasets/master/insurance.csv"
datos <- read.csv(url, stringsAsFactors = TRUE)
# Estructura del conjunto de datos
str(datos)## 'data.frame': 1338 obs. of 7 variables:
## $ age : int 19 18 28 33 32 31 46 37 37 60 ...
## $ sex : Factor w/ 2 levels "female","male": 1 2 2 2 2 1 1 1 2 1 ...
## $ bmi : num 27.9 33.8 33 22.7 28.9 ...
## $ children: int 0 1 3 0 0 0 1 3 2 0 ...
## $ smoker : Factor w/ 2 levels "no","yes": 2 1 1 1 1 1 1 1 1 1 ...
## $ region : Factor w/ 4 levels "northeast","northwest",..: 4 3 3 2 2 3 3 2 1 2 ...
## $ charges : num 16885 1726 4449 21984 3867 ...
La verificación de la integridad de los datos es un paso previo indispensable, pues la presencia de valores faltantes o inconsistentes afectaría la estimación de los parámetros del modelo.
## [1] 1338 7
## age sex bmi children smoker region charges
## 0 0 0 0 0 0 0
##
## female male
## 662 676
##
## no yes
## 1064 274
##
## northeast northwest southeast southwest
## 324 325 364 325
El conjunto de datos no presenta valores faltantes, de modo que las 1338 observaciones se conservan íntegramente para el análisis. Las variables categóricas se encuentran balanceadas en sexo y región, mientras que la condición de fumador corresponde a una minoría de los usuarios, lo que resulta coherente con la prevalencia esperada del hábito.
El examen descriptivo permite caracterizar la distribución de la variable de respuesta y de las variables explicativas continuas, así como identificar la presencia de valores atípicos que puedan condicionar la especificación del modelo.
## age bmi children charges
## Min. :18.00 Min. :15.96 Min. :0.000 Min. : 1122
## 1st Qu.:27.00 1st Qu.:26.30 1st Qu.:0.000 1st Qu.: 4740
## Median :39.00 Median :30.40 Median :1.000 Median : 9382
## Mean :39.21 Mean :30.66 Mean :1.095 Mean :13270
## 3rd Qu.:51.00 3rd Qu.:34.69 3rd Qu.:2.000 3rd Qu.:16640
## Max. :64.00 Max. :53.13 Max. :5.000 Max. :63770
# Desviación estándar de las variables continuas
sapply(datos[, c("age", "bmi", "children", "charges")], sd)## age bmi children charges
## 14.049960 6.098187 1.205493 12110.011237
# Distribución del costo individual
hist(datos$charges, breaks = 40, col = "steelblue", border = "white",
main = "Distribución del costo individual de la atención (charges)",
xlab = "Costo (USD)", ylab = "Frecuencia")La distribución del costo individual presenta una marcada asimetría positiva, con una concentración de la mayoría de los usuarios en valores bajos y una cola derecha prolongada que corresponde a usuarios de costo elevado. Este comportamiento anticipa que el supuesto de normalidad de los residuos será difícil de satisfacer y que la cola derecha estará asociada a subgrupos específicos.
# Identificación de valores atípicos en charges mediante el criterio del rango intercuartílico
q1 <- quantile(datos$charges, 0.25)
q3 <- quantile(datos$charges, 0.75)
iqr <- q3 - q1
lim_sup <- q3 + 1.5 * iqr
atipicos <- datos[datos$charges > lim_sup, ]
# Proporción de fumadores entre los valores atípicos frente al total
prop_fum_atipicos <- mean(atipicos$smoker == "yes")
prop_fum_total <- mean(datos$smoker == "yes")
c(atipicos = nrow(atipicos),
prop_fumadores_atipicos = round(prop_fum_atipicos, 3),
prop_fumadores_total = round(prop_fum_total, 3))## atipicos prop_fumadores_atipicos prop_fumadores_total
## 139.000 0.978 0.205
El hallazgo más relevante del análisis descriptivo es que la condición de fumador concentra la práctica totalidad de los valores atípicos del costo. Mientras que los fumadores representan apenas el 20.5 por ciento del total de usuarios, constituyen el 97.8 por ciento de los casos atípicos identificados mediante el criterio del rango intercuartílico. Este resultado no es un artefacto estadístico, sino un patrón sustantivo que orienta directamente la especificación del modelo, pues sugiere que el efecto del hábito de fumar sobre el costo es de gran magnitud y que su interacción con otros factores de riesgo merece una atención particular.
boxplot(charges ~ smoker, data = datos, col = c("seagreen", "tomato"),
main = "Costo individual según condición de fumador",
xlab = "Fumador", ylab = "Costo (USD)")Con base en el análisis descriptivo se especifican dos modelos de regresión lineal múltiple estimados por mínimos cuadrados ordinarios. El primero constituye un modelo de referencia que incorpora todas las variables disponibles en forma lineal. El segundo introduce una estructura más flexible que recoge las relaciones no lineales y las interacciones sugeridas por la exploración de los datos.
# Modelo 1: especificación lineal de referencia
modelo1 <- lm(charges ~ age + sex + bmi + children + smoker + region, data = datos)
# Variable indicadora de obesidad (IMC mayor o igual a 30)
datos$obeso <- ifelse(datos$bmi >= 30, 1, 0)
# Modelo 2: término cuadrático de la edad, indicador de obesidad e
# interacción entre la condición de fumador y la obesidad
modelo2 <- lm(charges ~ age + I(age^2) + sex + bmi + children + smoker +
region + obeso + smoker:obeso, data = datos)
summary(modelo2)##
## Call:
## lm(formula = charges ~ age + I(age^2) + sex + bmi + children +
## smoker + region + obeso + smoker:obeso, data = datos)
##
## Residuals:
## Min 1Q Median 3Q Max
## -17296.4 -1656.0 -1263.3 -722.1 24160.2
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 134.2509 1362.7511 0.099 0.921539
## age -32.6851 59.8242 -0.546 0.584915
## I(age^2) 3.7316 0.7463 5.000 0.000000649662 ***
## sexmale -496.8245 244.3659 -2.033 0.042240 *
## bmi 120.0196 34.2660 3.503 0.000476 ***
## children 678.5612 105.8831 6.409 0.000000000204 ***
## smokeryes 13404.6866 439.9491 30.469 < 0.0000000000000002 ***
## regionnorthwest -279.2038 349.2746 -0.799 0.424212
## regionsoutheast -828.5467 351.6352 -2.356 0.018604 *
## regionsouthwest -1222.6437 350.5285 -3.488 0.000503 ***
## obeso -1000.1403 422.8402 -2.365 0.018159 *
## smokeryes:obeso 19810.7533 604.6567 32.764 < 0.0000000000000002 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 4445 on 1326 degrees of freedom
## Multiple R-squared: 0.8664, Adjusted R-squared: 0.8653
## F-statistic: 781.7 on 11 and 1326 DF, p-value: < 0.00000000000000022
El Modelo 2 incorpora tres elementos que responden a hipótesis sustantivas sobre la generación del costo. El término cuadrático de la edad permite capturar la aceleración del gasto en las edades avanzadas. El indicador de obesidad introduce un efecto diferencial a partir del umbral clínico del índice de masa corporal. Finalmente, la interacción entre la condición de fumador y la obesidad recoge el efecto combinado de ambos factores de riesgo, que la exploración descriptiva señaló como el principal determinante de los costos extremos.
La validación tiene por objeto evaluar si el modelo conserva su desempeño al aplicarse a observaciones distintas de las utilizadas en su estimación. Para ello se emplean dos procedimientos complementarios. En primer lugar, una partición del conjunto de datos en una muestra de entrenamiento y una muestra de prueba, que constituye una forma de validación externa simulada. En segundo lugar, una validación cruzada de diez pliegues, que evalúa la estabilidad del modelo y reduce la dependencia del resultado respecto de una única partición.
Se define previamente una función para el cálculo de la raíz del error cuadrático medio, que es la métrica de precisión predictiva utilizada a lo largo de esta sección.
# Raíz del error cuadrático medio
rmse <- function(observado, predicho) {
sqrt(mean((observado - predicho)^2))
}El conjunto de datos se divide de forma aleatoria en una muestra de entrenamiento que reúne el setenta por ciento de las observaciones y una muestra de prueba que conserva el treinta por ciento restante. Ambos modelos se estiman únicamente con la muestra de entrenamiento y se evalúan sobre la muestra de prueba, que el modelo no observó durante el ajuste.
n <- nrow(datos)
indices_entrenamiento <- sample(seq_len(n), size = 0.7 * n)
entrenamiento <- datos[indices_entrenamiento, ]
prueba <- datos[-indices_entrenamiento, ]
# Reestimación de ambos modelos sobre la muestra de entrenamiento
m1_ent <- lm(charges ~ age + sex + bmi + children + smoker + region,
data = entrenamiento)
m2_ent <- lm(charges ~ age + I(age^2) + sex + bmi + children + smoker +
region + obeso + smoker:obeso, data = entrenamiento)
# Predicción sobre la muestra de prueba y cálculo del RMSE fuera de muestra
rmse_m1_prueba <- rmse(prueba$charges, predict(m1_ent, prueba))
rmse_m2_prueba <- rmse(prueba$charges, predict(m2_ent, prueba))
c(RMSE_Modelo1 = round(rmse_m1_prueba, 1),
RMSE_Modelo2 = round(rmse_m2_prueba, 1))## RMSE_Modelo1 RMSE_Modelo2
## 5821.8 4471.3
El error de predicción fuera de muestra del Modelo 2 es de aproximadamente 4.471 dólares, frente a los 5.822 dólares del Modelo 1. La reducción del error confirma que la mayor flexibilidad del Modelo 2 no obedece a un sobreajuste a la muestra de entrenamiento, sino que se traduce en una mejora real de la capacidad predictiva sobre observaciones nuevas.
La validación cruzada divide el conjunto de datos en diez subconjuntos de tamaño aproximadamente igual. En cada iteración, nueve de ellos se utilizan para estimar el modelo y el restante se reserva para evaluarlo, de modo que cada observación participa una vez como dato de prueba. El promedio de los errores obtenidos en los diez pliegues ofrece una estimación más estable del desempeño predictivo.
k <- 10
pliegues <- sample(rep(1:k, length.out = n))
errores_m1 <- numeric(k)
errores_m2 <- numeric(k)
for (i in 1:k) {
ent <- datos[pliegues != i, ]
val <- datos[pliegues == i, ]
fit1 <- lm(charges ~ age + sex + bmi + children + smoker + region, data = ent)
fit2 <- lm(charges ~ age + I(age^2) + sex + bmi + children + smoker +
region + obeso + smoker:obeso, data = ent)
errores_m1[i] <- rmse(val$charges, predict(fit1, val))
errores_m2[i] <- rmse(val$charges, predict(fit2, val))
}
cv_m1 <- mean(errores_m1)
cv_m2 <- mean(errores_m2)
c(CV_Modelo1 = round(cv_m1, 1), CV_Modelo2 = round(cv_m2, 1))## CV_Modelo1 CV_Modelo2
## 6063.1 4429.6
La validación cruzada confirma el resultado de la partición simple. El error promedio del Modelo 2 a lo largo de los diez pliegues es de aproximadamente 4.430 dólares, sensiblemente inferior a los 6.063 dólares del Modelo 1. La coincidencia entre ambos procedimientos otorga robustez a la conclusión, pues la superioridad del Modelo 2 no depende de una partición particular de los datos.
Una vez verificada la estabilidad del modelo, se comparan ambas especificaciones en términos de bondad de ajuste y de parsimonia. Para la capacidad explicativa se emplean el coeficiente de determinación y su versión ajustada. Para el equilibrio entre ajuste y complejidad se utilizan los criterios de información de Akaike y de Bayes, que penalizan la incorporación de parámetros adicionales. Finalmente, la prueba de razón de verosimilitud, instrumentada mediante un análisis de varianza, evalúa si la mejora del Modelo 2 es estadísticamente significativa.
# Coeficientes de determinación
r2_m1 <- summary(modelo1)$r.squared
r2_m2 <- summary(modelo2)$r.squared
r2adj_m1 <- summary(modelo1)$adj.r.squared
r2adj_m2 <- summary(modelo2)$adj.r.squared
# Criterios de información
aic_m1 <- AIC(modelo1); aic_m2 <- AIC(modelo2)
bic_m1 <- BIC(modelo1); bic_m2 <- BIC(modelo2)
tabla <- data.frame(
Metrica = c("R cuadrado", "R cuadrado ajustado", "AIC", "BIC"),
Modelo1 = round(c(r2_m1, r2adj_m1, aic_m1, bic_m1), 3),
Modelo2 = round(c(r2_m2, r2adj_m2, aic_m2, bic_m2), 3)
)
tablaEl Modelo 2 explica el 86.6 por ciento de la variabilidad del costo, frente al 75.1 por ciento del Modelo 1, lo que representa una ganancia explicativa considerable. Esta mejora se sostiene incluso al penalizar la complejidad, pues tanto el criterio de Akaike como el de Bayes son menores para el Modelo 2, de modo que la incorporación de los nuevos términos compensa el costo de los parámetros añadidos. El análisis de varianza confirma que la diferencia entre ambos modelos es altamente significativa, con un valor de probabilidad muy inferior al nivel de significación convencional, lo que permite rechazar la hipótesis de que ambos modelos tienen igual capacidad de ajuste.
El diagnóstico evalúa el cumplimiento de los supuestos sobre los que descansa la validez del modelo. El análisis de residuos permite detectar patrones sistemáticos, verificar la normalidad y examinar la constancia de la varianza, mientras que el examen de la colinealidad valora la estabilidad de la interpretación de los coeficientes.
# Residuos frente a valores ajustados (homocedasticidad y linealidad)
plot(fitted(modelo2), residuals(modelo2),
main = "Residuos frente a valores ajustados (Modelo 2)",
xlab = "Valores ajustados", ylab = "Residuos",
pch = 20, col = rgb(0, 0, 0, 0.4))
abline(h = 0, col = "red", lwd = 2)El gráfico de residuos frente a valores ajustados no revela un patrón sistemático de embudo, lo que indica que la incorporación de la interacción entre fumador y obesidad absorbió buena parte de la estructura de varianza asociada a los costos elevados. La nube de puntos se distribuye de forma razonablemente equilibrada alrededor de cero, sin evidencia marcada de heterocedasticidad ni de una relación no lineal residual.
##
## Shapiro-Wilk normality test
##
## data: residuals(modelo2)
## W = 0.48202, p-value < 0.00000000000000022
# Gráfico cuantil-cuantil
qqnorm(residuals(modelo2), pch = 20, col = rgb(0, 0, 0, 0.4),
main = "Gráfico cuantil-cuantil de los residuos (Modelo 2)")
qqline(residuals(modelo2), col = "red", lwd = 2)La prueba de Shapiro-Wilk arroja un valor de probabilidad muy inferior al nivel de significación, de modo que se rechaza el supuesto de normalidad de los residuos. El gráfico cuantil-cuantil confirma este resultado, pues los puntos se ajustan a la diagonal en la parte central de la distribución pero se desvían de forma pronunciada en la cola derecha. Esta desviación es coherente con la asimetría observada en la variable de respuesta y se concentra en los usuarios de costo extremo. Como prueba complementaria, la de Kolmogorov-Smirnov conduce a la misma conclusión. La consecuencia práctica de este incumplimiento es que la inferencia sobre los coeficientes individuales debe interpretarse con cautela, aunque la capacidad predictiva del modelo, validada de forma empírica en la sección anterior, no se ve comprometida por este hecho.
# Matriz de correlación entre las variables explicativas continuas
cor(datos[, c("age", "bmi", "children")])## age bmi children
## age 1.0000000 0.1092719 0.0424690
## bmi 0.1092719 1.0000000 0.0127589
## children 0.0424690 0.0127589 1.0000000
# Factor de inflación de la varianza calculado de forma manual para las
# variables continuas, regresando cada una sobre las demás
vif_manual <- function(variable, predictoras, datos) {
formula_vif <- as.formula(paste(variable, "~", paste(predictoras, collapse = " + ")))
r2 <- summary(lm(formula_vif, data = datos))$r.squared
1 / (1 - r2)
}
c(age = vif_manual("age", c("bmi", "children"), datos),
bmi = vif_manual("bmi", c("age", "children"), datos),
children = vif_manual("children", c("age", "bmi"), datos))## age bmi children
## 1.013816 1.012152 1.001874
La matriz de correlación muestra asociaciones muy débiles entre las variables explicativas continuas, y los factores de inflación de la varianza se sitúan en valores cercanos a uno, muy por debajo del umbral de preocupación habitual. En consecuencia, no existe evidencia de colinealidad que distorsione la interpretación de los coeficientes, lo que refuerza la fiabilidad del modelo para identificar la contribución de cada factor al costo.
Los resultados convergen en una interpretación coherente con el problema planteado. El costo individual de la atención médica se explica de manera sólida a partir de las características de los usuarios, y la condición de fumador, en especial cuando coincide con la obesidad, constituye el determinante de mayor magnitud. La interacción entre ambos factores eleva de forma sustancial el costo esperado, lo que confirma que el efecto del hábito de fumar no es aditivo, sino que se amplifica en presencia de obesidad. Esta conclusión, anticipada por el análisis descriptivo y formalizada por el modelo, tiene implicaciones directas para la gestión, pues identifica un subgrupo de usuarios de alto costo sobre el cual conviene focalizar las estrategias de prevención y la previsión presupuestal.
Desde la perspectiva metodológica, el Modelo 2 demostró ser preferible al modelo lineal de referencia bajo todos los criterios examinados. Su mayor capacidad explicativa se acompañó de una mejora en la precisión predictiva fuera de muestra, verificada de forma independiente mediante la partición entrenamiento-prueba y la validación cruzada, y de un mejor desempeño en los criterios de información, que penalizan la complejidad innecesaria. El único supuesto claramente incumplido fue el de normalidad de los residuos, atribuible a la cola de usuarios de costo extremo, lo que invita a interpretar la inferencia sobre coeficientes individuales con prudencia, sin que ello afecte la validez de las predicciones.
La validación y el testeo del modelo confirmaron que la especificación que incorpora el término cuadrático de la edad, el indicador de obesidad y la interacción entre fumador y obesidad representa con mayor fidelidad la realidad del costo de la atención y genera predicciones más confiables que el modelo lineal de referencia. La coincidencia de los resultados de la partición simple y de la validación cruzada otorga robustez a esta conclusión, pues la superioridad del modelo no depende de una partición particular de los datos.
En el marco de la planificación de recursos sanitarios, un modelo validado de esta forma reduce la incertidumbre en la estimación del gasto y permite anticipar la concentración del costo en subgrupos de alto riesgo, lo que contribuye a una asignación más eficiente y equitativa de los recursos. El proceso seguido ilustra, además, que la utilidad de un modelo no se establece por su ajuste a los datos con los que fue construido, sino por su capacidad demostrada de generalizar a observaciones nuevas, principio que orienta toda decisión de gestión sustentada en evidencia cuantitativa.
Kuhn, M., & Johnson, K. (2013). Applied predictive modeling. Springer.
Raschka, S. (2018). Model evaluation, model selection, and algorithm selection in machine learning. arXiv preprint arXiv:1811.12808.
Steyerberg, E. W., & Vergouwe, Y. (2014). Towards better clinical prediction models: Seven steps for development and an ABCD for validation. European Heart Journal, 35(29), 1925-1931.