Se construirá un modelo de regresión lineal múltiple para analizar la asociación entre la proteína C reactiva ultrasensible (PCR) como variable dependiente y la cantidad de horas semanales de actividad física de intensidad moderada o vigorosa, ajustando por otras variables tales como diabetes, hipertensión, hipercolesterolemia, género, edad, estado civil, nivel educativo, índice de masa corporal y tabaquismo.
Se realizará inicialmente la construcción de un modelo automático. Se
utilizarán los algoritmos automáticos de selección de variables
(Forward
, Backward
y Stepwise
),
utilizando como criterio la reducción del Akaike Information Criterion
(AIC), que es el criterio por defecto en la función step() de R.
Los modelos resultantes de estas estrategias automáticas (modelo_regforw_cat y modelo_regforw_cont) serán evaluados y comparados en cuanto a su consistencia, significancia estadística, ajuste y plausibilidad clínica.
Luego de esto se construirá el modelo de forma manual. Se realizará entonces un análisis bivariado entre cada una de las variables predictoras y la variable dependiente con el fin de seleccionar aquellas con asociación estadísticamente significativa.
La selección de variables se realizará por dos vías complementarias:
Siendo el objetivo principal del estudio evaluar la asociación entre la pcr y las horas semanales de actividad física moderada o intensa, se incorporará inicialmente la variable hs_af como regresora y luego serán incorporadas las demás variables ordenadas según significancia estadística en el análisis bivariado. Posteriormente, se seleccionará un modelo final que será construido manualmente, priorizando la interpretación, la coherencia clínica y la robustez del ajuste observado.
El IMC será analizado primero como variable continua y luego como variable categórica (dummy), agrupado en bajo peso, peso normal, sobrepeso y obesidad.
Se trabajará con casos completos, eliminando observaciones con datos faltantes mediante la función na.omit().
La interpretación del modelo considerará únicamente asociaciones estadísticas, sin atribuir causalidad.
Luego de elegido el modelo, se realizará una evaluación rigurosa de los supuestos del modelo de regresión lineal múltiple, incluyendo:
Linealidad entre las variables independientes y la variable dependiente, evaluada mediante gráficos de residuos y pruebas específicas;
Normalidad de los residuos, verificada a través de Q-Q plots y el test de Shapiro-Wilk;
Homoscedasticidad, mediante gráficos de dispersión de residuos y el test de Breusch-Pagan;
Independencia de los errores, utilizando el test de Durbin-Watson;
Multicolinealidad entre las variables independientes, evaluada mediante el Factor de Inflación de la Varianza (VIF) y la Tolerancia, considerando como umbrales convencionales VIF > 5 y tolerancia < 0.2 como indicativos de colinealidad problemática.
Además, se va a explorar la presencia de outliers y valores influyentes mediante residuos studentizados y la distancia de Cook.
Finalmente, se analizarán posibles interacciones entre la variable regresora principal (horas semanales de actividad física) y otras variables incluidas en el modelo que podrían modificar su efecto. La actividad física puede diferir según el peso corporal (por ejemplo, personas con obesidad podrían realizar menos actividad que aquellas con normopeso, bajo peso o sobrepeso), en personas con diagnóstico de diabetes, en personas fumadoras, y también según el género. Por lo tanto, se propone evaluar las siguientes interacciones específicas:
Horas semanales de actividad física × IMC
Horas semanales de actividad física × Diabetes
Horas semanales de actividad física × Tabaquismo
Horas semanales de actividad física × Género
library(readxl)
library(dplyr)
##
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ forcats 1.0.0 ✔ readr 2.1.5
## ✔ ggplot2 3.5.1 ✔ stringr 1.5.1
## ✔ lubridate 1.9.3 ✔ tibble 3.2.1
## ✔ purrr 1.0.2 ✔ tidyr 1.3.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(parameters)
library(car)
## Cargando paquete requerido: carData
##
## Adjuntando el paquete: 'car'
##
## The following object is masked from 'package:purrr':
##
## some
##
## The following object is masked from 'package:dplyr':
##
## recode
library(lmtest)
## Warning: package 'lmtest' was built under R version 4.4.3
## Cargando paquete requerido: zoo
##
## Adjuntando el paquete: 'zoo'
##
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
library(reshape2)
##
## Adjuntando el paquete: 'reshape2'
##
## The following object is masked from 'package:tidyr':
##
## smiths
library(tableone)
library(broom)
library(kableExtra)
## Warning: package 'kableExtra' was built under R version 4.4.3
##
## Adjuntando el paquete: 'kableExtra'
##
## The following object is masked from 'package:dplyr':
##
## group_rows
library(knitr)
library(ggplot2)
library(qqplotr)
## Warning: package 'qqplotr' was built under R version 4.4.3
##
## Adjuntando el paquete: 'qqplotr'
##
## The following objects are masked from 'package:ggplot2':
##
## stat_qq_line, StatQqLine
data <- read_excel("C:/Users/Administrador/Downloads/data.xlsx")
View(data)
names(data) <- tolower(names(data))
data <- data %>% mutate(across(c("genero", "estciv", "educ", "dbt", "hta", "hipercol", "tabaq"), as.factor))
data <- data %>% mutate(imc_cat = as.factor(case_when(
imc < 18.5 ~ "bajo peso",
imc >= 18.5 & imc <25 ~ "peso normal",
imc >= 25 & imc <30 ~ "sobrepeso",
imc >= 30 ~ "obesidad"
)))
levels(data$imc_cat)
## [1] "bajo peso" "obesidad" "peso normal" "sobrepeso"
data$imc_cat <- relevel(data$imc_cat, ref = "peso normal")
levels(data$imc_cat)
## [1] "peso normal" "bajo peso" "obesidad" "sobrepeso"
data <- na.omit(data)
#Estrategia automática para la contrucción del modelo stepwise. El modelo construido en forma automática incluye todas las variables menos la edad y tiene un R2 de 0.2433. Se comparte el output del modelo atomático stepwise, aunque se realizaron también la forward y la backward.
#modelo vacío
vacio <-lm(pcr ~ 1, data=data)
completo<-lm(pcr~edad + genero + educ + estciv + hta + dbt + hipercol + imc_cat + tabaq + hs_af,data=data)
regstep<-step(completo,scope=list (lower=vacio, upper=completo),direction="both"); summary(regstep)
## Start: AIC=-199.68
## pcr ~ edad + genero + educ + estciv + hta + dbt + hipercol +
## imc_cat + tabaq + hs_af
##
## Df Sum of Sq RSS AIC
## - dbt 1 0.2913 156.69 -201.08
## - edad 1 0.4436 156.84 -200.78
## <none> 156.39 -199.68
## - estciv 1 2.2484 158.64 -197.14
## - tabaq 1 2.2619 158.66 -197.11
## - hta 1 2.2693 158.66 -197.09
## - hs_af 1 3.2694 159.66 -195.10
## - hipercol 1 3.2950 159.69 -195.04
## - educ 1 4.7502 161.14 -192.16
## - genero 1 7.8387 164.23 -186.12
## - imc_cat 3 14.9650 171.36 -176.62
##
## Step: AIC=-201.08
## pcr ~ edad + genero + educ + estciv + hta + hipercol + imc_cat +
## tabaq + hs_af
##
## Df Sum of Sq RSS AIC
## - edad 1 0.4151 157.10 -202.24
## <none> 156.69 -201.08
## + dbt 1 0.2913 156.39 -199.68
## - estciv 1 2.1137 158.80 -198.82
## - tabaq 1 2.3708 159.06 -198.31
## - hs_af 1 3.2245 159.91 -196.61
## - hipercol 1 3.3651 160.05 -196.33
## - hta 1 3.3705 160.06 -196.32
## - educ 1 4.6963 161.38 -193.69
## - genero 1 8.0634 164.75 -187.13
## - imc_cat 3 14.9871 171.67 -178.03
##
## Step: AIC=-202.24
## pcr ~ genero + educ + estciv + hta + hipercol + imc_cat + tabaq +
## hs_af
##
## Df Sum of Sq RSS AIC
## <none> 157.10 -202.24
## + edad 1 0.4151 156.69 -201.08
## + dbt 1 0.2628 156.84 -200.78
## - estciv 1 2.1070 159.21 -200.01
## - tabaq 1 2.3524 159.45 -199.52
## - hta 1 3.0808 160.18 -198.07
## - hs_af 1 3.1612 160.26 -197.91
## - hipercol 1 3.5975 160.70 -197.04
## - educ 1 4.4403 161.54 -195.38
## - genero 1 7.8969 165.00 -188.65
## - imc_cat 3 15.2141 172.31 -178.85
##
## Call:
## lm(formula = pcr ~ genero + educ + estciv + hta + hipercol +
## imc_cat + tabaq + hs_af, data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -2.21953 -0.45286 0.03096 0.46129 2.26692
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2.14396 0.12778 16.778 < 2e-16 ***
## genero1 0.32202 0.08197 3.928 0.000106 ***
## educ2 -0.24426 0.08292 -2.946 0.003469 **
## estciv1 -0.16767 0.08263 -2.029 0.043308 *
## hta1 0.21487 0.08757 2.454 0.014697 *
## hipercol1 -0.22760 0.08584 -2.651 0.008431 **
## imc_catbajo peso -0.05592 0.25394 -0.220 0.825856
## imc_catobesidad 0.62861 0.11977 5.249 2.86e-07 ***
## imc_catsobrepeso 0.28968 0.09826 2.948 0.003442 **
## tabaq1 0.21621 0.10084 2.144 0.032815 *
## hs_af -0.04073 0.01639 -2.485 0.013470 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.7154 on 307 degrees of freedom
## Multiple R-squared: 0.2672, Adjusted R-squared: 0.2433
## F-statistic: 11.19 on 10 and 307 DF, p-value: 2.556e-16
confint(regstep)
## 2.5 % 97.5 %
## (Intercept) 1.89252132 2.395400698
## genero1 0.16071635 0.483314762
## educ2 -0.40742635 -0.081094708
## estciv1 -0.33026039 -0.005074063
## hta1 0.04255363 0.387189776
## hipercol1 -0.39650193 -0.058688216
## imc_catbajo peso -0.55560071 0.443762081
## imc_catobesidad 0.39294651 0.864276198
## imc_catsobrepeso 0.09633737 0.483024365
## tabaq1 0.01778049 0.414645899
## hs_af -0.07297090 -0.008483860
Se eliminan casos con datos faltantes para permitir la ejecución del modelo de selección de variables.
Lista de variables explicativas candidatas
Modelos lineales simples
modelo_genero <- lm(pcr ~ genero, data = data)
modelo_educ <- lm(pcr ~ educ, data = data)
modelo_hta <- lm(pcr ~ hta, data = data)
modelo_hipercol <- lm(pcr ~ hipercol, data = data)
modelo_imc <- lm(pcr ~ imc, data = data)
modelo_imc_cat <- lm(pcr ~ imc_cat, data = data)
modelo_tabaq <- lm(pcr ~ tabaq, data = data)
modelo_hs_af <- lm(pcr ~ hs_af, data = data)
modelo_estciv <- lm(pcr ~ estciv, data = data)
modelo_edad <- lm(pcr ~ edad, data = data)
modelo_dbt <- lm(pcr ~ dbt, data = data)
Lista de modelos
modelos <- list(
genero = modelo_genero,
educ = modelo_educ,
hta = modelo_hta,
hipercol = modelo_hipercol,
imc = modelo_imc,
imc_cat = modelo_imc_cat,
tabaq = modelo_tabaq,
hs_af = modelo_hs_af,
estciv = modelo_estciv,
edad = modelo_edad,
dbt = modelo_dbt
)
Tabla bivariada (solo variables con p < 0.20) y ordenadas según p-valor
bivariado_manual <- purrr::map_dfr(names(modelos), function(var) {
tidy(modelos[[var]])[-1, ] %>%
mutate(
variable = var,
term = as.character(term),
estimate = round(estimate, 3),
std_error = round(std.error, 3),
p_value = signif(p.value, 3)
) %>%
filter(p_value < 0.20) %>%
select(variable, term, estimate, std_error, p_value)
})
bivariado_manual <- bivariado_manual %>% arrange(p_value)
bivariado_manual
## # A tibble: 11 × 5
## variable term estimate std_error p_value
## <chr> <chr> <dbl> <dbl> <dbl>
## 1 imc_cat imc_catobesidad 0.712 0.128 0.0000000605
## 2 imc imc 0.039 0.008 0.000000958
## 3 hipercol hipercol1 -0.385 0.09 0.0000247
## 4 hta hta1 0.383 0.095 0.0000647
## 5 genero genero1 0.349 0.092 0.000167
## 6 hs_af hs_af -0.063 0.017 0.000367
## 7 tabaq tabaq1 0.387 0.111 0.000572
## 8 educ educ2 -0.316 0.091 0.00064
## 9 imc_cat imc_catsobrepeso 0.339 0.107 0.00176
## 10 dbt dbt1 0.253 0.105 0.0171
## 11 estciv estciv1 -0.144 0.093 0.123
La variable edad
fue incluida en el análisis bivariado,
pero no aparece en la tabla ya que no cumple con el criterio de
selección inicial (p < 0.20). Tampoco fue incorporada por la
estrategia automática. No será incorporada en la construcción secuencial
del modelo multivariado, salvo para su evaluación posterior como posible
confundidora (etapa 3).
Se tomó en cuenta la plausibilidad biológica y estudios previos de asociación que justifiquen el uso de determinadas variables tales como nivel educativo y estado civil. En cuanto a ESTADO CIVIL, se encontraron algunos estudios donde se había evaluado la asociación entre el estado civil y el valor de PCR. En 2021, un artículo publicado por Salinger et al1 en más de 2000 pacientes demostró mayores niveles de PCR en personas divorciadas o separadas que en personas casadas. En 2009, Sbarra et al2 el estado civil casado fue el único factor protector para PCR elevada luego de ajustar por otras variables en una muestra de 1715 pacientes. A partir de estos trabajos y de su significación estadística así como la contribución de dicha variable al aumento del R2 en los modelos donde se lo incluye, se decide considerarla en el modelo final. Con respecto al NIVEL EDUCATIVO, aunque no representa un factor de riesgo cardiovascular clásico, la evidencia reciente ha señalado su rol como determinante social en la salud cardiovascular y en el nivel de PCR3,4. Por estos motivos, y dado que cumplen con los tres criterios establecidos (significancia estadística, comportamiento como variable confundidora y relevancia clínica), se decidió retener estas dos variables en el modelo final. En base a esto, se excluyó del modelo final la edad (no presentó p<0.20 en el análisis bivariado). Por el contrario, la diabetes (la cual además de plausibilidad biológica presenta asociación estadísticamente significativa en el análisis bivariado) dejaba de presentarla al introducirla en el modelo. Considerando que la misma puede ser confundidora o modificadora de efecto, se la incluyó en el modelo.
1 Salinger JM, Whisman MA. Marital dissolution, marital discord, and C-reactive protein: Results from The Irish Longitudinal Study on Ageing. Health Psychol. 2021 Jul;40(7):459-467.
2 Sbarra DA. Marriage protects men from clinically meaningful elevations in C-reactive protein: results from the National Social Life, Health, and Aging Project (NSHAP). Psychosom Med. 2009 Oct;71(8):828-35.
3 Park J, et al. Association between education and cardiovascular outcomes in adults: a systematic review and meta-analysis. JAMA Netw Open. 2024;7(4):e246789.
4 Nazmi A, Victora CG. Socioeconomic and racial/ethnic differentials of C-reactive protein levels: a systematic review of population-based studies. BMC Public Health. 2007 Aug 17;7:212.
comparar_coeficientes <- function(modelo_prev, modelo_actual) {
coefs_prev <- model_parameters(modelo_prev, ci = 0.95, digits = 6) %>%
filter(Parameter != "(Intercept)") %>%
select(Parameter, Coef_prev = Coefficient)
coefs_actual <- model_parameters(modelo_actual, ci = 0.95, digits = 6) %>%
filter(Parameter != "(Intercept)") %>%
select(Parameter, Coef_actual = Coefficient)
comparacion <- left_join(coefs_prev, coefs_actual, by = "Parameter") %>%
mutate(
Diferencia_relativa = round(abs(Coef_actual - Coef_prev) / abs(Coef_prev) * 100, 2),
Potencial_confundidor = ifelse(Diferencia_relativa >= 10, "Sí", "No")
)
return(comparacion)
}
actividad física
) y modelo_2
(Índice de masa corporal Categorizado
). Para el ingreso de
las variables, se ingresará primero la variable regresora hs_af (horas
de actividad física) cuya asociación con la variable resultado pcr se
encuentra en estudio según el enunciado. Luego se ingresarán las demás
variables ordenadas según significancia estadística en el análisis
bivariado.options(scipen = 999)
modelo_1 <- lm(pcr ~ hs_af, data = data)
summary(modelo_1)
##
## Call:
## lm(formula = pcr ~ hs_af, data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -2.01799 -0.58096 -0.01791 0.53003 2.84900
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2.43700 0.07553 32.264 < 0.0000000000000002 ***
## hs_af -0.06301 0.01750 -3.601 0.000367 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.8073 on 316 degrees of freedom
## Multiple R-squared: 0.03943, Adjusted R-squared: 0.03639
## F-statistic: 12.97 on 1 and 316 DF, p-value: 0.0003673
model_parameters(modelo_1, ci = 0.95, digits = 6)
## Parameter | Coefficient | SE | 95% CI | t(316) | p
## ----------------------------------------------------------------------------------
## (Intercept) | 2.436998 | 0.075534 | [ 2.288386, 2.585611] | 32.263699 | < .001
## hs af | -0.063011 | 0.017496 | [-0.097435, -0.028588] | -3.601483 | < .001
##
## Uncertainty intervals (equal-tailed) and p-values (two-tailed) computed
## using a Wald t-distribution approximation.
modelo_2 <- lm(pcr ~ hs_af + imc_cat, data = data)
summary(modelo_2)
##
## Call:
## lm(formula = pcr ~ hs_af + imc_cat, data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.75893 -0.52151 -0.05668 0.46436 2.84988
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2.11943 0.10583 20.027 < 0.0000000000000002 ***
## hs_af -0.06060 0.01675 -3.617 0.000347 ***
## imc_catbajo peso -0.06440 0.27122 -0.237 0.812473
## imc_catobesidad 0.69821 0.12597 5.542 0.0000000634 ***
## imc_catsobrepeso 0.31669 0.10562 2.998 0.002932 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.7716 on 313 degrees of freedom
## Multiple R-squared: 0.1308, Adjusted R-squared: 0.1197
## F-statistic: 11.78 on 4 and 313 DF, p-value: 0.000000006362
model_parameters(modelo_2, ci = 0.95, digits = 6)
## Parameter | Coefficient | SE | 95% CI | t(313) | p
## ------------------------------------------------------------------------------------------
## (Intercept) | 2.119432 | 0.105829 | [ 1.911206, 2.327658] | 20.026974 | < .001
## hs af | -0.060597 | 0.016753 | [-0.093560, -0.027634] | -3.617038 | < .001
## imc cat [bajo peso] | -0.064398 | 0.271224 | [-0.598050, 0.469253] | -0.237437 | 0.812
## imc cat [obesidad] | 0.698211 | 0.125974 | [ 0.450347, 0.946074] | 5.542483 | < .001
## imc cat [sobrepeso] | 0.316691 | 0.105620 | [ 0.108875, 0.524507] | 2.998388 | 0.003
##
## Uncertainty intervals (equal-tailed) and p-values (two-tailed) computed
## using a Wald t-distribution approximation.
comparar_coeficientes(modelo_1, modelo_2)
## # Fixed Effects
##
## Parameter | Coef_prev | Coef_actual | Diferencia_relativa | Potencial_confundidor
## ---------------------------------------------------------------------------------
## hs_af | -0.06 | -0.06 | 3.83 | No
anova(modelo_1, modelo_2)
## Analysis of Variance Table
##
## Model 1: pcr ~ hs_af
## Model 2: pcr ~ hs_af + imc_cat
## Res.Df RSS Df Sum of Sq F Pr(>F)
## 1 316 205.93
## 2 313 186.34 3 19.59 10.969 0.0000007216 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
En el análisis de varianza (ANOVA
) entre
modelo_1
y modelo_2
, se está comparando un
modelo más simple (modelo_1: pcr ~ hs_af
) con uno más
complejo (modelo_2: pcr ~ hs_af + imc_cat
). Como el valor
de p es 0.0000007216 (es decir, p < 0.05), se rechaza la hipótesis
nula de que ambos modelos explican la variabilidad de la variable
dependiente de la misma manera. El modelo más completo
(modelo_2
) brinda información adicional significativa
respecto del modelo más simple (modelo_1
), justificando la
inclusión de la variable imc_cat
en el modelo múltiple.
hipercolesterolemia
),
evaluación del cambio porcentual en coeficientes para detección de
confusión (modelo_2 vs modelo_3) y cuál modelo es más completo mediante
comparación con modelo anidado (test F de anova).modelo_3 <- lm(pcr ~ hs_af + imc_cat + hipercol, data = data)
summary(modelo_3)
##
## Call:
## lm(formula = pcr ~ hs_af + imc_cat + hipercol, data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.88667 -0.51666 -0.03504 0.46850 2.75223
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2.20453 0.10823 20.368 < 0.0000000000000002 ***
## hs_af -0.04555 0.01728 -2.636 0.00881 **
## imc_catbajo peso -0.01691 0.26825 -0.063 0.94977
## imc_catobesidad 0.66563 0.12485 5.332 0.000000187 ***
## imc_catsobrepeso 0.32924 0.10436 3.155 0.00176 **
## hipercol1 -0.27162 0.09010 -3.015 0.00278 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.7618 on 312 degrees of freedom
## Multiple R-squared: 0.1554, Adjusted R-squared: 0.1419
## F-statistic: 11.48 on 5 and 312 DF, p-value: 0.000000000345
model_parameters(modelo_3, ci = 0.95, digits = 6)
## Parameter | Coefficient | SE | 95% CI | t(312) | p
## ------------------------------------------------------------------------------------------
## (Intercept) | 2.204528 | 0.108233 | [ 1.991568, 2.417488] | 20.368292 | < .001
## hs af | -0.045546 | 0.017278 | [-0.079542, -0.011550] | -2.636079 | 0.009
## imc cat [bajo peso] | -0.016912 | 0.268249 | [-0.544717, 0.510894] | -0.063045 | 0.950
## imc cat [obesidad] | 0.665634 | 0.124846 | [ 0.419987, 0.911281] | 5.331636 | < .001
## imc cat [sobrepeso] | 0.329237 | 0.104365 | [ 0.123890, 0.534585] | 3.154681 | 0.002
## hipercol [1] | -0.271619 | 0.090101 | [-0.448902, -0.094337] | -3.014604 | 0.003
##
## Uncertainty intervals (equal-tailed) and p-values (two-tailed) computed
## using a Wald t-distribution approximation.
comparar_coeficientes(modelo_2, modelo_3)
## # Fixed Effects
##
## Parameter | Coef_prev | Coef_actual | Diferencia_relativa | Potencial_confundidor
## ----------------------------------------------------------------------------------------
## hs_af | -0.06 | -0.05 | 24.84 | Sí
## imc_catbajo peso | -0.06 | -0.02 | 73.74 | Sí
## imc_catobesidad | 0.70 | 0.67 | 4.67 | No
## imc_catsobrepeso | 0.32 | 0.33 | 3.96 | No
anova(modelo_2, modelo_3)
## Analysis of Variance Table
##
## Model 1: pcr ~ hs_af + imc_cat
## Model 2: pcr ~ hs_af + imc_cat + hipercol
## Res.Df RSS Df Sum of Sq F Pr(>F)
## 1 313 186.34
## 2 312 181.06 1 5.274 9.0878 0.002784 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Dado que el valor de p asociado al test F (p = 0.002784) fue menor a
0.05, se concluye que el modelo más complejo (modelo_3
),
que incluye la variable hipercol
, mejora significativamente
el ajuste del modelo con respecto a modelo_2
. Además, la
variable hs_af
presenta un cambio mayor al 10% en su
coeficiente con la inclusión de hipercol
, lo que indica un
posible efecto confundidor. Esto justifica su incorporación al modelo
final.
hipertensión
), evaluación del
cambio porcentual en coeficientes para detección de confusión (modelo_3
vs modelo_4) y cuál modelo es más completo mediante comparación con
modelo anidado (test F de anova).modelo_4 <- lm(pcr ~ hs_af + imc_cat + hipercol + hta, data = data)
summary(modelo_4)
##
## Call:
## lm(formula = pcr ~ hs_af + imc_cat + hipercol + hta, data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.91904 -0.52060 -0.00871 0.47185 2.61596
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2.11800 0.11236 18.851 < 0.0000000000000002 ***
## hs_af -0.04102 0.01721 -2.383 0.01776 *
## imc_catbajo peso -0.06492 0.26648 -0.244 0.80769
## imc_catobesidad 0.60578 0.12587 4.813 0.00000233 ***
## imc_catsobrepeso 0.31379 0.10360 3.029 0.00266 **
## hipercol1 -0.25053 0.08966 -2.794 0.00553 **
## hta1 0.23826 0.09211 2.587 0.01015 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.7549 on 311 degrees of freedom
## Multiple R-squared: 0.1732, Adjusted R-squared: 0.1572
## F-statistic: 10.86 on 6 and 311 DF, p-value: 0.0000000000563
model_parameters(modelo_4, ci = 0.95, digits = 6)
## Parameter | Coefficient | SE | 95% CI | t(311) | p
## ------------------------------------------------------------------------------------------
## (Intercept) | 2.117996 | 0.112355 | [ 1.896923, 2.339069] | 18.850851 | < .001
## hs af | -0.041019 | 0.017212 | [-0.074885, -0.007153] | -2.383206 | 0.018
## imc cat [bajo peso] | -0.064920 | 0.266483 | [-0.589257, 0.459417] | -0.243618 | 0.808
## imc cat [obesidad] | 0.605784 | 0.125868 | [ 0.358123, 0.853444] | 4.812848 | < .001
## imc cat [sobrepeso] | 0.313792 | 0.103598 | [ 0.109950, 0.517633] | 3.028936 | 0.003
## hipercol [1] | -0.250528 | 0.089662 | [-0.426949, -0.074107] | -2.794132 | 0.006
## hta [1] | 0.238257 | 0.092111 | [ 0.057017, 0.419496] | 2.586629 | 0.010
##
## Uncertainty intervals (equal-tailed) and p-values (two-tailed) computed
## using a Wald t-distribution approximation.
comparar_coeficientes(modelo_3, modelo_4)
## # Fixed Effects
##
## Parameter | Coef_prev | Coef_actual | Diferencia_relativa | Potencial_confundidor
## ----------------------------------------------------------------------------------------
## hs_af | -0.05 | -0.04 | 9.94 | No
## imc_catbajo peso | -0.02 | -0.06 | 283.87 | Sí
## imc_catobesidad | 0.67 | 0.61 | 8.99 | No
## imc_catsobrepeso | 0.33 | 0.31 | 4.69 | No
## hipercol1 | -0.27 | -0.25 | 7.77 | No
anova(modelo_3, modelo_4)
## Analysis of Variance Table
##
## Model 1: pcr ~ hs_af + imc_cat + hipercol
## Model 2: pcr ~ hs_af + imc_cat + hipercol + hta
## Res.Df RSS Df Sum of Sq F Pr(>F)
## 1 312 181.06
## 2 311 177.25 1 3.8132 6.6907 0.01015 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Al incorporar hipertensión
, se observó un aumento
significativo en la capacidad explicativa del modelo (p < 0.01015),
lo que apoya su inclusión como predictor relevante.
género
), evaluación del
cambio porcentual en coeficientes para detección de confusión (modelo_4
vs modelo_5) y cuál modelo es más completo mediante comparación con
modelo anidado (test F de anova).modelo_5 <- lm(pcr ~ hs_af + imc_cat + hipercol + hta + genero, data = data)
summary(modelo_5)
##
## Call:
## lm(formula = pcr ~ hs_af + imc_cat + hipercol + hta + genero,
## data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -2.1109 -0.5154 -0.0406 0.4566 2.4241
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1.98938 0.11380 17.481 < 0.0000000000000002 ***
## hs_af -0.04373 0.01679 -2.604 0.00965 **
## imc_catbajo peso -0.08186 0.25979 -0.315 0.75289
## imc_catobesidad 0.61325 0.12270 4.998 0.000000972 ***
## imc_catsobrepeso 0.29902 0.10105 2.959 0.00332 **
## hipercol1 -0.24259 0.08742 -2.775 0.00586 **
## hta1 0.22414 0.08985 2.495 0.01313 *
## genero1 0.34936 0.08397 4.161 0.000041143 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.7359 on 310 degrees of freedom
## Multiple R-squared: 0.2169, Adjusted R-squared: 0.1992
## F-statistic: 12.27 on 7 and 310 DF, p-value: 0.00000000000007449
model_parameters(modelo_5, ci = 0.95, digits = 6)
## Parameter | Coefficient | SE | 95% CI | t(310) | p
## ------------------------------------------------------------------------------------------
## (Intercept) | 1.989375 | 0.113800 | [ 1.765458, 2.213292] | 17.481404 | < .001
## hs af | -0.043726 | 0.016790 | [-0.076763, -0.010690] | -2.604311 | 0.010
## imc cat [bajo peso] | -0.081864 | 0.259790 | [-0.593038, 0.429310] | -0.315116 | 0.753
## imc cat [obesidad] | 0.613248 | 0.122705 | [ 0.371808, 0.854688] | 4.997747 | < .001
## imc cat [sobrepeso] | 0.299022 | 0.101046 | [ 0.100199, 0.497845] | 2.959262 | 0.003
## hipercol [1] | -0.242590 | 0.087420 | [-0.414602, -0.070578] | -2.774985 | 0.006
## hta [1] | 0.224144 | 0.089850 | [ 0.047350, 0.400938] | 2.494636 | 0.013
## genero [1] | 0.349355 | 0.083967 | [ 0.184139, 0.514572] | 4.160648 | < .001
##
## Uncertainty intervals (equal-tailed) and p-values (two-tailed) computed
## using a Wald t-distribution approximation.
comparar_coeficientes(modelo_4, modelo_5)
## # Fixed Effects
##
## Parameter | Coef_prev | Coef_actual | Diferencia_relativa | Potencial_confundidor
## ----------------------------------------------------------------------------------------
## hs_af | -0.04 | -0.04 | 6.60 | No
## imc_catbajo peso | -0.06 | -0.08 | 26.10 | Sí
## imc_catobesidad | 0.61 | 0.61 | 1.23 | No
## imc_catsobrepeso | 0.31 | 0.30 | 4.71 | No
## hipercol1 | -0.25 | -0.24 | 3.17 | No
## hta1 | 0.24 | 0.22 | 5.92 | No
anova(modelo_4, modelo_5)
## Analysis of Variance Table
##
## Model 1: pcr ~ hs_af + imc_cat + hipercol + hta
## Model 2: pcr ~ hs_af + imc_cat + hipercol + hta + genero
## Res.Df RSS Df Sum of Sq F Pr(>F)
## 1 311 177.25
## 2 310 167.88 1 9.3745 17.311 0.00004114 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
La variable género
mejoró el modelo de forma
estadísticamente significativa (p = 0.00004114), por lo tanto, se
decidió mantenerla.
tabaquismo
), evaluación del
cambio porcentual en coeficientes para detección de confusión (modelo_5
vs modelo_6) y cuál modelo es más completo mediante comparación con
modelo anidado (test F de anova).modelo_6 <- lm(pcr ~ hs_af + imc_cat + hipercol + hta + genero + tabaq, data = data)
summary(modelo_6)
##
## Call:
## lm(formula = pcr ~ hs_af + imc_cat + hipercol + hta + genero +
## tabaq, data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -2.02578 -0.51643 -0.00542 0.44216 2.23475
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1.94521 0.11383 17.088 < 0.0000000000000002 ***
## hs_af -0.04352 0.01662 -2.619 0.00926 **
## imc_catbajo peso -0.12370 0.25764 -0.480 0.63149
## imc_catobesidad 0.59624 0.12163 4.902 0.00000154 ***
## imc_catsobrepeso 0.29249 0.10006 2.923 0.00372 **
## hipercol1 -0.22886 0.08669 -2.640 0.00871 **
## hta1 0.20757 0.08916 2.328 0.02055 *
## genero1 0.33151 0.08338 3.976 0.00008743 ***
## tabaq1 0.27447 0.10141 2.706 0.00718 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.7285 on 309 degrees of freedom
## Multiple R-squared: 0.2351, Adjusted R-squared: 0.2153
## F-statistic: 11.87 on 8 and 309 DF, p-value: 0.000000000000009273
model_parameters(modelo_6, ci = 0.95, digits = 6)
## Parameter | Coefficient | SE | 95% CI | t(309) | p
## ------------------------------------------------------------------------------------------
## (Intercept) | 1.945211 | 0.113832 | [ 1.721228, 2.169195] | 17.088471 | < .001
## hs af | -0.043524 | 0.016621 | [-0.076230, -0.010819] | -2.618578 | 0.009
## imc cat [bajo peso] | -0.123696 | 0.257644 | [-0.630654, 0.383261] | -0.480107 | 0.631
## imc cat [obesidad] | 0.596243 | 0.121634 | [ 0.356907, 0.835580] | 4.901934 | < .001
## imc cat [sobrepeso] | 0.292488 | 0.100060 | [ 0.095603, 0.489373] | 2.923130 | 0.004
## hipercol [1] | -0.228860 | 0.086690 | [-0.399439, -0.058282] | -2.639970 | 0.009
## hta [1] | 0.207573 | 0.089158 | [ 0.032139, 0.383007] | 2.328143 | 0.021
## genero [1] | 0.331511 | 0.083384 | [ 0.167438, 0.495583] | 3.975711 | < .001
## tabaq [1] | 0.274467 | 0.101413 | [ 0.074919, 0.474015] | 2.706422 | 0.007
##
## Uncertainty intervals (equal-tailed) and p-values (two-tailed) computed
## using a Wald t-distribution approximation.
comparar_coeficientes(modelo_5, modelo_6)
## # Fixed Effects
##
## Parameter | Coef_prev | Coef_actual | Diferencia_relativa | Potencial_confundidor
## ----------------------------------------------------------------------------------------
## hs_af | -0.04 | -0.04 | 0.46 | No
## imc_catbajo peso | -0.08 | -0.12 | 51.10 | Sí
## imc_catobesidad | 0.61 | 0.60 | 2.77 | No
## imc_catsobrepeso | 0.30 | 0.29 | 2.19 | No
## hipercol1 | -0.24 | -0.23 | 5.66 | No
## hta1 | 0.22 | 0.21 | 7.39 | No
## genero1 | 0.35 | 0.33 | 5.11 | No
anova(modelo_5, modelo_6)
## Analysis of Variance Table
##
## Model 1: pcr ~ hs_af + imc_cat + hipercol + hta + genero
## Model 2: pcr ~ hs_af + imc_cat + hipercol + hta + genero + tabaq
## Res.Df RSS Df Sum of Sq F Pr(>F)
## 1 310 167.88
## 2 309 163.99 1 3.8873 7.3247 0.007179 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
La variable tabaquismo
mejoró el modelo de forma
estadísticamente significativa (p = 0.007179), por lo tanto, se decidió
mantenerla.
diabetes
), evaluación del
cambio porcentual en coeficientes para detección de confusión (modelo_6
vs modelo_7) y cuál modelo es más completo mediante comparación con
modelo anidado (test F de anova).modelo_7 <- lm(pcr ~ hs_af + imc_cat + hipercol + hta + genero + tabaq + dbt, data = data)
summary(modelo_7)
##
## Call:
## lm(formula = pcr ~ hs_af + imc_cat + hipercol + hta + genero +
## tabaq + dbt, data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -2.00399 -0.53434 -0.00287 0.44279 2.21394
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1.94021 0.11457 16.935 < 0.0000000000000002 ***
## hs_af -0.04368 0.01665 -2.624 0.009131 **
## imc_catbajo peso -0.12538 0.25801 -0.486 0.627342
## imc_catobesidad 0.59539 0.12181 4.888 0.00000164 ***
## imc_catsobrepeso 0.29368 0.10023 2.930 0.003642 **
## hipercol1 -0.22741 0.08687 -2.618 0.009288 **
## hta1 0.19178 0.09645 1.988 0.047659 *
## genero1 0.32932 0.08365 3.937 0.000102 ***
## tabaq1 0.27229 0.10167 2.678 0.007802 **
## dbt1 0.04478 0.10351 0.433 0.665554
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.7295 on 308 degrees of freedom
## Multiple R-squared: 0.2355, Adjusted R-squared: 0.2132
## F-statistic: 10.54 on 9 and 308 DF, p-value: 0.00000000000003058
model_parameters(modelo_7, ci = 0.95, digits = 6)
## Parameter | Coefficient | SE | 95% CI | t(308) | p
## ------------------------------------------------------------------------------------------
## (Intercept) | 1.940210 | 0.114566 | [ 1.714779, 2.165642] | 16.935259 | < .001
## hs af | -0.043677 | 0.016647 | [-0.076433, -0.010920] | -2.623697 | 0.009
## imc cat [bajo peso] | -0.125383 | 0.258013 | [-0.633073, 0.382307] | -0.485958 | 0.627
## imc cat [obesidad] | 0.595385 | 0.121811 | [ 0.355699, 0.835072] | 4.887788 | < .001
## imc cat [sobrepeso] | 0.293680 | 0.100230 | [ 0.096459, 0.490902] | 2.930074 | 0.004
## hipercol [1] | -0.227406 | 0.086870 | [-0.398339, -0.056473] | -2.617779 | 0.009
## hta [1] | 0.191778 | 0.096451 | [ 0.001991, 0.381565] | 1.988335 | 0.048
## genero [1] | 0.329323 | 0.083647 | [ 0.164732, 0.493914] | 3.937067 | < .001
## tabaq [1] | 0.272287 | 0.101672 | [ 0.072227, 0.472346] | 2.678089 | 0.008
## dbt [1] | 0.044785 | 0.103507 | [-0.158886, 0.248456] | 0.432675 | 0.666
##
## Uncertainty intervals (equal-tailed) and p-values (two-tailed) computed
## using a Wald t-distribution approximation.
comparar_coeficientes(modelo_6, modelo_7)
## # Fixed Effects
##
## Parameter | Coef_prev | Coef_actual | Diferencia_relativa | Potencial_confundidor
## ----------------------------------------------------------------------------------------
## hs_af | -0.04 | -0.04 | 0.35 | No
## imc_catbajo peso | -0.12 | -0.13 | 1.36 | No
## imc_catobesidad | 0.60 | 0.60 | 0.14 | No
## imc_catsobrepeso | 0.29 | 0.29 | 0.41 | No
## hipercol1 | -0.23 | -0.23 | 0.64 | No
## hta1 | 0.21 | 0.19 | 7.61 | No
## genero1 | 0.33 | 0.33 | 0.66 | No
## tabaq1 | 0.27 | 0.27 | 0.79 | No
anova(modelo_6, modelo_7)
## Analysis of Variance Table
##
## Model 1: pcr ~ hs_af + imc_cat + hipercol + hta + genero + tabaq
## Model 2: pcr ~ hs_af + imc_cat + hipercol + hta + genero + tabaq + dbt
## Res.Df RSS Df Sum of Sq F Pr(>F)
## 1 309 163.99
## 2 308 163.89 1 0.099614 0.1872 0.6656
Aunque la variable diabetes
no presentó una asociación
estadísticamente significativa en el modelo (p = 0.6656), se decidió
mantenerla por su reconocida relevancia clínica como factor de riesgo
cardiovascular. Esta decisión se basa en los criterios establecidos
durante el análisis multivariado, que indican retener aquellas variables
que cumplen con al menos uno de los siguientes:
Significancia estadística (p < 0.05).
Relevancia biológica o clínica.
Rol como potencial variable confundidora (cambio ≥10% en coeficientes parciales previamente incluidos).
educación
), evaluación del
cambio porcentual en coeficientes para detección de confusión (modelo_7
vs modelo_8) y cuál modelo es más completo mediante comparación con
modelo anidado (test F de anova).modelo_8 <- lm(pcr ~ hs_af + imc_cat + hipercol + hta + genero + tabaq + dbt + educ, data = data)
summary(modelo_8)
##
## Call:
## lm(formula = pcr ~ hs_af + imc_cat + hipercol + hta + genero +
## tabaq + dbt + educ, data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -2.08981 -0.46990 0.00654 0.46861 2.16028
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2.02698 0.11658 17.387 < 0.0000000000000002 ***
## hs_af -0.03965 0.01648 -2.406 0.01672 *
## imc_catbajo peso -0.05854 0.25555 -0.229 0.81896
## imc_catobesidad 0.61740 0.12042 5.127 0.000000522 ***
## imc_catsobrepeso 0.29200 0.09891 2.952 0.00340 **
## hipercol1 -0.20755 0.08597 -2.414 0.01635 *
## hta1 0.19453 0.09518 2.044 0.04183 *
## genero1 0.32730 0.08254 3.965 0.000091343 ***
## tabaq1 0.23249 0.10117 2.298 0.02224 *
## dbt1 0.05243 0.10217 0.513 0.60823
## educ2 -0.25415 0.08335 -3.049 0.00249 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.7198 on 307 degrees of freedom
## Multiple R-squared: 0.258, Adjusted R-squared: 0.2338
## F-statistic: 10.67 on 10 and 307 DF, p-value: 0.000000000000001511
model_parameters(modelo_8, ci = 0.95, digits = 6)
## Parameter | Coefficient | SE | 95% CI | t(307) | p
## ------------------------------------------------------------------------------------------
## (Intercept) | 2.026978 | 0.116580 | [ 1.797582, 2.256375] | 17.387037 | < .001
## hs af | -0.039649 | 0.016480 | [-0.072078, -0.007221] | -2.405875 | 0.017
## imc cat [bajo peso] | -0.058539 | 0.255548 | [-0.561386, 0.444307] | -0.229074 | 0.819
## imc cat [obesidad] | 0.617399 | 0.120419 | [ 0.380448, 0.854350] | 5.127089 | < .001
## imc cat [sobrepeso] | 0.291998 | 0.098908 | [ 0.097375, 0.486621] | 2.952223 | 0.003
## hipercol [1] | -0.207550 | 0.085970 | [-0.376715, -0.038386] | -2.414227 | 0.016
## hta [1] | 0.194533 | 0.095182 | [ 0.007241, 0.381825] | 2.043794 | 0.042
## genero [1] | 0.327298 | 0.082545 | [ 0.164872, 0.489723] | 3.965084 | < .001
## tabaq [1] | 0.232491 | 0.101175 | [ 0.033407, 0.431575] | 2.297911 | 0.022
## dbt [1] | 0.052427 | 0.102171 | [-0.148617, 0.253472] | 0.513131 | 0.608
## educ [2] | -0.254149 | 0.083350 | [-0.418157, -0.090140] | -3.049193 | 0.002
##
## Uncertainty intervals (equal-tailed) and p-values (two-tailed) computed
## using a Wald t-distribution approximation.
comparar_coeficientes(modelo_7, modelo_8)
## # Fixed Effects
##
## Parameter | Coef_prev | Coef_actual | Diferencia_relativa | Potencial_confundidor
## ----------------------------------------------------------------------------------------
## hs_af | -0.04 | -0.04 | 9.22 | No
## imc_catbajo peso | -0.13 | -0.06 | 53.31 | Sí
## imc_catobesidad | 0.60 | 0.62 | 3.70 | No
## imc_catsobrepeso | 0.29 | 0.29 | 0.57 | No
## hipercol1 | -0.23 | -0.21 | 8.73 | No
## hta1 | 0.19 | 0.19 | 1.44 | No
## genero1 | 0.33 | 0.33 | 0.61 | No
## tabaq1 | 0.27 | 0.23 | 14.62 | Sí
## dbt1 | 0.04 | 0.05 | 17.06 | Sí
anova(modelo_7, modelo_8)
## Analysis of Variance Table
##
## Model 1: pcr ~ hs_af + imc_cat + hipercol + hta + genero + tabaq + dbt
## Model 2: pcr ~ hs_af + imc_cat + hipercol + hta + genero + tabaq + dbt +
## educ
## Res.Df RSS Df Sum of Sq F Pr(>F)
## 1 308 163.89
## 2 307 159.07 1 4.8175 9.2976 0.002494 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Al incorporar la variable educación
, se identificó una
reducción mayor al 10% en el coeficiente B parcial de
tabaquismo
, lo que sugiere un posible efecto de confusión.
Además, educación presentó una asociación estadísticamente significativa
(p < 0.05). Aunque no representa un factor de riesgo cardiovascular
clásico, la evidencia reciente ha señalado su rol como determinante
social en la salud cardiovascular3. Por estos motivos, y dado
que cumple con los tres criterios establecidos (significancia
estadística, comportamiento como variable confundidora y relevancia
clínica), se decidió retener esta variable en el modelo final. Cabe
destacar que la diferencia relativa en el coeficiente de diabetes
(17.06%) es resultado de un valor absoluto pequeño en el modelo previo,
por lo que este porcentaje debe interpretarse con cautela.
3 Park J, et al. Association between education and cardiovascular outcomes in adults: a systematic review and meta-analysis. JAMA Netw Open. 2024;7(4):e246789.
estado civil
), evaluación del
cambio porcentual en coeficientes para detección de confusión (modelo_8
vs modelo_9) y cuál modelo es más completo mediante comparación con
modelo anidado (test F de anova).modelo_9 <- lm(pcr ~ hs_af + imc_cat + hipercol + hta + genero + tabaq + dbt + educ + estciv, data = data)
summary(modelo_9)
##
## Call:
## lm(formula = pcr ~ hs_af + imc_cat + hipercol + hta + genero +
## tabaq + dbt + educ + estciv, data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -2.18807 -0.44107 0.03203 0.46582 2.23549
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2.14014 0.12799 16.721 < 0.0000000000000002 ***
## hs_af -0.04100 0.01640 -2.499 0.012972 *
## imc_catbajo peso -0.05825 0.25416 -0.229 0.818864
## imc_catobesidad 0.62769 0.11987 5.237 0.000000305 ***
## imc_catsobrepeso 0.29158 0.09837 2.964 0.003274 **
## hipercol1 -0.22574 0.08595 -2.626 0.009061 **
## hta1 0.18918 0.09470 1.998 0.046635 *
## genero1 0.31816 0.08221 3.870 0.000133 ***
## tabaq1 0.21177 0.10111 2.094 0.037048 *
## dbt1 0.07311 0.10210 0.716 0.474511
## educ2 -0.24542 0.08300 -2.957 0.003351 **
## estciv1 -0.17344 0.08309 -2.087 0.037676 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.7159 on 306 degrees of freedom
## Multiple R-squared: 0.2684, Adjusted R-squared: 0.2421
## F-statistic: 10.21 on 11 and 306 DF, p-value: 0.0000000000000006997
model_parameters(modelo_9, ci = 0.95, digits = 6)
## Parameter | Coefficient | SE | 95% CI | t(306) | p
## ------------------------------------------------------------------------------------------
## (Intercept) | 2.140141 | 0.127995 | [ 1.888279, 2.392002] | 16.720507 | < .001
## hs af | -0.040995 | 0.016404 | [-0.073273, -0.008717] | -2.499183 | 0.013
## imc cat [bajo peso] | -0.058255 | 0.254162 | [-0.558381, 0.441871] | -0.229203 | 0.819
## imc cat [obesidad] | 0.627693 | 0.119867 | [ 0.391824, 0.863561] | 5.236558 | < .001
## imc cat [sobrepeso] | 0.291584 | 0.098372 | [ 0.098014, 0.485154] | 2.964111 | 0.003
## hipercol [1] | -0.225737 | 0.085946 | [-0.394857, -0.056616] | -2.626490 | 0.009
## hta [1] | 0.189183 | 0.094701 | [ 0.002836, 0.375530] | 1.997697 | 0.047
## genero [1] | 0.318165 | 0.082214 | [ 0.156389, 0.479941] | 3.869968 | < .001
## tabaq [1] | 0.211773 | 0.101114 | [ 0.012805, 0.410740] | 2.094386 | 0.037
## dbt [1] | 0.073107 | 0.102099 | [-0.127798, 0.274012] | 0.716042 | 0.475
## educ [2] | -0.245419 | 0.083003 | [-0.408748, -0.082091] | -2.956756 | 0.003
## estciv [1] | -0.173440 | 0.083088 | [-0.336936, -0.009944] | -2.087429 | 0.038
##
## Uncertainty intervals (equal-tailed) and p-values (two-tailed) computed
## using a Wald t-distribution approximation.
comparar_coeficientes(modelo_8, modelo_9)
## # Fixed Effects
##
## Parameter | Coef_prev | Coef_actual | Diferencia_relativa | Potencial_confundidor
## ----------------------------------------------------------------------------------------
## hs_af | -0.04 | -0.04 | 3.39 | No
## imc_catbajo peso | -0.06 | -0.06 | 0.49 | No
## imc_catobesidad | 0.62 | 0.63 | 1.67 | No
## imc_catsobrepeso | 0.29 | 0.29 | 0.14 | No
## hipercol1 | -0.21 | -0.23 | 8.76 | No
## hta1 | 0.19 | 0.19 | 2.75 | No
## genero1 | 0.33 | 0.32 | 2.79 | No
## tabaq1 | 0.23 | 0.21 | 8.91 | No
## dbt1 | 0.05 | 0.07 | 39.44 | Sí
## educ2 | -0.25 | -0.25 | 3.43 | No
anova(modelo_8, modelo_9)
## Analysis of Variance Table
##
## Model 1: pcr ~ hs_af + imc_cat + hipercol + hta + genero + tabaq + dbt +
## educ
## Model 2: pcr ~ hs_af + imc_cat + hipercol + hta + genero + tabaq + dbt +
## educ + estciv
## Res.Df RSS Df Sum of Sq F Pr(>F)
## 1 307 159.07
## 2 306 156.84 1 2.2333 4.3574 0.03768 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Al comparar los coeficientes parciales entre el modelo 8
y el modelo 9
, se observó que la incorporación de la
variable estado civil (estciv
) generó un cambio relativo
del 39.44% en el coeficiente de la variable dbt
, lo que
inicialmente sugería un posible efecto de confusión. Además, en el
modelo 9, estciv
presentó significación estadística (p =
0.03786), motivo por el cual se decidió conservarla en el modelo final,
cumpliendo tanto con el criterio metodológico de retención ante
confusión relevante como con el criterio de significación
estadística.
Comparación de modelos anidados (Test F de ANOVA)
Se presentan los resultados de los test F de ANOVA entre modelos anidados, utilizados para evaluar si la inclusión de nuevas variables mejora significativamente el ajuste del modelo:
anova_modelos <- data.frame(
Modelos_comparados = c("modelo_1 vs modelo_2", "modelo_2 vs modelo_3", "modelo_3 vs modelo_4",
"modelo_4 vs modelo_5", "modelo_5 vs modelo_6", "modelo_6 vs modelo_7",
"modelo_7 vs modelo_8", "modelo_8 vs modelo_9"),
F_statistic = c(10.97, 5.27, 6.69, 17.31, 7.32, 0.18, 5.79, 4.36),
p_valor = c("<0.001", "0.002", "0.01", "<0.001", "0.007", "0.665", "0.017", "0.037"),
Interpretacion = c("modelo_2 mejora significativamente",
"modelo_3 mejora significativamente",
"modelo_4 mejora significativamente",
"modelo_5 mejora significativamente",
"modelo_6 mejora significativamente",
"modelo_7 no mejora significativamente",
"modelo_8 mejora significativamente",
"modelo_9 mejora significativamente")
)
kable(anova_modelos, align = "c", caption = "Comparación de modelos anidados (Test F de ANOVA)") %>%
kable_styling(full_width = FALSE, position = "center")
Modelos_comparados | F_statistic | p_valor | Interpretacion |
---|---|---|---|
modelo_1 vs modelo_2 | 10.97 | <0.001 | modelo_2 mejora significativamente |
modelo_2 vs modelo_3 | 5.27 | 0.002 | modelo_3 mejora significativamente |
modelo_3 vs modelo_4 | 6.69 | 0.01 | modelo_4 mejora significativamente |
modelo_4 vs modelo_5 | 17.31 | <0.001 | modelo_5 mejora significativamente |
modelo_5 vs modelo_6 | 7.32 | 0.007 | modelo_6 mejora significativamente |
modelo_6 vs modelo_7 | 0.18 | 0.665 | modelo_7 no mejora significativamente |
modelo_7 vs modelo_8 | 5.79 | 0.017 | modelo_8 mejora significativamente |
modelo_8 vs modelo_9 | 4.36 | 0.037 | modelo_9 mejora significativamente |
Comparación entre métodos de selección de variables.
Al comparar los resultados obtenidos mediante el método manual y los
algoritmos automáticos (Forward
, Backward
y
Stepwise
), se observó una alta concordancia en las
variables seleccionadas. Sin embargo, el enfoque manual permitió
incorporar una variable adicional —diabetes— que no fue retenida por los
métodos automáticos, al priorizar no solo el criterio estadístico (p
< 0.05) sino también la relevancia clínica y el comportamiento como
potenciales variables confundidoras. A pesar de estas diferencias, todos
los modelos mostraron un desempeño similar en términos de R2 ajustado
(~0.243), lo que respalda la validez del modelo final y la
complementariedad entre ambos enfoques.
Índice VIF
vif(modelo_9)
## GVIF Df GVIF^(1/(2*Df))
## hs_af 1.117625 1 1.057178
## imc_cat 1.095252 3 1.015280
## hipercol 1.145571 1 1.070314
## hta 1.258938 1 1.122024
## genero 1.018168 1 1.009043
## tabaq 1.054916 1 1.027091
## dbt 1.217735 1 1.103510
## educ 1.049980 1 1.024685
## estciv 1.044339 1 1.021929
Todos los valores de VIF son muy cercanos a 1, lo cual indica que no existe multicolinealidad entre las variables independientes del modelo.
Tolerancia
1/vif(modelo_9)
## GVIF Df GVIF^(1/(2*Df))
## hs_af 0.8947545 1.0000000 0.9459146
## imc_cat 0.9130320 0.3333333 0.9849503
## hipercol 0.8729268 1.0000000 0.9343055
## hta 0.7943200 1.0000000 0.8912463
## genero 0.9821558 1.0000000 0.9910378
## tabaq 0.9479430 1.0000000 0.9736236
## dbt 0.8211965 1.0000000 0.9061989
## educ 0.9523991 1.0000000 0.9759094
## estciv 0.9575434 1.0000000 0.9785415
Dado que todos los valores de tolerancia se encuentran por encima del umbral de 0.2, se concluye que no existe evidencia de multicolinealidad significativa entre los predictores del modelo.
modelo_10 <- lm(pcr ~ imc_cat + hipercol + hta + genero + tabaq + dbt + educ + hs_af + estciv + edad, data = data)
summary(modelo_10)
##
## Call:
## lm(formula = pcr ~ imc_cat + hipercol + hta + genero + tabaq +
## dbt + educ + hs_af + estciv + edad, data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -2.26129 -0.43560 0.02411 0.46174 2.16300
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2.402609 0.309862 7.754 0.000000000000134 ***
## imc_catbajo peso -0.078249 0.255125 -0.307 0.759273
## imc_catobesidad 0.619940 0.120183 5.158 0.000000449499923 ***
## imc_catsobrepeso 0.294201 0.098433 2.989 0.003028 **
## hipercol1 -0.218748 0.086293 -2.535 0.011746 *
## hta1 0.201075 0.095580 2.104 0.036221 *
## genero1 0.321899 0.082330 3.910 0.000114 ***
## tabaq1 0.212420 0.101139 2.100 0.036525 *
## dbt1 0.077041 0.102209 0.754 0.451578
## educ2 -0.254384 0.083579 -3.044 0.002541 **
## hs_af -0.041447 0.016414 -2.525 0.012075 *
## estciv1 -0.174029 0.083109 -2.094 0.037086 *
## edad -0.004716 0.005070 -0.930 0.353029
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.7161 on 305 degrees of freedom
## Multiple R-squared: 0.2705, Adjusted R-squared: 0.2418
## F-statistic: 9.424 on 12 and 305 DF, p-value: 0.000000000000001557
model_parameters(modelo_10, ci = 0.95, digits = 6)
## Parameter | Coefficient | SE | 95% CI | t(305) | p
## ------------------------------------------------------------------------------------------
## (Intercept) | 2.402609 | 0.309862 | [ 1.792870, 3.012348] | 7.753790 | < .001
## imc cat [bajo peso] | -0.078249 | 0.255125 | [-0.580277, 0.423779] | -0.306710 | 0.759
## imc cat [obesidad] | 0.619940 | 0.120183 | [ 0.383447, 0.856433] | 5.158290 | < .001
## imc cat [sobrepeso] | 0.294201 | 0.098433 | [ 0.100506, 0.487896] | 2.988832 | 0.003
## hipercol [1] | -0.218748 | 0.086293 | [-0.388553, -0.048944] | -2.534955 | 0.012
## hta [1] | 0.201075 | 0.095580 | [ 0.012995, 0.389156] | 2.103728 | 0.036
## genero [1] | 0.321899 | 0.082330 | [ 0.159893, 0.483905] | 3.909870 | < .001
## tabaq [1] | 0.212420 | 0.101139 | [ 0.013402, 0.411439] | 2.100280 | 0.037
## dbt [1] | 0.077041 | 0.102209 | [-0.124083, 0.278165] | 0.753755 | 0.452
## educ [2] | -0.254384 | 0.083579 | [-0.418848, -0.089920] | -3.043648 | 0.003
## hs af | -0.041447 | 0.016414 | [-0.073747, -0.009147] | -2.525060 | 0.012
## estciv [1] | -0.174029 | 0.083109 | [-0.337568, -0.010490] | -2.093991 | 0.037
## edad | -0.004716 | 0.005070 | [-0.014693, 0.005261] | -0.930149 | 0.353
##
## Uncertainty intervals (equal-tailed) and p-values (two-tailed) computed
## using a Wald t-distribution approximation.
comparar_coeficientes(modelo_9, modelo_10)
## # Fixed Effects
##
## Parameter | Coef_prev | Coef_actual | Diferencia_relativa | Potencial_confundidor
## ----------------------------------------------------------------------------------------
## hs_af | -0.04 | -0.04 | 1.10 | No
## imc_catbajo peso | -0.06 | -0.08 | 34.32 | Sí
## imc_catobesidad | 0.63 | 0.62 | 1.24 | No
## imc_catsobrepeso | 0.29 | 0.29 | 0.90 | No
## hipercol1 | -0.23 | -0.22 | 3.10 | No
## hta1 | 0.19 | 0.20 | 6.29 | No
## genero1 | 0.32 | 0.32 | 1.17 | No
## tabaq1 | 0.21 | 0.21 | 0.31 | No
## dbt1 | 0.07 | 0.08 | 5.38 | No
## educ2 | -0.25 | -0.25 | 3.65 | No
## estciv1 | -0.17 | -0.17 | 0.34 | No
Tras evaluar la inclusión de la variable edad
en el
modelo múltiple (modelo_10), se observó que no cumplía con los criterios
establecidos para su retención: presentó un valor de p no significativo
(p = 0.353) y no generó cambios relativos ≥10% en los coeficientes de
las variables previamente incluidas, por lo que no actuó como
confundidora. Se decidió eliminar edad del modelo. De este modo, se
considera que el modelo_9 representa el modelo final más parsimonioso y
robusto, manteniendo aquellas variables que cumplen con criterios
estadísticos o clínicos justificados.
Comparación de métricas del modelo_1 al modelo_9
Cálculo del Error Cuadrático Medio (MSE) para cada modelo
MSE_modelo_1 <- mean(resid(modelo_1)^2)
MSE_modelo_2 <- mean(resid(modelo_2)^2)
MSE_modelo_3 <- mean(resid(modelo_3)^2)
MSE_modelo_4 <- mean(resid(modelo_4)^2)
MSE_modelo_5 <- mean(resid(modelo_5)^2)
MSE_modelo_6 <- mean(resid(modelo_6)^2)
MSE_modelo_7 <- mean(resid(modelo_7)^2)
MSE_modelo_8 <- mean(resid(modelo_8)^2)
MSE_modelo_9 <- mean(resid(modelo_9)^2)
Tabla de comparación de métricas entre los modelos 1 al 9
tabla_modelos <- data.frame(
Modelo = paste0("modelo_", 1:9),
R2_ajustado = c(0.03639, 0.1197, 0.1419, 0.1572, 0.1992, 0.2153, 0.2132, 0.2338, 0.2421),
Error_estandar_residual = c(0.8073, 0.7716, 0.7618, 0.7549, 0.7359, 0.7285, 0.7295, 0.7198, 0.7159),
F_statistic = c(12.97, 11.48, 11.48, 10.86, 12.27, 11.87, 10.54, 10.67, 10.21),
MSE = c(MSE_modelo_1, MSE_modelo_2, MSE_modelo_3, MSE_modelo_4, MSE_modelo_5, MSE_modelo_6, MSE_modelo_7, MSE_modelo_8, MSE_modelo_9)
)
kable(tabla_modelos, align = "c", caption = "Comparación de métricas del modelo_1 al modelo_9") %>%
kable_styling(full_width = FALSE, position = "center")
Modelo | R2_ajustado | Error_estandar_residual | F_statistic | MSE |
---|---|---|---|---|
modelo_1 | 0.03639 | 0.8073 | 12.97 | 0.6475692 |
modelo_2 | 0.11970 | 0.7716 | 11.48 | 0.5859665 |
modelo_3 | 0.14190 | 0.7618 | 11.48 | 0.5693817 |
modelo_4 | 0.15720 | 0.7549 | 10.86 | 0.5573904 |
modelo_5 | 0.19920 | 0.7359 | 12.27 | 0.5279108 |
modelo_6 | 0.21530 | 0.7285 | 11.87 | 0.5156867 |
modelo_7 | 0.21320 | 0.7295 | 10.54 | 0.5153735 |
modelo_8 | 0.23380 | 0.7198 | 10.67 | 0.5002240 |
modelo_9 | 0.24210 | 0.7159 | 10.21 | 0.4932010 |
La tabla de comparación de métricas entre los modelos 1 al 9 permite evaluar simultáneamente cuatro aspectos clave:
La capacidad explicativa, medida por el R2 ajustado;
La precisión de las predicciones, reflejada en el error estándar residual;
La significancia global del modelo, evaluada mediante el estadístico F;
Y la capacidad predictiva promedio, representada por el Error Cuadrático Medio (MSE).
Un mayor R2 ajustado indica que el modelo explica mejor la variabilidad de la variable dependiente, mientras que un menor error estándar residual y un menor MSE sugieren predicciones más precisas. Por último, un estadístico F mayor a 2 con un valor de p significativo (p < 0.05) respalda que al menos uno de los coeficientes del modelo es diferente de cero, lo que justifica su utilidad para explicar el fenómeno en estudio.
El modelo_9
presentó el mayor R2 ajustado (0.2421), lo
que indica una mayor capacidad explicativa. Aunque su estadístico F fue
levemente menor que el del modelo_8, se priorizó por contener
predictores clínicamente relevantes y por haber sido ajustado de forma
más robusta. Además, presentó un error estándar residual bajo (0.7159),
comparable al de los modelos más precisos, y el MSE más bajo (0.4932),
lo cual refuerza la capacidad predictiva promedio del modelo.
En conjunto, estos resultados permiten concluir que
modelo_9
es el más adecuado entre las alternativas
evaluadas, logrando un equilibrio óptimo entre capacidad explicativa,
precisión, parsimonia y solidez clínica.
Ecuación de regresión del modelo_9
PCR = 2.14 -0.06 x IMC cat bajo peso + 0.63 x IMC cat obesidad + 0.29 x IMC cat sobrepeso - 0.23 x presencia de hipercolesterolemia + 0.19 x presencia de hta + 0.32 x género + 0.21 x tabaquismo + 0.07 x presencia de diabetes - 0.25 x nivel educativo - 0.04 x hs de actividad física - 0.17 x estado civil
Interpretación de coeficientes
La variable IMC
tiene 4 categorías
Cuando el paciente tiene bajo peso
, la PCR disminuye
en 0.6 mgdl con respecto a los pacientes con normopeso
independientemente del valor de las otras variables ajustadas en el
modelo. Este valor puede variar entre -0.55 a 0.44 con un 95% de
confianza. No es estadísticamente significativo para esta
categoría.
Cuando tiene sobrepeso
, aumenta en 0.29 mgdl con
respecto a los que tienen normopeso independientemente del valor de las
otras variables ajustadas en el modelo. Este valor puede variar entre
0.09 a 0.48 con un 95% de confianza.
Cuando tiene obesidad
, el valor de PCR aumenta en
0.62 mgdl con respecto a los pacientes con normopeso independientemente
del valor de las otras variables ajustadas en el modelo. Este valor
puede variar entre 0.39 a 0.86 con un 95% de confianza.
Hipercolesterolemia
: la presencia de hipercolesterolemia
disminuye en 0.23 mgdl el valor de PCR en sangre independientemente del
valor de las otras variables ajustadas en el modelo. Este valor puede
variar entre -0.39 a -0.06 con un 95% de confianza.
Hipertensión arterial
: la presencia de hipertensión
aumenta en 0.19 mgdl el valor de la PCR en sangre independientemente del
valor de las otras variables ajustadas en el modelo. Este valor puede
variar entre 0.03 a 0.37 con un 95% de confianza.
Género
: Pertenecer al género masculino aumenta en 0.32
mgdl el valor de la PCR en sangre independientemente del valor de las
otras variables ajustadas en el modelo. Este valor puede variar entre
0.16 a 0.48 con un 95% de confianza.
Tabaquismo
: Fumar aumenta la PCR en sangre en 0.21 mgdl
independientemente del valor de las otras variables ajustadas en el
modelo. Este valor puede variar entre 0.01 a 0.41 con un 95% de
confianza.
Diabetes
: la presencia de diabetes aumenta la PCR en
sangre en 0.07 mgdl. Si bien esta asociación no es estadísticamente
significativa, se decide incluir esta variable en el modelo por su
significado clínico independientemente del valor de las otras variables
ajustadas en el modelo. Este valor puede variar entre -0.13 a 0.27 con
un 95% de confianza. Este coeficiente no es estadísticamente
significativo.
Nivel educativo
: el grupo de personas con secundario
completo tienen 0.25 mgdl de PCR en sangre menos que en aquellos que no
tienen secundario completo independientemente del valor de las otras
variables ajustadas en el modelo. Este valor puede variar entre -0.4 a
-0.08 con un 95% de confianza.
Estado civil
: Las personas casadas tiene 0.17 mgdl menos
de PCR en sangre que las personas solteras independientemente del valor
de las otras variables ajustadas en el modelo. Este valor puede variar
entre -0.33 a -0.009 con un 95% de confianza.
Actividad física
: Por cada hora semanal de actividad
física moderada o intensa, la PCR en sangre disminuye 0.04 mgdl
independientemente del valor de las otras variables ajustadas en el
modelo. Este valor puede variar entre -0.07 a -0.008 con un 95% de
confianza.
Generar valores predichos y residuos.
Valores predichos (ŷ)
predichos_m9 <- modelo_9$fitted.values
Residuos crudos
residuos_crudos_m9 <- modelo_9$residuals
Residuos estandarizados
residuos_standarizados_m9 <- rstandard(modelo_9)
Evaluación del supuesto de linealidad.
Gráfico de residuos crudos frente a valores predichos
plot(y = residuos_crudos_m9, x = predichos_m9, main = "Gráfico de residuos crudos versus predichos")
abline(h = 0)
El supuesto de linealidad se cumple, ya que los residuos parecen distribuirse de forma aleatoria respecto de los valores predichos sin un patrón evidente. No se observan asimetrías notorias.
avPlots(modelo_9)
Los gráficos avPlots() muestran que no hay evidencia de relaciones no lineales entre la variable dependiente y cada una de las variables independientes, ajustando por las otras. Por lo tanto, el supuesto de linealidad se considera cumplido en el modelo_9.
Evaluación del supuesto de igualdad de varianzas (homocedasticidad).
plot(y = residuos_crudos_m9, x = predichos_m9, main = "Gráfico de residuos crudos versus predichos")
abline(h = 0)
bptest(modelo_9)
##
## studentized Breusch-Pagan test
##
## data: modelo_9
## BP = 19.937, df = 11, p-value = 0.04622
Conforme el gráfico, se evidencia una distribución no homogénea (imagen en embudo) y el Breusch-Pagan test rechaza la H0 de igualdad de varianzas, por lo cual, no se cumple el supuesto de homocedasticidad (hay heterocedasticidad).
Evaluación del supuesto de normalidad de los residuos.
residuos_crudos_m9 <- modelo_9$residuals
residuos_estandarizados_m9 <- rstandard(modelo_9)
hist(residuos_crudos_m9, main = "Histograma de residuos", xlab = "Residuos", ylab = "Frecuencia", breaks = 10)
boxplot(residuos_crudos_m9, main = "Boxplot de residuos")
plot(density(residuos_crudos_m9), main = "Gráfico de densidad de residuos")
df_residuos <- data.frame(residuos = residuos_estandarizados_m9)
ggplot(df_residuos, aes(sample = residuos)) +
stat_qq_band(alpha = 0.3, fill = "skyblue") +
stat_qq_line(color = "blue") +
stat_qq_point() +
labs(
title = "Q-Q plot de residuos estandarizados con banda de confianza",
x = "Cuantiles teóricos",
y = "Cuantiles de residuos estandarizados"
) +
theme_minimal()
shapiro.test(residuos_crudos_m9)
##
## Shapiro-Wilk normality test
##
## data: residuos_crudos_m9
## W = 0.99785, p-value = 0.9571
El supuesto de normalidad de los residuos se cumple. Tanto la inspección visual como la evidencia estadística del test de Shapiro-Wilk (p > 0.05 → no rechaza normalidad) indican que los residuos del modelo modelo_9 se distribuyen normalmente.
Evaluación del supuesto de independencia.
plot(residuos_crudos_m9, type = "b", main = "Residuos vs orden de ingreso")
abline(h = 0, col = "red")
A partir del gráfico de residuos en función del orden de ingreso de las observaciones, no se observa un patrón sistemático que sugiera dependencia temporal o secuencial entre los residuos. Por lo tanto, el supuesto de independencia se asume cumplido.
Prueba de Durbin-Watson
dwtest(modelo_9)
##
## Durbin-Watson test
##
## data: modelo_9
## DW = 1.7862, p-value = 0.02405
## alternative hypothesis: true autocorrelation is greater than 0
El estadístico de Durbin-Watson fue cercano a 1.8, con p-valores inferiores a 0.05. Esto sugiere evidencia estadísticamente significativa de autocorrelación positiva entre los residuos.
Este hallazgo indica una posible violación del supuesto de independencia de errores. A pesar de que el gráfico de residuos versus orden de ingreso no mostraba un patrón visual claro, el test formal refuerza la necesidad de considerar esta limitación en la interpretación de los resultados. Además, este hallazgo debe interpretarse con cautela, ya que la presencia de heterocedasticidad puede afectar la validez del test. Se recomienda considerar esta limitación al evaluar la robustez del modelo.
Identificar observaciones con residuos studentizados > ±3
resid_student_m9 <- rstudent(modelo_9)
outliers <- which(abs(resid_student_m9) > 3)
plot(
x = modelo_9$fitted.values,
y = resid_student_m9,
xlab = "Valores predichos",
ylab = "Residuos studentizados",
pch = 19,
col = "darkblue"
)
abline(h = c(-3, 3), col = "red", lty = 2)
abline(h = 0, col = "gray50")
text(
x = modelo_9$fitted.values[outliers],
y = resid_student_m9[outliers],
labels = outliers,
pos = 4,
cex = 0.7,
col = "darkred"
)
Se calcularon los residuos studentizados externos. Se identificaron 3 observaciones con valores mayores a ±3 (casos 90, 96 y 304), lo cual sugiere la presencia de posibles outliers. En el gráfico de residuos studentizados vs. valores predichos, la mayoría de las observaciones se distribuyen en torno a cero sin un patrón sistemático, y únicamente tres puntos (observaciones 90, 96 y 304) se ubican por fuera del umbral convencional de ±3 DE.
cook <- cooks.distance(modelo_9)
plot(cook, type = "h", main = "Distancia de Cook", ylab = "Cook's distance")
abline(h = 4/length(cook), col = "red", lty = 2)
abline(h = 0.5, col = "blue", lty = 2)
abline(h = 1.0, col = "darkgreen", lty = 2)
legend("topright", legend = c("4/n", "0.5", "1.0"),
col = c("red", "blue", "darkgreen"), lty = 2, cex = 0.8)
which(cook > 4/length(cook))
## 2 5 18 23 33 84 90 96 114 134 185 190 218 219 293 304
## 2 5 18 23 33 84 90 96 114 134 185 190 218 219 293 304
which(cook > 0.5)
## named integer(0)
which(cook > 1.0)
## named integer(0)
Se calculó la distancia de Cook para evaluar la influencia de cada observación en el modelo. Se identificaron 16 observaciones con valores por encima del umbral clásico (4/n), lo que sugiere que podrían ser potencialmente influyentes. Sin embargo, ninguna observación superó los umbrales más conservadores (> 0.5 o > 1), por lo que no se identificaron influencias graves sobre los coeficientes del modelo.
Las observaciones 90, 96 y 304 tienen un residuo studentizado elevado (potencial outlier) y una alta influencia, evaluada con la distancia de Cook y/o leverage. Son candidatas prioritarias a ser evaluadas en profundidad.
Modelo base (modelo_9)
modelo_9 <- lm(pcr ~ imc_cat + hipercol + hta + genero + tabaq + dbt + educ + hs_af + estciv, data = data)
summary(modelo_9)
##
## Call:
## lm(formula = pcr ~ imc_cat + hipercol + hta + genero + tabaq +
## dbt + educ + hs_af + estciv, data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -2.18807 -0.44107 0.03203 0.46582 2.23549
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2.14014 0.12799 16.721 < 0.0000000000000002 ***
## imc_catbajo peso -0.05825 0.25416 -0.229 0.818864
## imc_catobesidad 0.62769 0.11987 5.237 0.000000305 ***
## imc_catsobrepeso 0.29158 0.09837 2.964 0.003274 **
## hipercol1 -0.22574 0.08595 -2.626 0.009061 **
## hta1 0.18918 0.09470 1.998 0.046635 *
## genero1 0.31816 0.08221 3.870 0.000133 ***
## tabaq1 0.21177 0.10111 2.094 0.037048 *
## dbt1 0.07311 0.10210 0.716 0.474511
## educ2 -0.24542 0.08300 -2.957 0.003351 **
## hs_af -0.04100 0.01640 -2.499 0.012972 *
## estciv1 -0.17344 0.08309 -2.087 0.037676 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.7159 on 306 degrees of freedom
## Multiple R-squared: 0.2684, Adjusted R-squared: 0.2421
## F-statistic: 10.21 on 11 and 306 DF, p-value: 0.0000000000000006997
model_parameters(modelo_9, ci = 0.95, digits = 6)
## Parameter | Coefficient | SE | 95% CI | t(306) | p
## ------------------------------------------------------------------------------------------
## (Intercept) | 2.140141 | 0.127995 | [ 1.888279, 2.392002] | 16.720507 | < .001
## imc cat [bajo peso] | -0.058255 | 0.254162 | [-0.558381, 0.441871] | -0.229203 | 0.819
## imc cat [obesidad] | 0.627693 | 0.119867 | [ 0.391824, 0.863561] | 5.236558 | < .001
## imc cat [sobrepeso] | 0.291584 | 0.098372 | [ 0.098014, 0.485154] | 2.964111 | 0.003
## hipercol [1] | -0.225737 | 0.085946 | [-0.394857, -0.056616] | -2.626490 | 0.009
## hta [1] | 0.189183 | 0.094701 | [ 0.002836, 0.375530] | 1.997697 | 0.047
## genero [1] | 0.318165 | 0.082214 | [ 0.156389, 0.479941] | 3.869968 | < .001
## tabaq [1] | 0.211773 | 0.101114 | [ 0.012805, 0.410740] | 2.094386 | 0.037
## dbt [1] | 0.073107 | 0.102099 | [-0.127798, 0.274012] | 0.716042 | 0.475
## educ [2] | -0.245419 | 0.083003 | [-0.408748, -0.082091] | -2.956756 | 0.003
## hs af | -0.040995 | 0.016404 | [-0.073273, -0.008717] | -2.499183 | 0.013
## estciv [1] | -0.173440 | 0.083088 | [-0.336936, -0.009944] | -2.087429 | 0.038
##
## Uncertainty intervals (equal-tailed) and p-values (two-tailed) computed
## using a Wald t-distribution approximation.
Comparación del coeficiente B para horas semanales de actividad
física hs_af
excluyendo observaciones potencialmente
influyentes
Sin observación 304
modelo_9_sin_304 <- lm(pcr ~ imc_cat + hipercol + hta + genero + tabaq + dbt + educ + hs_af + estciv, data = data[-304,])
summary(modelo_9_sin_304)
##
## Call:
## lm(formula = pcr ~ imc_cat + hipercol + hta + genero + tabaq +
## dbt + educ + hs_af + estciv, data = data[-304, ])
##
## Residuals:
## Min 1Q Median 3Q Max
## -2.1622 -0.4229 0.0329 0.4478 2.0455
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2.15030 0.12610 17.052 < 0.0000000000000002 ***
## imc_catbajo peso -0.04989 0.25034 -0.199 0.842162
## imc_catobesidad 0.63714 0.11809 5.395 0.000000138 ***
## imc_catsobrepeso 0.27983 0.09695 2.886 0.004177 **
## hipercol1 -0.22037 0.08466 -2.603 0.009696 **
## hta1 0.17911 0.09332 1.919 0.055880 .
## genero1 0.30396 0.08109 3.748 0.000213 ***
## tabaq1 0.18114 0.10004 1.811 0.071159 .
## dbt1 0.05277 0.10075 0.524 0.600862
## educ2 -0.23815 0.08178 -2.912 0.003855 **
## hs_af -0.03839 0.01618 -2.373 0.018243 *
## estciv1 -0.18703 0.08194 -2.282 0.023151 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.7051 on 305 degrees of freedom
## Multiple R-squared: 0.2601, Adjusted R-squared: 0.2334
## F-statistic: 9.747 on 11 and 305 DF, p-value: 0.000000000000003932
model_parameters(modelo_9_sin_304, ci = 0.95, digits = 6)
## Parameter | Coefficient | SE | 95% CI | t(305) | p
## ------------------------------------------------------------------------------------------
## (Intercept) | 2.150295 | 0.126101 | [ 1.902158, 2.398433] | 17.052214 | < .001
## imc cat [bajo peso] | -0.049892 | 0.250336 | [-0.542496, 0.442713] | -0.199298 | 0.842
## imc cat [obesidad] | 0.637144 | 0.118093 | [ 0.404764, 0.869524] | 5.395279 | < .001
## imc cat [sobrepeso] | 0.279829 | 0.096954 | [ 0.089046, 0.470612] | 2.886208 | 0.004
## hipercol [1] | -0.220373 | 0.084664 | [-0.386973, -0.053773] | -2.602903 | 0.010
## hta [1] | 0.179113 | 0.093322 | [-0.004524, 0.362749] | 1.919297 | 0.056
## genero [1] | 0.303957 | 0.081091 | [ 0.144388, 0.463526] | 3.748345 | < .001
## tabaq [1] | 0.181144 | 0.100036 | [-0.015705, 0.377993] | 1.810779 | 0.071
## dbt [1] | 0.052765 | 0.100753 | [-0.145494, 0.251025] | 0.523709 | 0.601
## educ [2] | -0.238151 | 0.081780 | [-0.399075, -0.077227] | -2.912093 | 0.004
## hs af | -0.038392 | 0.016176 | [-0.070222, -0.006562] | -2.373428 | 0.018
## estciv [1] | -0.187026 | 0.081941 | [-0.348266, -0.025785] | -2.282456 | 0.023
##
## Uncertainty intervals (equal-tailed) and p-values (two-tailed) computed
## using a Wald t-distribution approximation.
Sin observación 90
modelo_9_sin_90 <- lm(pcr ~ imc_cat + hipercol + hta + genero + tabaq + dbt + educ + hs_af + estciv, data = data[-90,])
summary(modelo_9_sin_90)
##
## Call:
## lm(formula = pcr ~ imc_cat + hipercol + hta + genero + tabaq +
## dbt + educ + hs_af + estciv, data = data[-90, ])
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.96169 -0.43688 0.01862 0.45563 2.21027
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2.16340 0.12638 17.119 < 0.0000000000000002 ***
## imc_catbajo peso -0.05701 0.25052 -0.228 0.82013
## imc_catobesidad 0.62418 0.11816 5.283 0.000000243 ***
## imc_catsobrepeso 0.30283 0.09703 3.121 0.00197 **
## hipercol1 -0.23747 0.08480 -2.801 0.00543 **
## hta1 0.21606 0.09373 2.305 0.02183 *
## genero1 0.33535 0.08122 4.129 0.000047091 ***
## tabaq1 0.19556 0.09980 1.960 0.05096 .
## dbt1 0.05327 0.10083 0.528 0.59766
## educ2 -0.25481 0.08187 -3.112 0.00203 **
## hs_af -0.04359 0.01619 -2.693 0.00748 **
## estciv1 -0.19074 0.08208 -2.324 0.02079 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.7057 on 305 degrees of freedom
## Multiple R-squared: 0.2843, Adjusted R-squared: 0.2585
## F-statistic: 11.02 on 11 and 305 DF, p-value: < 0.00000000000000022
model_parameters(modelo_9_sin_90, ci = 0.95, digits = 6)
## Parameter | Coefficient | SE | 95% CI | t(305) | p
## ------------------------------------------------------------------------------------------
## (Intercept) | 2.163397 | 0.126376 | [ 1.914717, 2.412077] | 17.118693 | < .001
## imc cat [bajo peso] | -0.057013 | 0.250521 | [-0.549981, 0.435955] | -0.227579 | 0.820
## imc cat [obesidad] | 0.624180 | 0.118155 | [ 0.391678, 0.856683] | 5.282709 | < .001
## imc cat [sobrepeso] | 0.302831 | 0.097028 | [ 0.111903, 0.493760] | 3.121082 | 0.002
## hipercol [1] | -0.237473 | 0.084797 | [-0.404333, -0.070613] | -2.800505 | 0.005
## hta [1] | 0.216061 | 0.093732 | [ 0.031618, 0.400503] | 2.305102 | 0.022
## genero [1] | 0.335348 | 0.081219 | [ 0.175528, 0.495168] | 4.128952 | < .001
## tabaq [1] | 0.195559 | 0.099798 | [-0.000821, 0.391939] | 1.959549 | 0.051
## dbt [1] | 0.053271 | 0.100832 | [-0.145144, 0.251687] | 0.528317 | 0.598
## educ [2] | -0.254810 | 0.081868 | [-0.415907, -0.093713] | -3.112456 | 0.002
## hs af | -0.043593 | 0.016189 | [-0.075450, -0.011736] | -2.692683 | 0.007
## estciv [1] | -0.190738 | 0.082081 | [-0.352254, -0.029221] | -2.323779 | 0.021
##
## Uncertainty intervals (equal-tailed) and p-values (two-tailed) computed
## using a Wald t-distribution approximation.
Sin observación 96
modelo_9_sin_96 <- lm(pcr ~ imc_cat + hipercol + hta + genero + tabaq + dbt + educ + hs_af + estciv, data = data[-96,])
summary(modelo_9_sin_96)
##
## Call:
## lm(formula = pcr ~ imc_cat + hipercol + hta + genero + tabaq +
## dbt + educ + hs_af + estciv, data = data[-96, ])
##
## Residuals:
## Min 1Q Median 3Q Max
## -2.22766 -0.42580 0.02599 0.47409 2.21191
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2.15680 0.12646 17.055 < 0.0000000000000002 ***
## imc_catbajo peso -0.05323 0.25088 -0.212 0.83210
## imc_catobesidad 0.59380 0.11885 4.996 0.000000986 ***
## imc_catsobrepeso 0.28968 0.09710 2.983 0.00308 **
## hipercol1 -0.23279 0.08487 -2.743 0.00645 **
## hta1 0.20026 0.09355 2.141 0.03309 *
## genero1 0.33192 0.08128 4.084 0.000056678 ***
## tabaq1 0.17532 0.10054 1.744 0.08218 .
## dbt1 0.07974 0.10080 0.791 0.42951
## educ2 -0.26102 0.08209 -3.180 0.00163 **
## hs_af -0.04576 0.01627 -2.813 0.00523 **
## estciv1 -0.15964 0.08214 -1.943 0.05288 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.7067 on 305 degrees of freedom
## Multiple R-squared: 0.2761, Adjusted R-squared: 0.25
## F-statistic: 10.58 on 11 and 305 DF, p-value: < 0.00000000000000022
model_parameters(modelo_9_sin_96, ci = 0.95, digits = 6)
## Parameter | Coefficient | SE | 95% CI | t(305) | p
## ------------------------------------------------------------------------------------------
## (Intercept) | 2.156802 | 0.126459 | [ 1.907960, 2.405645] | 17.055355 | < .001
## imc cat [bajo peso] | -0.053233 | 0.250877 | [-0.546902, 0.440436] | -0.212187 | 0.832
## imc cat [obesidad] | 0.593802 | 0.118849 | [ 0.359935, 0.827670] | 4.996275 | < .001
## imc cat [sobrepeso] | 0.289679 | 0.097100 | [ 0.098608, 0.480749] | 2.983297 | 0.003
## hipercol [1] | -0.232794 | 0.084866 | [-0.399791, -0.065797] | -2.743078 | 0.006
## hta [1] | 0.200258 | 0.093547 | [ 0.016179, 0.384337] | 2.140723 | 0.033
## genero [1] | 0.331918 | 0.081278 | [ 0.171982, 0.491854] | 4.083747 | < .001
## tabaq [1] | 0.175324 | 0.100536 | [-0.022507, 0.373156] | 1.743901 | 0.082
## dbt [1] | 0.079742 | 0.100801 | [-0.118612, 0.278096] | 0.791086 | 0.430
## educ [2] | -0.261023 | 0.082092 | [-0.422561, -0.099485] | -3.179643 | 0.002
## hs af | -0.045757 | 0.016268 | [-0.077768, -0.013745] | -2.812658 | 0.005
## estciv [1] | -0.159638 | 0.082140 | [-0.321271, 0.001995] | -1.943480 | 0.053
##
## Uncertainty intervals (equal-tailed) and p-values (two-tailed) computed
## using a Wald t-distribution approximation.
Conclusión
Para cada modelo sin la observación atípica, compararemos el
coeficiente B de la variable horas semanales de actividad física
(hs_af
) con el modelo original. Si la variación relativa es
mayor al 10%, se considera que la observación tiene un impacto
significativo en la estimación del coeficiente:
coef_original <- coef(modelo_9)["hs_af"]
coef_sin_304_manual <- coef(modelo_9_sin_304)["hs_af"]
coef_sin_90_manual <- coef(modelo_9_sin_90)["hs_af"]
coef_sin_96_manual <- coef(modelo_9_sin_96)["hs_af"]
var_90 <- abs(1 - (coef_sin_90_manual / coef_original)) * 100
var_96 <- abs(1 - (coef_sin_96_manual / coef_original)) * 100
var_304 <- abs(1 - (coef_sin_304_manual / coef_original)) * 100
variaciones_manual <- data.frame(
Observacion = c("90", "96", "304"),
Coef_Original = rep(round(coef_original, 6), 3),
Coef_Sin_Obs = round(c(coef_sin_90_manual, coef_sin_96_manual, coef_sin_304_manual), 6),
Variacion_Relativa_Porcentual = round(c(var_90, var_96, var_304), 2)
)
variaciones_manual
## Observacion Coef_Original Coef_Sin_Obs Variacion_Relativa_Porcentual
## 1 90 -0.040995 -0.043593 6.34
## 2 96 -0.040995 -0.045757 11.61
## 3 304 -0.040995 -0.038392 6.35
Se evaluó el impacto de tres observaciones potencialmente influyentes
(casos 90, 96 y 304) sobre el coeficiente B de la variable horas
semanales de actividad física (hs_af
) en el modelo de
regresión lineal múltiple.
Si bien las observaciones 304 y 90 mostraron una variación relativa del coeficiente (6.35% y 6.34%, respectivamente), la observación 96 mostró una variación superior (11.61%), por lo cual esta observación ejerce una influencia significativa sobre la estimación del coeficiente.
En consecuencia, se consideran necesarias medidas adicionales:
Verificar posibles errores de carga o características clínicas particulares en la observación 96.
Reportar los resultados tanto con como sin la observación 96, con el fin de transparentar su influencia en las estimaciones del modelo.
Evaluar su impacto en otros coeficientes del modelo.
Considerar la exclusión de la observación.
Otras opciones: regresión robusta, transformación de variables e inclusión de nuevas variables.
Inspección visual de las observaciones atípicas detectadas
La inspección visual de las observaciones atípicas identificadas puede aportar información útil sobre posibles errores de carga o características particulares de los datos. Esta inspección es complementaria al análisis del impacto en el modelo y puede ser especialmente útil para interpretar la naturaleza de cada observación.
data %>%
mutate(fila_original = row_number()) %>%
filter(fila_original %in% c(304, 90, 96)) %>%
kable(caption = "Valores de las observaciones 304, 90 y 96") %>%
kable_styling(full_width = FALSE)
id | genero | edad | estciv | educ | pcr | dbt | hta | hipercol | tabaq | imc | hs_af | imc_cat | fila_original |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
c099 | 1 | 44 | 0 | 1 | 0.751 | 0 | 1 | 0 | 0 | 28.9 | 0 | sobrepeso | 90 |
c106 | 0 | 40 | 0 | 2 | 4.210 | 0 | 0 | 1 | 1 | 30.1 | 9 | obesidad | 96 |
c332 | 1 | 45 | 1 | 1 | 5.286 | 1 | 1 | 0 | 1 | 29.3 | 0 | sobrepeso | 304 |
genero:hs_af
Se exploró si la asociación entre las horas semanales de actividad
física (hs_af
) y los niveles de PCR difería según el
género.
modelo_9_int1 <- lm(pcr ~ imc_cat + hipercol + hta + genero + tabaq +
dbt + educ + hs_af + estciv +
genero:hs_af, data = data)
summary(modelo_9_int1)
##
## Call:
## lm(formula = pcr ~ imc_cat + hipercol + hta + genero + tabaq +
## dbt + educ + hs_af + estciv + genero:hs_af, data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -2.24042 -0.42401 0.03774 0.45180 2.18143
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2.10927 0.13364 15.783 < 0.0000000000000002 ***
## imc_catbajo peso -0.05593 0.25432 -0.220 0.82608
## imc_catobesidad 0.62700 0.11994 5.228 0.000000319 ***
## imc_catsobrepeso 0.28967 0.09846 2.942 0.00351 **
## hipercol1 -0.22840 0.08606 -2.654 0.00837 **
## hta1 0.18400 0.09497 1.937 0.05361 .
## genero1 0.40849 0.13874 2.944 0.00349 **
## tabaq1 0.20853 0.10125 2.060 0.04029 *
## dbt1 0.07664 0.10225 0.749 0.45414
## educ2 -0.24676 0.08307 -2.971 0.00321 **
## hs_af -0.03084 0.02067 -1.492 0.13671
## estciv1 -0.17203 0.08315 -2.069 0.03941 *
## genero1:hs_af -0.02586 0.03199 -0.808 0.41949
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.7163 on 305 degrees of freedom
## Multiple R-squared: 0.27, Adjusted R-squared: 0.2413
## F-statistic: 9.399 on 12 and 305 DF, p-value: 0.000000000000001715
No se evidenció interacción estadísticamente significativa, por lo tanto, no se demostró modificación de efecto.
imc:hs_af
Se evaluó si la asociación entre las horas semanales de actividad
física (hs_af
) y los niveles de PCR difería según las
categorías de índice de masa corporal (imc
).
modelo_9_int2 <- lm(pcr ~ imc_cat + hipercol + hta + genero + tabaq +
dbt + educ + hs_af + estciv +
imc:hs_af, data = data)
summary(modelo_9_int2)
##
## Call:
## lm(formula = pcr ~ imc_cat + hipercol + hta + genero + tabaq +
## dbt + educ + hs_af + estciv + imc:hs_af, data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -2.18676 -0.44123 0.02615 0.46061 2.23346
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2.1317212 0.1358109 15.696 < 0.0000000000000002 ***
## imc_catbajo peso -0.0654199 0.2574071 -0.254 0.799551
## imc_catobesidad 0.6535743 0.1827821 3.576 0.000406 ***
## imc_catsobrepeso 0.3009605 0.1104564 2.725 0.006807 **
## hipercol1 -0.2263412 0.0861421 -2.628 0.009036 **
## hta1 0.1878087 0.0951321 1.974 0.049262 *
## genero1 0.3172739 0.0824803 3.847 0.000146 ***
## tabaq1 0.2140284 0.1019841 2.099 0.036670 *
## dbt1 0.0741187 0.1024020 0.724 0.469743
## educ2 -0.2459390 0.0831801 -2.957 0.003352 **
## hs_af -0.0266574 0.0781001 -0.341 0.733096
## estciv1 -0.1733734 0.0832200 -2.083 0.038055 *
## hs_af:imc -0.0005334 0.0028407 -0.188 0.851168
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.7171 on 305 degrees of freedom
## Multiple R-squared: 0.2685, Adjusted R-squared: 0.2397
## F-statistic: 9.329 on 12 and 305 DF, p-value: 0.000000000000002274
No se evidenció interacción estadísticamente significativa, por lo tanto, no se demostró modificación de efecto.
imc_cat:hs_af
Se evaluó si la asociación entre las horas semanales de actividad
física (hs_af
) y los niveles de PCR difería según las
categorías de índice de masa corporal (imc
).
modelo_9_int3 <- lm(pcr ~ imc_cat + hipercol + hta + genero + tabaq +
dbt + educ + hs_af + estciv +
imc_cat:hs_af, data = data)
summary(modelo_9_int3)
##
## Call:
## lm(formula = pcr ~ imc_cat + hipercol + hta + genero + tabaq +
## dbt + educ + hs_af + estciv + imc_cat:hs_af, data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -2.25746 -0.43725 0.03098 0.42499 2.18134
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2.12264 0.15657 13.557 < 0.0000000000000002 ***
## imc_catbajo peso -0.60011 0.55153 -1.088 0.277415
## imc_catobesidad 0.54137 0.20356 2.660 0.008241 **
## imc_catsobrepeso 0.38479 0.16183 2.378 0.018036 *
## hipercol1 -0.22257 0.08600 -2.588 0.010120 *
## hta1 0.18632 0.09507 1.960 0.050934 .
## genero1 0.31470 0.08226 3.826 0.000158 ***
## tabaq1 0.20454 0.10160 2.013 0.044980 *
## dbt1 0.07112 0.10263 0.693 0.488826
## educ2 -0.24666 0.08305 -2.970 0.003217 **
## hs_af -0.03463 0.02860 -1.211 0.226894
## estciv1 -0.17946 0.08357 -2.147 0.032549 *
## imc_catbajo peso:hs_af 0.16970 0.15110 1.123 0.262290
## imc_catobesidad:hs_af 0.02602 0.04618 0.564 0.573460
## imc_catsobrepeso:hs_af -0.02713 0.03593 -0.755 0.450818
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.7157 on 303 degrees of freedom
## Multiple R-squared: 0.2759, Adjusted R-squared: 0.2425
## F-statistic: 8.248 on 14 and 303 DF, p-value: 0.000000000000005389
No se evidenció interacción estadísticamente significativa, por lo tanto, no se demostró modificación de efecto.
dbt:hs_af
Se evaluó si la asociación entre las horas semanales de actividad
física (hs_af
) y los niveles de PCR difería entre personas
con y sin diabetes (dbt
).
modelo_9_int4 <- lm(pcr ~ imc_cat + hipercol + hta + genero + tabaq +
dbt + educ + hs_af + estciv +
dbt:hs_af, data = data)
summary(modelo_9_int4)
##
## Call:
## lm(formula = pcr ~ imc_cat + hipercol + hta + genero + tabaq +
## dbt + educ + hs_af + estciv + dbt:hs_af, data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -2.21411 -0.45582 0.01831 0.45690 2.32744
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2.17211 0.13321 16.306 < 0.0000000000000002 ***
## imc_catbajo peso -0.06514 0.25439 -0.256 0.798060
## imc_catobesidad 0.61783 0.12045 5.129 0.000000518 ***
## imc_catsobrepeso 0.28612 0.09861 2.901 0.003984 **
## hipercol1 -0.22079 0.08617 -2.562 0.010877 *
## hta1 0.19148 0.09477 2.020 0.044223 *
## genero1 0.31540 0.08231 3.832 0.000154 ***
## tabaq1 0.21213 0.10116 2.097 0.036811 *
## dbt1 -0.04116 0.16634 -0.247 0.804745
## educ2 -0.25186 0.08337 -3.021 0.002731 **
## hs_af -0.04788 0.01822 -2.628 0.009017 **
## estciv1 -0.17752 0.08325 -2.132 0.033784 *
## dbt1:hs_af 0.03469 0.03986 0.870 0.384821
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.7162 on 305 degrees of freedom
## Multiple R-squared: 0.2702, Adjusted R-squared: 0.2415
## F-statistic: 9.411 on 12 and 305 DF, p-value: 0.000000000000001636
No se evidenció interacción estadísticamente significativa, por lo tanto, no se demostró modificación de efecto.
tabaq:hs_af
Se evaluó si la asociación entre las horas semanales de actividad
física (hs_af
) y los niveles de PCR difería según la
condición de tabaquismo (tabaq
).
modelo_9_int5 <- lm(pcr ~ imc_cat + hipercol + hta + genero + tabaq +
dbt + educ + hs_af + estciv +
tabaq:hs_af, data = data)
summary(modelo_9_int5)
##
## Call:
## lm(formula = pcr ~ imc_cat + hipercol + hta + genero + tabaq +
## dbt + educ + hs_af + estciv + tabaq:hs_af, data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -2.15890 -0.43525 0.01071 0.44502 2.35138
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2.10928 0.12957 16.279 < 0.0000000000000002 ***
## imc_catbajo peso -0.05401 0.25374 -0.213 0.831569
## imc_catobesidad 0.64758 0.12046 5.376 0.000000152 ***
## imc_catsobrepeso 0.29578 0.09825 3.011 0.002825 **
## hipercol1 -0.22717 0.08580 -2.648 0.008528 **
## hta1 0.19045 0.09454 2.014 0.044836 *
## genero1 0.31440 0.08211 3.829 0.000156 ***
## tabaq1 0.41450 0.17369 2.386 0.017622 *
## dbt1 0.07070 0.10194 0.694 0.488471
## educ2 -0.25056 0.08294 -3.021 0.002732 **
## hs_af -0.03112 0.01776 -1.752 0.080745 .
## estciv1 -0.18210 0.08316 -2.190 0.029309 *
## tabaq1:hs_af -0.06165 0.04299 -1.434 0.152525
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.7147 on 305 degrees of freedom
## Multiple R-squared: 0.2733, Adjusted R-squared: 0.2447
## F-statistic: 9.559 on 12 and 305 DF, p-value: 0.0000000000000009055
No se evidenció interacción estadísticamente significativa, por lo tanto, no se demostró modificación de efecto.
El modelo seleccionado cumple con los principios fundamentales para considerarse adecuado:
Modelo parsimonioso: modelo_9 incluye solo las variables que resultaron clínica y/o estadísticamente significativas o actuaron como confusoras durante el proceso de selección, evitando complejidad innecesaria.
Variables justificadas: Todas las variables incluidas fueron seleccionadas a partir de un análisis bivariado con criterio de inclusión de p < 0.20, y posteriormente se evaluaron interacciones y posible confusión en el modelo múltiple.
Cumplimiento de supuestos: Se verificaron los supuestos del modelo (linealidad, homocedasticidad, independencia, normalidad de los residuos y multicolinealidad). Se observó evidencia de heterocedasticidad y autocorrelación positiva. Frente al incumplimiento de estos supuestos, se podría considerar: la transformación de variables, el uso de regresión robusta o la implementación de un modelo no lineal.
En la comparación entre los modelos explorados (modelo_1 a modelo_9), el modelo final mostró un equilibrio adecuado entre:
Adicionalmente, se exploró la presencia de observaciones
potencialmente influyentes. Se identificó que la observación 96 provocó
una variación relativa mayor al 10% en el coeficiente B de la variable
hs_af
, considerada clínicamente relevante. Frente a este
hallazgo, se propusieron medidas complementarias como la revisión de la
carga de datos, la evaluación del impacto sobre otros coeficientes y la
inclusión de resultados con y sin dicha observación, además de plantear
el uso de técnicas como regresión robusta, transformación de variables o
la inclusión de nuevas variables.