options(repos = c(CRAN = "https://cloud.r-project.org"))
library(readxl)
library(gtsummary)
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(broom)
library(purrr)
library(gt)

# Đọc dữ liệu
outcomehq <- read_excel("C:/dl/data/R-Rstudio/outcomehq.xlsx", 
    col_types = c("text", "numeric", "numeric", 
        "text", "text", "numeric", "numeric", 
        "text", "text", "text", "text", "numeric", 
        "numeric", "numeric", "text", "text", 
        "numeric", "numeric", "numeric", 
        "text", "text", "text", "text", "text", 
        "text", "text", "numeric", "numeric", 
        "numeric", "numeric", "text", "text", "text", "text", "text", 
        "text", "text", "text", "text","numeric", "numeric", "text", 
        "text", "text", "numeric", "numeric", "text", 
        "numeric", "numeric", "text", "numeric", 
        "numeric", "numeric", "numeric", 
        "numeric", "numeric", "numeric", 
        "numeric", "numeric", "numeric", 
        "text", "text", "text", "text", "text", "text", "text", "text", "numeric", 
        "text", "text", "text", "text", "text", 
        "text", "text", "text"))

# Chạy hồi quy logistic đơn biến cho từng biến độc lập
regression_results <- outcomehq %>%
  select(age, sex, tha, dtd, dysl, htl, weight, height, bmi, classbmi, 
         cre, MDRD, CrCl, hr, HATTh, HATTr, GRACE, ClassGRACE, GRACE1, GRACE2, GRACE3, 
         ClassTIMI, TIMI1, TIMI2, TIMI3, STEMIequi, AtoD, AmitDSA, StoD, SymtompDSA, 
         cTnIhs1, cTnIhs2, Chototal, TG, HDLC, LDLC, leuko, 
         Hgb, dapt, LVEF, LVEF40, RWMA, Predominant, 
         KILLIP, KILLIP1, Culprit, LAD, LCx, RCA, LM1, LM, Multivesseld, THBH, 
         RENTROP, PCIk, POBA, DES, SuccessPCI, RLN, MACCE) %>%
  imap(~ {
    # Chạy hồi quy logistic cho từng biến
    glm_formula <- as.formula(paste("TOCA ~", .y))  
    model <- glm(glm_formula, family = binomial, data = outcomehq)
    
    # Lấy kết quả hồi quy
    tidy(model, exponentiate = TRUE, conf.int = TRUE) %>%
      mutate(variable = .y)
  })
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
# Tính giá trị p chung cho các biến phân loại KILLIP và Culprit
categorical_vars <- c("KILLIP", "Culprit")

summary_table <- bind_rows(regression_results) %>%
  filter(term != "(Intercept)") %>%  # Loại bỏ hệ số chặn
  select(variable, term, estimate, conf.low, conf.high, p.value) %>%
  group_by(variable) %>%
  summarise(
    estimate = mean(estimate),
    conf.low = mean(conf.low),
    conf.high = mean(conf.high),
    p.value = min(p.value)  # Hoặc sử dụng max nếu muốn
  ) %>%
  ungroup() 

# Hiển thị kết quả với tên biến đầy đủ
summary_table %>%
  gt::gt() %>%
  tab_header(title = "Hồi quy logistic đơn biến cho TOCA",
             subtitle = "Tỷ số chênh, khoảng tin cậy 95% và giá trị p")
