Este estudio analiza los factores asociados con la edad de los pacientes diagnosticados con VIH/SIDA en Bogotá mediante regresión lineal múltiple. Los datos provienen de la base de datos abiertos de Colombia sobre tasas de SIDA en Bogotá, conteniendo información de 72,076 pacientes registrados desde 2015.
Hallazgos principales: - Los pacientes con diagnóstico de VIH son significativamente más jóvenes (11.12 años menos) que aquellos con diagnóstico de “Muerto” - Las mujeres tienden a ser diagnosticadas a mayor edad (4.33 años más) que los hombres - El régimen de seguridad social muestra diferencias significativas en la edad de diagnóstico - El modelo explica un 7.1% de la varianza en la edad (R² = 0.071)
El VIH/SIDA continúa siendo un problema de salud pública significativo en Colombia. Understanding the demographic patterns and factors associated with age at diagnosis is crucial for targeted prevention and treatment strategies. Este análisis busca identificar los factores sociodemográficos que se asocian con la edad de los pacientes en el momento del registro en el sistema de salud.
Objetivo General: Identificar y cuantificar los factores asociados con la edad de los pacientes con VIH/SIDA en Bogotá mediante regresión lineal múltiple.
Objetivos Específicos: 1. Analizar la distribución de edad según estado clínico (VIH, SIDA, Muerto) 2. Evaluar las diferencias de edad por sexo y régimen de seguridad social 3. Construir un modelo de regresión lineal múltiple robusto 4. Interpretar los coeficientes y su significancia clínica
Los datos fueron obtenidos de la plataforma de Datos Abiertos de Colombia (datos.gov.co), específicamente del dataset “Tasa-sida-bogota.csv”. Esta base contiene registros administrativos de pacientes con VIH/SIDA en Bogotá.
Variable Dependiente: - EDAD: Edad del
paciente (años) - Variable cuantitativa continua
Variables Independientes: - EST_CLI:
Estado clínico (VIH, SIDA, Muerto) - Variable categórica -
SEXO: Sexo del paciente (Hombre, Mujer) - Variable
categórica - REGIMEN_SEGURIDAD_SOCIAL: Tipo de afiliación
(Contributivo, Subsidiado, Especial, No Asegurado) - Variable
categórica
# Cargar los datos
datos <- read.csv2("Tasa-sida-bogota.csv", header = TRUE, stringsAsFactors = FALSE)
# Limpiar caracteres especiales que pueden causar errores en gráficos
datos[] <- lapply(datos, function(x) {
if (is.character(x)) iconv(x, from = "UTF-8", to = "ASCII//TRANSLIT") else x
})
str(datos)
## 'data.frame': 72076 obs. of 10 variables:
## $ ANO : int 2015 2015 2015 2015 2015 2015 2015 2015 2015 2015 ...
## $ EDAD : int 39 26 38 32 40 25 21 30 25 25 ...
## $ CICLOVITAL : chr "Adultez" "Juventud" "Adultez" "Adultez" ...
## $ SEXO : chr "Hombre" "Hombre" "Hombre" "Hombre" ...
## $ NACIONALIDAD : chr "Colombiano" "Colombiano" "Colombiano" "Colombiano" ...
## $ REGIMEN_SEGURIDAD_SOCIAL: chr "Especial" "Contributivo" "Contributivo" "Contributivo" ...
## $ MEC_PRO_T : chr "Hetereosxual" "Bisexual" "Hetereosxual" "Homosexual" ...
## $ EST_CLI : chr "SIDA" "VIH" "Muerto" "VIH" ...
## $ ENFOQUE_DIFERENCIAL : chr "Otro" "Otro" "Otro" "Otro" ...
## $ LOCALIDAD : chr NA NA NA NA ...
Interpretación de la estructura de datos: La base de datos original contiene 72,076 observaciones con 10 variables. La variable de interés (EDAD) es de tipo entero, mientras que las variables explicativas son de tipo carácter que necesitan ser convertidas a factores para el análisis estadístico.
# Eliminar filas con NA en las variables de interés
datos <- datos %>%
filter(!is.na(EDAD), !is.na(EST_CLI), !is.na(SEXO), !is.na(REGIMEN_SEGURIDAD_SOCIAL))
# Convertir variables categóricas a factor
datos$EST_CLI <- as.factor(datos$EST_CLI)
datos$SEXO <- as.factor(datos$SEXO)
datos$REGIMEN_SEGURIDAD_SOCIAL <- as.factor(datos$REGIMEN_SEGURIDAD_SOCIAL)
Justificación del tratamiento de datos: Se eliminaron las observaciones con valores faltantes en las variables clave para garantizar un análisis completo. La conversión a factores es esencial para que R trate correctamente las variables categóricas en el modelo de regresión.
# Comparación de edad promedio por estado clínico
ggplot(datos, aes(x = EST_CLI, y = EDAD, fill = EST_CLI)) +
geom_boxplot() +
theme_minimal() +
labs(title = "Distribución de Edad según Estado Clínico",
x = "Estado Clínico", y = "Edad")
Interpretación del boxplot: El gráfico revela patrones importantes en la distribución de edad: - Los pacientes clasificados como “Muerto” muestran la mediana de edad más alta - Los pacientes con VIH tienden a ser más jóvenes que aquellos con SIDA - Existe variabilidad considerable en todas las categorías, con presencia de valores atípicos
Esta visualización sugiere que el estado clínico está relacionado con la edad, justificando su inclusión en el modelo de regresión.
# Modelo lineal múltiple
modelo <- lm(EDAD ~ EST_CLI + SEXO + REGIMEN_SEGURIDAD_SOCIAL, data = datos)
summary(modelo)
##
## Call:
## lm(formula = EDAD ~ EST_CLI + SEXO + REGIMEN_SEGURIDAD_SOCIAL,
## data = datos)
##
## Residuals:
## Min 1Q Median 3Q Max
## -35.648 -7.403 -2.403 4.835 65.835
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 42.5246 0.2782 152.878 < 2e-16 ***
## EST_CLISIDA -4.5705 0.3113 -14.682 < 2e-16 ***
## EST_CLIVIH -11.1220 0.2783 -39.964 < 2e-16 ***
## SEXOMujer 4.3342 0.1366 31.731 < 2e-16 ***
## REGIMEN_SEGURIDAD_SOCIALEspecial 2.4363 0.5324 4.576 4.74e-06 ***
## REGIMEN_SEGURIDAD_SOCIALNo Asegurado -2.2372 0.1271 -17.596 < 2e-16 ***
## REGIMEN_SEGURIDAD_SOCIALSubsidiado 0.9115 0.1116 8.167 3.22e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 10.77 on 65063 degrees of freedom
## Multiple R-squared: 0.07109, Adjusted R-squared: 0.07101
## F-statistic: 829.9 on 6 and 65063 DF, p-value: < 2.2e-16
Interpretación detallada de los resultados:
Ecuación del modelo: EDAD = 42.52 - 4.57(EST_CLI_SIDA) - 11.12(EST_CLI_VIH) + 4.33(SEXO_Mujer) + 2.44(Especial) - 2.24(No_Asegurado) + 0.91(Subsidiado)
Análisis de coeficientes:
Intercepto (42.52): Representa la edad promedio estimada para un hombre con estado clínico “Muerto” y régimen contributivo (categorías de referencia).
EST_CLI_SIDA (-4.57, p < 2e-16): Los pacientes con SIDA son, en promedio, 4.57 años menores que aquellos clasificados como “Muerto”, manteniendo constantes las demás variables. Este resultado es estadísticamente significativo.
EST_CLI_VIH (-11.12, p < 2e-16): Los pacientes con VIH son significativamente más jóvenes (11.12 años menos) que los clasificados como “Muerto”. Este es el efecto más grande en el modelo, sugiriendo que el diagnóstico de VIH ocurre en edades más tempranas.
SEXO_Mujer (4.33, p < 2e-16): Las mujeres tienden a ser diagnosticadas 4.33 años más tarde que los hombres, controlando por otros factores. Esto podría reflejar diferencias en patrones de búsqueda de atención médica o exposición al riesgo.
Régimen de Seguridad Social:
Bondad de ajuste: - R² = 0.071: El modelo explica el 7.1% de la varianza en la edad - F-statistic = 829.9 (p < 2.2e-16): El modelo es estadísticamente significativo - Error estándar residual = 10.77: La desviación típica de los residuos
par(mfrow = c(1, 2))
hist(residuals(modelo), main = "Histograma de residuos", xlab = "Residuos")
qqnorm(residuals(modelo))
qqline(residuals(modelo), col = "red")
Interpretación de la normalidad: - El histograma de residuos muestra una distribución aproximadamente normal con ligera asimetría - El Q-Q plot revela desviaciones de la normalidad en las colas, indicando distribución más pesada que la normal - Estas desviaciones son comunes en muestras grandes y no invalidan necesariamente el modelo
plot(modelo$fitted.values, residuals(modelo),
main = "Residuos vs Valores Ajustados",
xlab = "Valores Ajustados", ylab = "Residuos")
abline(h = 0, col = "red")
Análisis de homocedasticidad: El gráfico de residuos vs valores ajustados muestra un patrón relativamente aleatorio alrededor de cero, aunque se observan algunas bandas que podrían indicar ligera heterocedasticidad.
vif(modelo)
## GVIF Df GVIF^(1/(2*Df))
## EST_CLI 1.010757 2 1.002678
## SEXO 1.023578 1 1.011720
## REGIMEN_SEGURIDAD_SOCIAL 1.032893 3 1.005408
Interpretación del VIF: - EST_CLI: GVIF^(1/(2Df)) = 1.003 - SEXO: VIF = 1.024 - REGIMEN_SEGURIDAD_SOCIAL: GVIF^(1/(2Df)) = 1.005
Todos los valores están muy por debajo de 5, indicando ausencia de multicolinealidad problemática entre las variables predictoras.
# Normalidad de residuos
shapiro.test(sample(residuals(modelo), 5000))
##
## Shapiro-Wilk normality test
##
## data: sample(residuals(modelo), 5000)
## W = 0.91815, p-value < 2.2e-16
# Prueba de Breusch-Pagan para homocedasticidad
library(lmtest)
bptest(modelo)
##
## studentized Breusch-Pagan test
##
## data: modelo
## BP = 1281.2, df = 6, p-value < 2.2e-16
Interpretación de las pruebas: - Shapiro-Wilk (W = 0.925, p < 2.2e-16): Rechaza normalidad de residuos - Breusch-Pagan (BP = 1281.2, p < 2.2e-16): Rechaza homocedasticidad
Estas violaciones son comunes en muestras grandes y, aunque estadísticamente significativas, pueden no ser problemáticas para la inferencia debido al Teorema del Límite Central.
modelo_reducido <- lm(EDAD ~ EST_CLI + SEXO, data = datos)
anova(modelo_reducido, modelo)
## Analysis of Variance Table
##
## Model 1: EDAD ~ EST_CLI + SEXO
## Model 2: EDAD ~ EST_CLI + SEXO + REGIMEN_SEGURIDAD_SOCIAL
## Res.Df RSS Df Sum of Sq F Pr(>F)
## 1 65066 7606719
## 2 65063 7551567 3 55153 158.4 < 2.2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Interpretación del test F: - F = 158.4 (p < 2.2e-16) - La inclusión de REGIMEN_SEGURIDAD_SOCIAL mejora significativamente el ajuste del modelo - La reducción en la suma de cuadrados del error justifica la complejidad adicional
modelo_interaccion <- lm(EDAD ~ EST_CLI * SEXO + REGIMEN_SEGURIDAD_SOCIAL, data = datos)
summary(modelo_interaccion)
##
## Call:
## lm(formula = EDAD ~ EST_CLI * SEXO + REGIMEN_SEGURIDAD_SOCIAL,
## data = datos)
##
## Residuals:
## Min 1Q Median 3Q Max
## -35.987 -7.364 -2.364 4.877 65.877
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 42.9698 0.3004 143.031 < 2e-16 ***
## EST_CLISIDA -4.6753 0.3370 -13.874 < 2e-16 ***
## EST_CLIVIH -11.6062 0.3015 -38.500 < 2e-16 ***
## SEXOMujer 1.3942 0.7670 1.818 0.0691 .
## REGIMEN_SEGURIDAD_SOCIALEspecial 2.4399 0.5322 4.585 4.55e-06 ***
## REGIMEN_SEGURIDAD_SOCIALNo Asegurado -2.2407 0.1271 -17.629 < 2e-16 ***
## REGIMEN_SEGURIDAD_SOCIALSubsidiado 0.9013 0.1116 8.077 6.72e-16 ***
## EST_CLISIDA:SEXOMujer 0.5008 0.8778 0.570 0.5684
## EST_CLIVIH:SEXOMujer 3.3277 0.7805 4.263 2.02e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 10.77 on 65061 degrees of freedom
## Multiple R-squared: 0.07187, Adjusted R-squared: 0.07175
## F-statistic: 629.7 on 8 and 65061 DF, p-value: < 2.2e-16
Análisis de la interacción EST_CLI × SEXO: - EST_CLI_SIDA × SEXO_Mujer (0.50, p = 0.568): No significativa - EST_CLI_VIH × SEXO_Mujer (3.33, p = 2.02e-05): Significativa
La interacción significativa indica que el efecto del sexo en la edad difiere según el estado clínico. Específicamente, la diferencia de edad entre hombres y mujeres es mayor en pacientes con VIH que en otras categorías.
ggplot(datos, aes(x = REGIMEN_SEGURIDAD_SOCIAL, y = EDAD, fill = SEXO)) +
geom_boxplot() +
facet_wrap(~EST_CLI) +
theme_minimal() +
labs(title = "Edad por Régimen, Sexo y Estado Clínico")
Esta visualización permite observar simultáneamente: - Diferencias de edad entre regímenes de seguridad social - Diferencias por sexo dentro de cada régimen - Patrones específicos para cada estado clínico
hist(datos$EDAD, breaks = 30, main = "Distribución de Edad en la Muestra",
xlab = "Edad (años)", ylab = "Frecuencia")
Características de la distribución: - Distribución aproximadamente normal con ligera asimetría positiva - Rango de edad amplio (probablemente de adolescentes a adultos mayores) - Mayor concentración en edades adultas jóvenes