En este trabajo analizaremos el dataset Medical Cost Personal Datasets (obtenido de Kaggle). El objetivo es aplicar la metodología de regresión lineal simple para entender cómo la Edad influye en los Costos Médicos.

Datos:

datos <- read.csv("insurance.csv")

head(datos)
##   age    sex    bmi children smoker    region   charges
## 1  19 female 27.900        0    yes southwest 16884.924
## 2  18   male 33.770        1     no southeast  1725.552
## 3  28   male 33.000        3     no southeast  4449.462
## 4  33   male 22.705        0     no northwest 21984.471
## 5  32   male 28.880        0     no northwest  3866.855
## 6  31 female 25.740        0     no southeast  3756.622

Siguiendo la metodología, primero analizamos visual y matemáticamente si existe una relación lineal entre la Edad (\(X\)) y el Costo (\(Y\)).

plot(datos$age, datos$charges, 
     main = "Dispersión: Edad vs Costos Médicos",
     xlab = "Edad del Paciente", 
     ylab = "Costo del Seguro ($)", 
     col = "steelblue", pch = 19)

correlacion <- cor.test(datos$age, datos$charges)
correlacion
## 
##  Pearson's product-moment correlation
## 
## data:  datos$age and datos$charges
## t = 11.453, df = 1336, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  0.2494139 0.3470381
## sample estimates:
##       cor 
## 0.2990082

Interpretación:

el coeficiente de correlación es de 0.3. Existe una relación positiva: a mayor edad, mayor es el costo del seguro.

3. Creación del Modelo

Utilizamos la función lm() para generar el modelo de regresión lineal.

modelo_seguro <- lm(charges ~ age, data = datos)

summary(modelo_seguro)
## 
## Call:
## lm(formula = charges ~ age, data = datos)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
##  -8059  -6671  -5939   5440  47829 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   3165.9      937.1   3.378 0.000751 ***
## age            257.7       22.5  11.453  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 11560 on 1336 degrees of freedom
## Multiple R-squared:  0.08941,    Adjusted R-squared:  0.08872 
## F-statistic: 131.2 on 1 and 1336 DF,  p-value: < 2.2e-16

4. Validación del Modelo

Basándonos en el summary anterior, respondemos las preguntas de validación estadística:

A. ¿El modelo es válido? Observamos el F-statistic y su p-value (al final del resumen). Resultado: El p-value es < 2.2e-16 (menor a 0.05). * Conclusión: Rechazamos la hipótesis nula. El modelo es estadísticamente válido y la relación no es producto del azar.

B. ¿Cuánto explica el modelo? Observamos el Adjusted R-squared. Resultado: 0.089 (aprox). Conclusión: La edad explica el 8.9% de la variabilidad en los costos médicos. Aunque parece bajo, es significativo. El resto de la variabilidad se debe a factores que no estamos usando en este modelo simple, como “fumar” o “BMI”.

C. ¿La variable Edad aporta al modelo? Observamos los coeficientes de la variable age. Resultado: Tiene 3 asteriscos y un p-value muy bajo. Conclusión: Sí, la edad aporta significativamente a la predicción del costo.


5. Predicción y Ecuación

Según los coeficientes obtenidos (Intercept y age), nuestra ecuación de la recta es:

\[ Costo = 3165.89 + 257.72 (Edad) \]

Ejemplo de Predicción: Si una persona tiene 50 años, el modelo predice:

\[ Costo = 3165.89 + (257.72 \times 50) = 16,051.89 \]

Comprobación con R:

nuevo_dato <- data.frame(age = 50)
predict(modelo_seguro, nuevo_dato)
##        1 
## 16052.02

Finalmente, visualizamos la línea de tendencia sobre nuestros datos reales.

plot(datos$age, datos$charges, 
     main = "Modelo de Regresión: Edad vs Costo",
     xlab = "Edad", ylab = "Costo ($)",
     col = "lightblue", pch = 19)

abline(modelo_seguro, col = "red", lwd = 3)