Hồi quy logistic đơn biến cho TOCA
Tỷ số chênh, khoảng tin cậy 95% và giá trị p
variable estimate conf.low conf.high p.value
AmitDSA 3.095238e-01 1.290457e-01 7.482738e-01 0.0083991036
AtoD 1.000976e+00 9.920997e-01 1.009311e+00 0.8218999536
Chototal 8.436388e-01 6.370652e-01 1.103489e+00 0.2222351553
ClassGRACE 1.376232e+00 5.307840e-01 3.781269e+00 0.3664735419
ClassTIMI 7.558309e-01 NA 1.229478e+72 0.3357337260
CrCl 1.020214e+00 1.003917e+00 1.037416e+00 0.0160536395
Culprit 1.655372e+07 1.237496e+00 NA 0.0005822195
DES 1.492977e-07 NA 1.989517e+71 0.9857943456
GRACE 1.003426e+00 9.923449e-01 1.014487e+00 0.5401065853
GRACE1 7.333333e-01 2.884340e-01 1.705160e+00 0.4890053418
GRACE2 1.401330e+00 6.575181e-01 2.948630e+00 0.3755609102
GRACE3 9.060284e-01 4.184918e-01 1.908512e+00 0.7975974255
HATTh 9.835729e-01 9.696377e-01 9.967490e-01 0.0178143089
HATTr 9.838546e-01 9.597273e-01 1.007152e+00 0.1830940443
HDLC 3.214581e-01 7.108502e-02 1.156266e+00 0.1159072566
Hgb 9.812489e-01 8.387574e-01 1.040004e+00 0.6783249550
KILLIP 2.388145e+06 1.218213e-01 NA 0.3837428266
KILLIP1 2.705882e+00 6.393143e-01 1.078133e+01 0.1542166448
LAD 1.971015e-01 7.861408e-02 4.472007e-01 0.0002136497
LCx 2.700000e+00 1.261258e+00 5.798436e+00 0.0103305188
LDLC 8.468999e-01 5.891682e-01 1.193698e+00 0.3541382019
LM 1.200000e+00 2.526146e-01 4.404997e+00 0.7956947141
LM1 6.869773e+06 5.154439e-72 NA 0.9857714654
LVEF 9.623583e-01 9.343358e-01 9.901396e-01 0.0091099839
LVEF40 1.920635e+00 8.062822e-01 4.423463e+00 0.1298561035
MACCE 1.277778e+00 1.777400e-01 6.210577e+00 0.7751610082
MDRD 1.016498e+00 9.965490e-01 1.038066e+00 0.1142674351
Multivesseld 2.960674e+00 1.070731e+00 1.050185e+01 0.0561153041
PCIk 4.022989e-01 8.477743e-02 2.122106e+00 0.2477127515
POBA 4.318182e+00 1.084478e+00 1.832852e+01 0.0364618736
Predominant 5.393130e-07 NA 7.518467e+63 0.9888103917
RCA 1.920635e+00 8.062822e-01 4.423463e+00 0.1298561035
RENTROP 6.549000e+00 1.836664e+00 2.573069e+01 0.0020398726
RLN 5.057143e+00 8.079613e-01 3.955271e+01 0.0823336774
RWMA 2.095238e+00 9.998198e-01 4.528465e+00 0.0535146708
STEMIequi 1.279570e+00 4.618955e-01 3.239618e+00 0.6151622295
StoD 9.983880e-01 9.909791e-01 1.005384e+00 0.6588697379
SuccessPCI 1.767750e+06 1.275169e-64 NA 0.9888474105
SymtompDSA 2.982158e-01 1.198381e-01 7.473501e-01 0.0089437687
TG 1.008325e+00 9.798751e-01 1.035459e+00 0.4930903366
THBH 6.413333e+00 2.500335e+00 1.718191e+01 0.0001350918
TIMI1 6.696915e-01 2.758501e-01 1.507534e+00 0.3500840973
TIMI2 1.551440e+00 6.901930e-01 3.762851e+00 0.3053530001
TIMI3 1.478429e-06 NA 1.970138e+72 0.9878664482
age 9.736138e-01 9.431471e-01 1.003771e+00 0.0904942999
bmi 1.052713e+00 9.310950e-01 1.185698e+00 0.3999438590
cTnIhs1 9.999914e-01 9.999306e-01 1.000031e+00 0.7151220467
cTnIhs2 1.000002e+00 9.999925e-01 1.000011e+00 0.5997819766
classbmi 1.946488e+00 8.395467e-01 4.389316e+00 0.1119551413
cre 9.772085e-01 9.531200e-01 9.977873e-01 0.0536061467
dapt 9.635066e-01 9.260860e-01 9.987466e-01 0.0525157990
dtd 1.212121e+00 5.705970e-01 2.539224e+00 0.6115870300
dysl 5.555556e-01 2.639057e-01 1.170962e+00 0.1201703432
height 7.895860e+00 4.347858e-02 1.585530e+03 0.4377609864
hr 9.899383e-01 9.689054e-01 1.009529e+00 0.3333414145
htl 5.360502e-01 2.218708e-01 1.197922e+00 0.1432847588
leuko 1.013970e+00 8.924855e-01 1.144879e+00 0.8256469186
sex 1.350649e+00 6.343201e-01 2.838483e+00 0.4292300607
tha 4.324324e-01 1.447203e-01 1.373565e+00 0.1371369347
weight 1.022909e+00 9.866694e-01 1.060557e+00 0.2140641986