Para este proyecto se realizara una “Tabla 2”, la cual muestra asociaciones ajustadas multivariadas con el resultado de las variables resumidas en la Tabla 1, para este caso se tomara la variable ‘edad’ como variable independiente y se haran comparaciones con otras variables y se realizara se respectiva regresion logistica y se determinaran los coeficiente beta para el modelo logistico.

Cargamos la base de datos de “Framinghan heart study” para el ejemplo:

fram<- read.csv("framingham_dataset.csv", header = TRUE)
colnames(fram)
##  [1] "X"        "randid"   "sex"      "totchol"  "age"      "sysbp"   
##  [7] "diabp"    "cursmoke" "cigpday"  "bmi"      "diabetes" "bpmeds"  
## [13] "heartrte" "glucose"  "educ"     "prevchd"  "prevap"   "prevmi"  
## [19] "prevstrk" "prevhyp"  "time"     "period"   "hdlc"     "ldlc"    
## [25] "death"    "angina"   "hospmi"   "mi_fchd"  "anychd"   "stroke"  
## [31] "cvd"      "hyperten" "timeap"   "timemi"   "timemifc" "timechd" 
## [37] "timestrk" "timecvd"  "timedth"  "timehyp"

Para el ejemplo, como varaibles dependientes, se usaran las variables: ‘sex’,‘diabetes’,‘glucose’,‘stroke’,‘cigpday’.’hyperten’,‘totchol’,‘heartrte’ y ‘bmi’ . Primero se haran comparaciones en graficas

Procedemos hacer los modelos logisticos para predecir la probabilidad de infarto de miocardio o enfermedad cardiaca coronaria mortal ‘mi_fchd’ y su respectiva tabla 2 con las variables mencionadas

library(tidyverse)
library(broom)
fchd <- factor(fram$mi_fchd , levels = c(0,1) , labels = c("no","si"))
modelo <- glm(fchd ~ age + sex + glucose + diabetes + hyperten + cigarettes + stroke + rate + cholesterol, data = fram, family = binomial(link = "logit"))
summary(modelo)
## 
## Call:
## glm(formula = fchd ~ age + sex + glucose + diabetes + hyperten + 
##     cigarettes + stroke + rate + cholesterol, family = binomial(link = "logit"), 
##     data = fram)
## 
## Coefficients:
##               Estimate Std. Error z value Pr(>|z|)    
## (Intercept) -4.2328292  0.3023570 -13.999  < 2e-16 ***
## age          0.0263295  0.0033387   7.886 3.11e-15 ***
## sex         -1.2898945  0.0646360 -19.956  < 2e-16 ***
## glucose      0.0033536  0.0011296   2.969 0.002988 ** 
## diabetes     0.7949008  0.1332154   5.967 2.42e-09 ***
## hyperten     0.6114980  0.0792354   7.717 1.19e-14 ***
## cigarettes   0.0084183  0.0023523   3.579 0.000345 ***
## stroke       0.3601002  0.0891021   4.041 5.31e-05 ***
## rate         0.0024347  0.0023777   1.024 0.305840    
## cholesterol  0.0073877  0.0006431  11.488  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 8570.6  on 9997  degrees of freedom
## Residual deviance: 7694.1  on 9988  degrees of freedom
##   (1629 observations deleted due to missingness)
## AIC: 7714.1
## 
## Number of Fisher Scoring iterations: 5
tabla_resultados <- tidy(modelo, conf.int = TRUE, exponentiate = TRUE) %>%
  mutate(across(c(estimate, conf.low, conf.high), ~round(., 2))) %>%
  mutate(p.value = ifelse(p.value < 0.001, "<0.001", round(p.value, 3))) %>%
  select(term, estimate, std.error, p.value, conf.low, conf.high)

knitr::kable(tabla_resultados, 
             col.names = c("Variable", "OR", "Error Estándar", "p-valor", "IC 95% (bajo)", "IC 95% (alto)"),
             caption = " Tabla 2: Modelo de regresión logística para predecir enfermedad de miocardio")
Tabla 2: Modelo de regresión logística para predecir enfermedad de miocardio
Variable OR Error Estándar p-valor IC 95% (bajo) IC 95% (alto)
(Intercept) 0.01 0.3023570 <0.001 0.01 0.03
age 1.03 0.0033387 <0.001 1.02 1.03
sex 0.28 0.0646360 <0.001 0.24 0.31
glucose 1.00 0.0011296 0.003 1.00 1.01
diabetes 2.21 0.1332154 <0.001 1.70 2.87
hyperten 1.84 0.0792354 <0.001 1.58 2.16
cigarettes 1.01 0.0023523 <0.001 1.00 1.01
stroke 1.43 0.0891021 <0.001 1.20 1.70
rate 1.00 0.0023777 0.306 1.00 1.01
cholesterol 1.01 0.0006431 <0.001 1.01 1.01

Finalmente nuestro modelo quedaria de la siguiente forma:

\[ logit(L) = -4.232 + 0.026*age -1.289*sex + 0.003*glucose + 0.794*diabetes + 0.611*hyperten + 0.008*cigpday\] \[ + 0.360*stroke + 0.002*rate + 0.007*cholesterol \]

Una interpretacion del modelo es que, dado a los coeficientes que se muestran y las OR obtenidas, los hombres en comparacion con las mujeres tienen mas probabilidad de sufrir infarto de miocardio o enfermedad cardiaca coronaria mortal, tambien estas probabilidades aumentan con la hipertension y la diabetes, al igual que fumar varios cigarrillos por dia y tener colesterol elevado.

Cuando el OR (Odd Ratio) es igual a 1 nos indica que no aumentan ni disminuyen el riesgo de la enfermedad cardíaca en estudio, en este caso las variables glucosa y heart rate presentan esta caracteristica, por otra parte el sexo presenta un OR de 0.21 lo cual indica probabilida baja (el grupo de mujeres con respecto al primer grupo que son los hombres), tiene una reducción del 79% en la probabilidad relativa de presentar infarto de miocardio, y para las demas variables que presentan OR>1 indican un mayor riesgo de infarto de miocardio, en este caso hay 121% mas de probabilidad de que una persona diabetica presente un infarto de miocardio que una persona que no es diabetica, de manera analoga una persona con hypertension presenta mas probabilidades del mismo suceso al igual que una persona con stroke positivo.

Una ultima cuestion seria la variable colesterol que nos muestra un OR>1 pero clinicamente irrevelante, por cada 1 mg/dL de aumento del colesterol tiene un aumento del 1%, lo mismo sucede con los cigarrillos fumados por dia, otro caso puede ser la edad que aumenta 3% por año, aunque el efecto anual parece pequeño, se acumula con la edad, volviéndose clínicamente importante en rangos amplios (ejemplo en adultos mayores) actuando como un efecto graudal y constante.