1 Explicar en forma detallada el plan de análisis.

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:

  • Método manual secuencial, incorporando una a una las covariables según orden decreciente de significancia estadística en el análisis bivariado. La retención de cada variable en el modelo se decidió con base en tres criterios preespecificados:
    • Significancia estadística (p < 0.05),
    • Relevancia clínica o biológica,
    • Rol como potencial variable confusora (cambio ≥ 10% en el coeficiente B de otra variable ya incluida).

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

2 Desarrollar los pasos de construcción del modelo, especificando en cada caso los criterios utilizados para decidir qué variables se incluyen. Presentar los outputs obtenidos de R que se consideren necesarios. NO incluir outputs sin explicación o comentarios.

2.1 Carga de librerías.

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

2.2 Carga y preparación de datos.

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)

2.3 Estrategia automática para la contrucción del modelo.

#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.

2.4 Estrategia manual para la construcción de un modelo de regresión múltiple.

2.4.1 Etapa 1: Análisis bivariado.

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.

2.4.2 Etapa 2: Ingreso de variables al modelo múltiple.

  1. Detección de confusión basada en cambio porcentual de coeficientes
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)
}
  1. Construcción de modelo_1 (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.
  1. Evaluación del cambio porcentual en coeficientes para detección de confusión (modelo_1 vs modelo_2) y cuál modelo es más completo mediante comparación con modelo anidado (test F de anova).
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.

  1. Construcción de modelo_3 (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.

  1. Construcción de modelo_4 (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.

  1. Construcción de modelo_5 (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.

  1. Construcción de modelo_6 (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.

  1. Construcción de modelo_7 (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).

  1. Construcción de modelo_8 (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.

  1. Construcción de modelo_9 (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")
Comparación de modelos anidados (Test F de ANOVA)
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.

  1. Evaluar la presencia de multicolinealidad en el modelo.

Í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.

2.4.3 Etapa 3: Variables no significativas en el análisis bivariado.

  1. Construcción de modelo_10 (edad) y evaluación del cambio porcentual en coeficientes para detección de confusión (modelo_9 vs modelo_10)
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")
Comparación de métricas del modelo_1 al modelo_9
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.

2.4.4 Etapa 4: Chequear los supuestos de linealidad, normalidad, homocedasticidad e independencia en modelo_9.

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.

2.4.5 Etapa 5: Explorar la presencia de outliers y valores influyentes.

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)
Valores de las observaciones 304, 90 y 96
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

2.4.6 Etapa 6: Exploración de interacciones.

  1. Modelo con interacción 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.

  1. Modelo con interacción 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.

  1. Modelo con interacción 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.

  1. Modelo con interacción 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.

  1. Modelo con interacción 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.

3 Conclusión del modelo final (modelo_9).

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:

  • Mayor R2 ajustado (0.2421)
  • Menor error estándar residual (0.7159), que corresponde a la raíz cuadrada del error cuadrático medio (MSE), indicador del ajuste global del modelo.
  • Estadístico F significativo (p < 0.0001), lo que sugiere un buen ajuste general del modelo.
  • Menor Error Cuadrático Medio (MSE = 0.4932), lo que indica menor variabilidad en las predicciones realizadas y contribuye a validar la robustez del modelo. Este valor fue el más bajo entre los modelos evaluados (modelo_1 a modelo_9).

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.