Nghiên cứu về mối liên hệ giữa chỉ số FLI và mức độ nhiễm mỡ gan ở bệnh nhân MAFLD có bệnh mạch vành

#Thiết kế nghiên cứu #Cỡ mẫu #Các bước chạy số liệu: Nghiên cứu được thiết kế theo phương pháp quan sát mô tả cắt ngang. Sau khi xác định cỡ mẫu phù hợp, dữ liệu được nhập từ bộ số liệu tổng của bệnh nhân MAFLD vào phần mềm R (R Foundation for Statistical Computing, Vienna, Austria). Bước đầu tiên là lọc nhóm bệnh nhân chỉ mắc MAFLD đơn thuần để đảm bảo tính thuần nhất của quần thể nghiên cứu. Xử lý dữ liệu thiếu (missing data) được thực hiện theo hướng tiếp cận hệ thống. Trong nghiên cứu này, chúng tôi lựa chọn phương pháp điền dữ liệu đa bội (Multiple Imputation - MICE), được xem là tiêu chuẩn vàng đặc biệt hiệu quả với dữ liệu thiếu kiểu MAR. Sau khi xử lý dữ liệu, chúng tôi kiểm tra phân phối của các biến bằng các phương pháp thống kê mô tả và biểu đồ phân phối. Với các biến không phân phối chuẩn, nếu cần thiết sẽ thực hiện biến đổi số liệu để đưa về dạng gần chuẩn như logarit tự nhiên (ln), căn bậc hai, hoặc nghịch đảo (1/x), từ đó đảm bảo điều kiện áp dụng các phép kiểm định tham số. Nếu không thể chuyển về phân phối chuẩn, các phương pháp phi tham số sẽ được sử dụng. Phân tích mô tả đặc điểm dân số học được thực hiện trên toàn bộ quần thể bệnh nhân MAFLD, sau đó tiếp tục mô tả và so sánh giữa ba nhóm theo chỉ số FLI (Fatty Liver Index): Nhóm FLI < 30 Nhóm FLI từ 30 đến <60 Nhóm FLI ≥ 60 Mục tiêu là đánh giá sự khác biệt có ý nghĩa thống kê giữa các nhóm này về các đặc điểm nhân khẩu học, lâm sàng và cận lâm sàng. Để so sánh sự khác biệt giữa ba nhóm FLI theo mức độ nhiễm mỡ gan đo bằng FibroTouch (biến donhm, gồm ba mức: S2, S3, S4), chúng tôi sử dụng kiểm định Kruskal-Wallis. Nếu kiểm định tổng thể cho thấy sự khác biệt có ý nghĩa thống kê (p < 0.05), chúng tôi thực hiện phân tích hậu kiểm bằng Dunn test với điều chỉnh Bonferroni để xác định các cặp nhóm khác biệt cụ thể. Cuối cùng, mô hình hồi quy logistic thứ tự (ordinal logistic regression) được sử dụng để khảo sát mối liên quan giữa chỉ số FLI (dạng phân loại) và mức độ gan nhiễm mỡ (donhm). Từ mô hình này, chúng tôi trích xuất odds ratio (OR) và khoảng tin cậy 95% (CI) cho từng mức ảnh hưởng. Kiểm định giả định tỷ lệ odds không đổi (proportional odds assumption) được thực hiện bằng Brant test để đảm bảo tính phù hợp của mô hình.

Bắt đầu phân tích

Nhập bộ số liệu vào R và đánh giá các biến có phân phối chuẩn hay không

library(readxl)
mafld <- read_excel("~/Desktop/Nghiên cứu của Duy/Nghiên cứu MAFLD - biến cố tim mạch/Tạp chí Y học Việt Nam/mafld.xlsx")
View(mafld)
shapiro.test(mafld$age)
## 
##  Shapiro-Wilk normality test
## 
## data:  mafld$age
## W = 0.98104, p-value = 5.642e-05
shapiro.test(mafld$giatrinhm)
## 
##  Shapiro-Wilk normality test
## 
## data:  mafld$giatrinhm
## W = 0.97337, p-value = 1.513e-06
shapiro.test(mafld$donhm)
## 
##  Shapiro-Wilk normality test
## 
## data:  mafld$donhm
## W = 0.77873, p-value < 2.2e-16
shapiro.test(mafld$doxh)
## 
##  Shapiro-Wilk normality test
## 
## data:  mafld$doxh
## W = 0.59055, p-value < 2.2e-16
shapiro.test(mafld$giatrixh)
## 
##  Shapiro-Wilk normality test
## 
## data:  mafld$giatrixh
## W = 0.89516, p-value = 1.141e-15
shapiro.test(mafld$cc)
## 
##  Shapiro-Wilk normality test
## 
## data:  mafld$cc
## W = 0.98542, p-value = 0.0006018
shapiro.test(mafld$cn)
## 
##  Shapiro-Wilk normality test
## 
## data:  mafld$cn
## W = 0.9925, p-value = 0.04856
shapiro.test(mafld$bmi)
## 
##  Shapiro-Wilk normality test
## 
## data:  mafld$bmi
## W = 0.97816, p-value = 1.351e-05
shapiro.test(mafld$eo)
## 
##  Shapiro-Wilk normality test
## 
## data:  mafld$eo
## W = 0.98332, p-value = 0.0001874
shapiro.test(mafld$cholestp)
## 
##  Shapiro-Wilk normality test
## 
## data:  mafld$cholestp
## W = 0.98859, p-value = 0.003978
shapiro.test(mafld$trig)
## 
##  Shapiro-Wilk normality test
## 
## data:  mafld$trig
## W = 0.80795, p-value < 2.2e-16
shapiro.test(mafld$hld)
## 
##  Shapiro-Wilk normality test
## 
## data:  mafld$hld
## W = 0.8901, p-value = 4.607e-16
shapiro.test(mafld$ldl)
## 
##  Shapiro-Wilk normality test
## 
## data:  mafld$ldl
## W = 0.9833, p-value = 0.0001851
shapiro.test(mafld$nonhdl)
## 
##  Shapiro-Wilk normality test
## 
## data:  mafld$nonhdl
## W = 0.98771, p-value = 0.002323
shapiro.test(mafld$fli)
## 
##  Shapiro-Wilk normality test
## 
## data:  mafld$fli
## W = 0.98824, p-value = 0.03366
shapiro.test(mafld$ldlhdl)
## 
##  Shapiro-Wilk normality test
## 
## data:  mafld$ldlhdl
## W = 0.98551, p-value = 0.000636
shapiro.test(mafld$hdlnonhdl)
## 
##  Shapiro-Wilk normality test
## 
## data:  mafld$hdlnonhdl
## W = 0.87985, p-value < 2.2e-16
shapiro.test(mafld$fib4)
## 
##  Shapiro-Wilk normality test
## 
## data:  mafld$fib4
## W = 0.83017, p-value < 2.2e-16
shapiro.test(mafld$glucose)
## 
##  Shapiro-Wilk normality test
## 
## data:  mafld$glucose
## W = 0.71002, p-value < 2.2e-16
shapiro.test(mafld$hba1c)
## 
##  Shapiro-Wilk normality test
## 
## data:  mafld$hba1c
## W = 0.80987, p-value < 2.2e-16
shapiro.test(mafld$alt)
## 
##  Shapiro-Wilk normality test
## 
## data:  mafld$alt
## W = 0.81245, p-value < 2.2e-16
shapiro.test(mafld$ast)
## 
##  Shapiro-Wilk normality test
## 
## data:  mafld$ast
## W = 0.83676, p-value < 2.2e-16
shapiro.test(mafld$ggt)
## 
##  Shapiro-Wilk normality test
## 
## data:  mafld$ggt
## W = 0.63383, p-value < 2.2e-16
shapiro.test(mafld$ure)
## 
##  Shapiro-Wilk normality test
## 
## data:  mafld$ure
## W = 0.88828, p-value = 3.346e-16
shapiro.test(mafld$cre)
## 
##  Shapiro-Wilk normality test
## 
## data:  mafld$cre
## W = 0.96603, p-value = 7.724e-08
shapiro.test(mafld$plt)
## 
##  Shapiro-Wilk normality test
## 
## data:  mafld$plt
## W = 0.94906, p-value = 2.655e-10
shapiro.test(mafld$agaston)
## 
##  Shapiro-Wilk normality test
## 
## data:  mafld$agaston
## W = 0.73707, p-value < 2.2e-16

Bộ biến số không phân phối chuẩn

Chuẩn hoá bộ số liệu có missing data và tách bộ số liệu chỉ có MAFLD

attach(mafld)
## The following object is masked _by_ .GlobalEnv:
## 
##     mafld
library(mice)
## 
## Attaching package: 'mice'
## The following object is masked from 'package:stats':
## 
##     filter
## The following objects are masked from 'package:base':
## 
##     cbind, rbind
library(VIM)
## Loading required package: colorspace
## Loading required package: grid
## VIM is ready to use.
## Suggestions and bug-reports can be submitted at: https://github.com/statistikat/VIM/issues
## 
## Attaching package: 'VIM'
## The following object is masked from 'package:datasets':
## 
##     sleep
library(readr)
print("Cấu trúc dữ liệu ban đầu:")
## [1] "Cấu trúc dữ liệu ban đầu:"
str(mafld)
## tibble [388 × 37] (S3: tbl_df/tbl/data.frame)
##  $ stt       : num [1:388] 1 2 3 4 5 6 7 8 9 10 ...
##  $ sex       : num [1:388] 0 1 1 0 0 0 0 1 1 1 ...
##  $ year      : num [1:388] 1958 1974 1955 1936 1975 ...
##  $ age       : num [1:388] 66 50 69 88 49 71 76 65 79 78 ...
##  $ dtd       : num [1:388] 1 1 0 1 0 0 1 0 1 0 ...
##  $ sagbt     : num [1:388] 0 1 1 0 0 1 1 0 0 1 ...
##  $ sagm      : num [1:388] 1 0 0 1 1 0 0 1 1 0 ...
##  $ giatrinhm : num [1:388] 336 189 238 302 271 224 217 268 245 256 ...
##  $ donhm     : num [1:388] 4 1 1 4 3 1 1 2 2 2 ...
##  $ doxh      : num [1:388] 1 2 1 3 1 2 1 1 3 1 ...
##  $ giatrixh  : num [1:388] 7.1 7.9 4.8 12.1 5.3 9.2 5.7 3.8 9.8 6.8 ...
##  $ cc        : num [1:388] 1.58 1.62 1.6 1.48 1.46 1.5 1.55 1.69 1.63 1.68 ...
##  $ cn        : num [1:388] 72 48 58 40 60 42 48 77 70 64 ...
##  $ bmi       : num [1:388] 28.8 18.3 22.7 18.3 28.1 ...
##  $ eo        : num [1:388] 104 77 84 75 87 78 85 96 80 86 ...
##  $ mafld     : num [1:388] 1 0 0 1 1 0 0 1 1 0 ...
##  $ hbsag     : num [1:388] 0 1 NA 0 NA NA NA 0 0 0 ...
##  $ antihcv   : num [1:388] 0 0 NA 0 NA NA NA 0 0 0 ...
##  $ cholestp  : num [1:388] 6.6 4.9 4 4.1 3.6 9 6.8 6.2 5 5.1 ...
##  $ trig      : num [1:388] 2.4 3.6 1.6 2.2 1.5 1.6 4.5 2.1 1.6 1.2 ...
##  $ hld       : num [1:388] 1.4 1.4 1.1 1 1 1.8 1.3 1.6 1.2 1 ...
##  $ ldl       : num [1:388] 4.11 1.86 2.17 2.1 1.92 6.47 3.45 3.65 3.07 3.55 ...
##  $ nonhdl    : num [1:388] 5.2 3.5 2.9 3.1 2.6 7.2 5.5 4.6 3.8 4.1 ...
##  $ fli       : num [1:388] 76.2 54.4 NA 30.9 NA ...
##  $ ldlhdl    : num [1:388] 2.94 1.33 1.97 2.1 1.92 ...
##  $ hdlnonhdl : num [1:388] 0.269 0.4 0.379 0.323 0.385 ...
##  $ fib4      : num [1:388] 1.36 1.95 1.95 5.26 1.05 ...
##  $ glucose   : num [1:388] 6.4 9.6 6.7 6 4.6 6.9 20.5 5.7 6.9 4.5 ...
##  $ hba1c     : num [1:388] 6.9 NA NA 6.2 NA 6 13.4 5.7 7.4 5.9 ...
##  $ alt       : num [1:388] 20 31 23 40 11.4 22 12 40 54 22 ...
##  $ ast       : num [1:388] 24 42 30 48 21 25 19 34 37 26 ...
##  $ ggt       : num [1:388] 24 200 NA 114 NA 39 22 69 79 27 ...
##  $ ure       : num [1:388] 7.3 3.5 7.2 5.3 3.1 7.8 5.2 3.8 5.9 4.1 ...
##  $ cre       : num [1:388] 75 95 102 64 64 76 65 70 102 78 ...
##  $ plt       : num [1:388] 260 193 221 127 291 ...
##  $ agaston   : num [1:388] 128.3 243.7 39.6 338.9 NA ...
##  $ multisteno: num [1:388] 0 1 0 0 0 1 0 1 1 0 ...
print("Tóm tắt dữ liệu và các giá trị thiếu:")
## [1] "Tóm tắt dữ liệu và các giá trị thiếu:"
summary(mafld)
##       stt              sex              year           age       
##  Min.   :  1.00   Min.   :0.0000   Min.   :1936   Min.   :37.00  
##  1st Qu.: 97.75   1st Qu.:0.0000   1st Qu.:1949   1st Qu.:63.00  
##  Median :194.50   Median :1.0000   Median :1954   Median :70.00  
##  Mean   :194.50   Mean   :0.6443   Mean   :1955   Mean   :69.02  
##  3rd Qu.:291.25   3rd Qu.:1.0000   3rd Qu.:1961   3rd Qu.:75.00  
##  Max.   :388.00   Max.   :1.0000   Max.   :1987   Max.   :88.00  
##                                                                  
##       dtd             sagbt             sagm          giatrinhm    
##  Min.   :0.0000   Min.   :0.0000   Min.   :0.0000   Min.   :179.0  
##  1st Qu.:0.0000   1st Qu.:0.0000   1st Qu.:0.0000   1st Qu.:222.0  
##  Median :0.0000   Median :0.0000   Median :0.0000   Median :245.5  
##  Mean   :0.3196   Mean   :0.4794   Mean   :0.4806   Mean   :250.9  
##  3rd Qu.:1.0000   3rd Qu.:1.0000   3rd Qu.:1.0000   3rd Qu.:279.2  
##  Max.   :1.0000   Max.   :1.0000   Max.   :1.0000   Max.   :354.0  
##                                    NA's   :1                       
##      donhm            doxh          giatrixh            cc       
##  Min.   :1.000   Min.   :1.000   Min.   : 2.500   Min.   :1.450  
##  1st Qu.:1.000   1st Qu.:1.000   1st Qu.: 5.200   1st Qu.:1.550  
##  Median :2.000   Median :1.000   Median : 6.100   Median :1.600  
##  Mean   :1.987   Mean   :1.371   Mean   : 6.545   Mean   :1.607  
##  3rd Qu.:3.000   3rd Qu.:2.000   3rd Qu.: 7.400   3rd Qu.:1.660  
##  Max.   :4.000   Max.   :4.000   Max.   :16.900   Max.   :1.800  
##                                                                  
##        cn             bmi              eo             mafld       
##  Min.   :37.00   Min.   :15.06   Min.   : 63.00   Min.   :0.0000  
##  1st Qu.:56.00   1st Qu.:22.22   1st Qu.: 85.00   1st Qu.:0.0000  
##  Median :62.00   Median :23.88   Median : 90.00   Median :0.0000  
##  Mean   :62.08   Mean   :23.99   Mean   : 89.85   Mean   :0.4974  
##  3rd Qu.:68.00   3rd Qu.:25.63   3rd Qu.: 94.00   3rd Qu.:1.0000  
##  Max.   :95.00   Max.   :35.16   Max.   :119.00   Max.   :1.0000  
##                                                                   
##      hbsag            antihcv           cholestp           trig       
##  Min.   :0.00000   Min.   :0.00000   Min.   : 2.100   Min.   : 0.500  
##  1st Qu.:0.00000   1st Qu.:0.00000   1st Qu.: 4.600   1st Qu.: 1.300  
##  Median :0.00000   Median :0.00000   Median : 5.600   Median : 1.900  
##  Mean   :0.07071   Mean   :0.03046   Mean   : 5.529   Mean   : 2.206  
##  3rd Qu.:0.00000   3rd Qu.:0.00000   3rd Qu.: 6.400   3rd Qu.: 2.700  
##  Max.   :1.00000   Max.   :1.00000   Max.   :11.800   Max.   :13.000  
##  NA's   :190       NA's   :191                                        
##       hld             ldl            nonhdl           fli        
##  Min.   :0.700   Min.   :0.770   Min.   : 1.30   Min.   : 3.722  
##  1st Qu.:1.000   1st Qu.:2.482   1st Qu.: 3.50   1st Qu.:31.381  
##  Median :1.200   Median :3.310   Median : 4.30   Median :46.866  
##  Mean   :1.226   Mean   :3.361   Mean   : 4.31   Mean   :47.540  
##  3rd Qu.:1.400   3rd Qu.:4.175   3rd Qu.: 5.10   3rd Qu.:62.858  
##  Max.   :3.600   Max.   :9.450   Max.   :10.40   Max.   :98.083  
##                                                  NA's   :130     
##      ldlhdl         hdlnonhdl           fib4            glucose      
##  Min.   :0.7455   Min.   :0.1290   Min.   :0.07279   Min.   : 3.900  
##  1st Qu.:2.0678   1st Qu.:0.2279   1st Qu.:1.27239   1st Qu.: 5.200  
##  Median :2.7561   Median :0.2824   Median :1.60694   Median : 5.900  
##  Mean   :2.8029   Mean   :0.3104   Mean   :1.80343   Mean   : 6.497  
##  3rd Qu.:3.5021   3rd Qu.:0.3603   3rd Qu.:2.13819   3rd Qu.: 6.800  
##  Max.   :6.7500   Max.   :0.8571   Max.   :7.90015   Max.   :20.500  
##                                    NA's   :1                         
##      hba1c             alt              ast             ggt        
##  Min.   : 4.100   Min.   :  6.00   Min.   : 2.50   Min.   :  6.30  
##  1st Qu.: 5.700   1st Qu.: 18.00   1st Qu.:22.00   1st Qu.: 25.00  
##  Median : 6.050   Median : 23.00   Median :26.00   Median : 38.50  
##  Mean   : 6.478   Mean   : 28.61   Mean   :28.16   Mean   : 49.54  
##  3rd Qu.: 6.900   3rd Qu.: 34.00   3rd Qu.:31.00   3rd Qu.: 57.00  
##  Max.   :13.400   Max.   :113.00   Max.   :87.20   Max.   :421.00  
##  NA's   :94       NA's   :1        NA's   :1       NA's   :130     
##       ure              cre              plt           agaston       
##  Min.   : 2.300   Min.   : 46.30   Min.   : 96.0   Min.   :   0.00  
##  1st Qu.: 4.400   1st Qu.: 75.92   1st Qu.:189.0   1st Qu.:  63.17  
##  Median : 5.300   Median : 88.00   Median :221.0   Median : 188.91  
##  Mean   : 5.595   Mean   : 89.03   Mean   :229.7   Mean   : 364.51  
##  3rd Qu.: 6.400   3rd Qu.:100.00   3rd Qu.:263.2   3rd Qu.: 485.13  
##  Max.   :19.100   Max.   :182.00   Max.   :561.0   Max.   :2893.28  
##                                                    NA's   :64       
##    multisteno    
##  Min.   :0.0000  
##  1st Qu.:0.0000  
##  Median :1.0000  
##  Mean   :0.5232  
##  3rd Qu.:1.0000  
##  Max.   :1.0000  
## 
print("Trực quan hóa dữ liệu bị thiếu:")
## [1] "Trực quan hóa dữ liệu bị thiếu:"
aggr_plot <- aggr(mafld, col=c('navyblue','red'), numbers=TRUE, sortVars=TRUE, 
                  labels=names(mafld), cex.axis=.7, 
                  gap=3, ylab=c("Biểu đồ dữ liệu thiếu","Quy luật"))

## 
##  Variables sorted by number of missings: 
##    Variable      Count
##     antihcv 0.49226804
##       hbsag 0.48969072
##         fli 0.33505155
##         ggt 0.33505155
##       hba1c 0.24226804
##     agaston 0.16494845
##        sagm 0.00257732
##        fib4 0.00257732
##         alt 0.00257732
##         ast 0.00257732
##         stt 0.00000000
##         sex 0.00000000
##        year 0.00000000
##         age 0.00000000
##         dtd 0.00000000
##       sagbt 0.00000000
##   giatrinhm 0.00000000
##       donhm 0.00000000
##        doxh 0.00000000
##    giatrixh 0.00000000
##          cc 0.00000000
##          cn 0.00000000
##         bmi 0.00000000
##          eo 0.00000000
##       mafld 0.00000000
##    cholestp 0.00000000
##        trig 0.00000000
##         hld 0.00000000
##         ldl 0.00000000
##      nonhdl 0.00000000
##      ldlhdl 0.00000000
##   hdlnonhdl 0.00000000
##     glucose 0.00000000
##         ure 0.00000000
##         cre 0.00000000
##         plt 0.00000000
##  multisteno 0.00000000
print("Bắt đầu quá trình điền đa bội...")
## [1] "Bắt đầu quá trình điền đa bội..."
imputed_data <- mice(mafld, m=5, method='pmm', seed=123)
## 
##  iter imp variable
##   1   1  sagm  hbsag  antihcv  fli  fib4  hba1c  alt  ast  ggt  agaston
##   1   2  sagm  hbsag  antihcv  fli  fib4  hba1c  alt  ast  ggt  agaston
##   1   3  sagm  hbsag  antihcv  fli  fib4  hba1c  alt  ast  ggt  agaston
##   1   4  sagm  hbsag  antihcv  fli  fib4  hba1c  alt  ast  ggt  agaston
##   1   5  sagm  hbsag  antihcv  fli  fib4  hba1c  alt  ast  ggt  agaston
##   2   1  sagm  hbsag  antihcv  fli  fib4  hba1c  alt  ast  ggt  agaston
##   2   2  sagm  hbsag  antihcv  fli  fib4  hba1c  alt  ast  ggt  agaston
##   2   3  sagm  hbsag  antihcv  fli  fib4  hba1c  alt  ast  ggt  agaston
##   2   4  sagm  hbsag  antihcv  fli  fib4  hba1c  alt  ast  ggt  agaston
##   2   5  sagm  hbsag  antihcv  fli  fib4  hba1c  alt  ast  ggt  agaston
##   3   1  sagm  hbsag  antihcv  fli  fib4  hba1c  alt  ast  ggt  agaston
##   3   2  sagm  hbsag  antihcv  fli  fib4  hba1c  alt  ast  ggt  agaston
##   3   3  sagm  hbsag  antihcv  fli  fib4  hba1c  alt  ast  ggt  agaston
##   3   4  sagm  hbsag  antihcv  fli  fib4  hba1c  alt  ast  ggt  agaston
##   3   5  sagm  hbsag  antihcv  fli  fib4  hba1c  alt  ast  ggt  agaston
##   4   1  sagm  hbsag  antihcv  fli  fib4  hba1c  alt  ast  ggt  agaston
##   4   2  sagm  hbsag  antihcv  fli  fib4  hba1c  alt  ast  ggt  agaston
##   4   3  sagm  hbsag  antihcv  fli  fib4  hba1c  alt  ast  ggt  agaston
##   4   4  sagm  hbsag  antihcv  fli  fib4  hba1c  alt  ast  ggt  agaston
##   4   5  sagm  hbsag  antihcv  fli  fib4  hba1c  alt  ast  ggt  agaston
##   5   1  sagm  hbsag  antihcv  fli  fib4  hba1c  alt  ast  ggt  agaston
##   5   2  sagm  hbsag  antihcv  fli  fib4  hba1c  alt  ast  ggt  agaston
##   5   3  sagm  hbsag  antihcv  fli  fib4  hba1c  alt  ast  ggt  agaston
##   5   4  sagm  hbsag  antihcv  fli  fib4  hba1c  alt  ast  ggt  agaston
##   5   5  sagm  hbsag  antihcv  fli  fib4  hba1c  alt  ast  ggt  agaston
## Warning: Number of logged events: 1
print("Tóm tắt quá trình điền:")
## [1] "Tóm tắt quá trình điền:"
summary(imputed_data)
## Class: mids
## Number of multiple imputations:  5 
## Imputation methods:
##        stt        sex       year        age        dtd      sagbt       sagm 
##         ""         ""         ""         ""         ""         ""      "pmm" 
##  giatrinhm      donhm       doxh   giatrixh         cc         cn        bmi 
##         ""         ""         ""         ""         ""         ""         "" 
##         eo      mafld      hbsag    antihcv   cholestp       trig        hld 
##         ""         ""      "pmm"      "pmm"         ""         ""         "" 
##        ldl     nonhdl        fli     ldlhdl  hdlnonhdl       fib4    glucose 
##         ""         ""      "pmm"         ""         ""      "pmm"         "" 
##      hba1c        alt        ast        ggt        ure        cre        plt 
##      "pmm"      "pmm"      "pmm"      "pmm"         ""         ""         "" 
##    agaston multisteno 
##      "pmm"         "" 
## PredictorMatrix:
##       stt sex year age dtd sagbt sagm giatrinhm donhm doxh giatrixh cc cn bmi
## stt     0   1    1   0   1     1    1         1     1    1        1  1  1   1
## sex     1   0    1   0   1     1    1         1     1    1        1  1  1   1
## year    1   1    0   0   1     1    1         1     1    1        1  1  1   1
## age     1   1    1   0   1     1    1         1     1    1        1  1  1   1
## dtd     1   1    1   0   0     1    1         1     1    1        1  1  1   1
## sagbt   1   1    1   0   1     0    1         1     1    1        1  1  1   1
##       eo mafld hbsag antihcv cholestp trig hld ldl nonhdl fli ldlhdl hdlnonhdl
## stt    1     1     1       1        1    1   1   1      1   1      1         1
## sex    1     1     1       1        1    1   1   1      1   1      1         1
## year   1     1     1       1        1    1   1   1      1   1      1         1
## age    1     1     1       1        1    1   1   1      1   1      1         1
## dtd    1     1     1       1        1    1   1   1      1   1      1         1
## sagbt  1     1     1       1        1    1   1   1      1   1      1         1
##       fib4 glucose hba1c alt ast ggt ure cre plt agaston multisteno
## stt      1       1     1   1   1   1   1   1   1       1          1
## sex      1       1     1   1   1   1   1   1   1       1          1
## year     1       1     1   1   1   1   1   1   1       1          1
## age      1       1     1   1   1   1   1   1   1       1          1
## dtd      1       1     1   1   1   1   1   1   1       1          1
## sagbt    1       1     1   1   1   1   1   1   1       1          1
## Number of logged events:  1 
##   it im dep      meth out
## 1  0  0     collinear age
print("Kiểm tra lại giá trị thiếu trong bộ dữ liệu đã điền:")
## [1] "Kiểm tra lại giá trị thiếu trong bộ dữ liệu đã điền:"
complete_data_1 <- complete(imputed_data, 1)
summary(complete_data_1)
##       stt              sex              year           age       
##  Min.   :  1.00   Min.   :0.0000   Min.   :1936   Min.   :37.00  
##  1st Qu.: 97.75   1st Qu.:0.0000   1st Qu.:1949   1st Qu.:63.00  
##  Median :194.50   Median :1.0000   Median :1954   Median :70.00  
##  Mean   :194.50   Mean   :0.6443   Mean   :1955   Mean   :69.02  
##  3rd Qu.:291.25   3rd Qu.:1.0000   3rd Qu.:1961   3rd Qu.:75.00  
##  Max.   :388.00   Max.   :1.0000   Max.   :1987   Max.   :88.00  
##       dtd             sagbt             sagm          giatrinhm    
##  Min.   :0.0000   Min.   :0.0000   Min.   :0.0000   Min.   :179.0  
##  1st Qu.:0.0000   1st Qu.:0.0000   1st Qu.:0.0000   1st Qu.:222.0  
##  Median :0.0000   Median :0.0000   Median :0.0000   Median :245.5  
##  Mean   :0.3196   Mean   :0.4794   Mean   :0.4794   Mean   :250.9  
##  3rd Qu.:1.0000   3rd Qu.:1.0000   3rd Qu.:1.0000   3rd Qu.:279.2  
##  Max.   :1.0000   Max.   :1.0000   Max.   :1.0000   Max.   :354.0  
##      donhm            doxh          giatrixh            cc       
##  Min.   :1.000   Min.   :1.000   Min.   : 2.500   Min.   :1.450  
##  1st Qu.:1.000   1st Qu.:1.000   1st Qu.: 5.200   1st Qu.:1.550  
##  Median :2.000   Median :1.000   Median : 6.100   Median :1.600  
##  Mean   :1.987   Mean   :1.371   Mean   : 6.545   Mean   :1.607  
##  3rd Qu.:3.000   3rd Qu.:2.000   3rd Qu.: 7.400   3rd Qu.:1.660  
##  Max.   :4.000   Max.   :4.000   Max.   :16.900   Max.   :1.800  
##        cn             bmi              eo             mafld       
##  Min.   :37.00   Min.   :15.06   Min.   : 63.00   Min.   :0.0000  
##  1st Qu.:56.00   1st Qu.:22.22   1st Qu.: 85.00   1st Qu.:0.0000  
##  Median :62.00   Median :23.88   Median : 90.00   Median :0.0000  
##  Mean   :62.08   Mean   :23.99   Mean   : 89.85   Mean   :0.4974  
##  3rd Qu.:68.00   3rd Qu.:25.63   3rd Qu.: 94.00   3rd Qu.:1.0000  
##  Max.   :95.00   Max.   :35.16   Max.   :119.00   Max.   :1.0000  
##      hbsag            antihcv           cholestp           trig       
##  Min.   :0.00000   Min.   :0.00000   Min.   : 2.100   Min.   : 0.500  
##  1st Qu.:0.00000   1st Qu.:0.00000   1st Qu.: 4.600   1st Qu.: 1.300  
##  Median :0.00000   Median :0.00000   Median : 5.600   Median : 1.900  
##  Mean   :0.08763   Mean   :0.03866   Mean   : 5.529   Mean   : 2.206  
##  3rd Qu.:0.00000   3rd Qu.:0.00000   3rd Qu.: 6.400   3rd Qu.: 2.700  
##  Max.   :1.00000   Max.   :1.00000   Max.   :11.800   Max.   :13.000  
##       hld             ldl            nonhdl           fli        
##  Min.   :0.700   Min.   :0.770   Min.   : 1.30   Min.   : 3.722  
##  1st Qu.:1.000   1st Qu.:2.482   1st Qu.: 3.50   1st Qu.:30.847  
##  Median :1.200   Median :3.310   Median : 4.30   Median :46.859  
##  Mean   :1.226   Mean   :3.361   Mean   : 4.31   Mean   :47.084  
##  3rd Qu.:1.400   3rd Qu.:4.175   3rd Qu.: 5.10   3rd Qu.:62.855  
##  Max.   :3.600   Max.   :9.450   Max.   :10.40   Max.   :98.083  
##      ldlhdl         hdlnonhdl           fib4            glucose      
##  Min.   :0.7455   Min.   :0.1290   Min.   :0.07279   Min.   : 3.900  
##  1st Qu.:2.0678   1st Qu.:0.2279   1st Qu.:1.27252   1st Qu.: 5.200  
##  Median :2.7561   Median :0.2824   Median :1.60711   Median : 5.900  
##  Mean   :2.8029   Mean   :0.3104   Mean   :1.80413   Mean   : 6.497  
##  3rd Qu.:3.5021   3rd Qu.:0.3603   3rd Qu.:2.13760   3rd Qu.: 6.800  
##  Max.   :6.7500   Max.   :0.8571   Max.   :7.90015   Max.   :20.500  
##      hba1c             alt              ast             ggt        
##  Min.   : 4.100   Min.   :  6.00   Min.   : 2.50   Min.   :  6.30  
##  1st Qu.: 5.700   1st Qu.: 18.00   1st Qu.:22.00   1st Qu.: 25.00  
##  Median : 6.000   Median : 23.00   Median :26.00   Median : 37.00  
##  Mean   : 6.363   Mean   : 28.58   Mean   :28.15   Mean   : 48.54  
##  3rd Qu.: 6.600   3rd Qu.: 34.00   3rd Qu.:31.00   3rd Qu.: 57.80  
##  Max.   :13.400   Max.   :113.00   Max.   :87.20   Max.   :421.00  
##       ure              cre              plt           agaston       
##  Min.   : 2.300   Min.   : 46.30   Min.   : 96.0   Min.   :   0.00  
##  1st Qu.: 4.400   1st Qu.: 75.92   1st Qu.:189.0   1st Qu.:  61.52  
##  Median : 5.300   Median : 88.00   Median :221.0   Median : 178.10  
##  Mean   : 5.595   Mean   : 89.03   Mean   :229.7   Mean   : 370.36  
##  3rd Qu.: 6.400   3rd Qu.:100.00   3rd Qu.:263.2   3rd Qu.: 481.30  
##  Max.   :19.100   Max.   :182.00   Max.   :561.0   Max.   :2893.28  
##    multisteno    
##  Min.   :0.0000  
##  1st Qu.:0.0000  
##  Median :1.0000  
##  Mean   :0.5232  
##  3rd Qu.:1.0000  
##  Max.   :1.0000
View(complete_data_1)
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
mafld_only <- complete_data_1 %>% 
  filter(mafld == 1)

Đặc điểm dân số nghiên cứu

library(gtsummary)
summary2 <- mafld_only %>%
  select(sex, age, dtd, sagbt, sagm, giatrinhm, donhm, cc, cn, bmi, eo,
         cholestp, trig, hld, ldl, nonhdl, fli, ldlhdl, hdlnonhdl,
         glucose, alt, ast, ggt, ure, cre, plt, multisteno) %>%
  tbl_summary(
    type = all_continuous() ~ "continuous2",
    statistic = list(
      all_continuous() ~ c("{mean} ({sd})", "{median} ({p25}, {p75})", "{min}, {max}"), 
      all_categorical() ~ "{n} / {N} ({p}%)"),
    digits = all_continuous() ~ 2,
    label  = list(
      sex ~ "Giới tính",
      age ~ "Tuổi",
      dtd ~ "Đái tháo đường",
      sagbt ~ "Siêu âm gan bình thường",
      sagm ~ "Siêu âm gan mỡ",
      giatrinhm ~ "Giá trị nhiễm mỡ",
      donhm ~ "Độ nhiễm mỡ", 
      cc ~ "Chiều cao", 
      cn ~ "Cân nặng", 
      bmi ~ "BMI", 
      eo ~ "Vòng eo",
      cholestp ~ "Cholesterol toàn phần", 
      trig ~ "Triglyceride", 
      hld ~ "HDL", 
      ldl ~ "LDL", 
      nonhdl ~ "Non-HDLc", 
      fli ~ "FLI", 
      ldlhdl ~ "Tỷ số LDLc/HDLc", 
      hdlnonhdl ~ "Tỷ số HDLc/non-HDLc", 
      glucose ~ "Glucose máu",
      alt ~ "ALT", 
      ast ~ "AST",
      ggt ~ "GGT",
      ure ~ "Ure", 
      cre ~ "Creatinine", 
      plt ~ "Tiểu cầu", 
      multisteno ~ "Hẹp mạch vành nhiều nhánh", 
      missing_text = "(Missing)"
    )) %>% 
  modify_caption("**Đặc điểm dân số nghiên cứu**") %>%
  bold_labels()
summary2
Đặc điểm dân số nghiên cứu
Characteristic N = 1931
Giới tính 116 / 193 (60%)
Tuổi
    Mean (SD) 69.48 (9.28)
    Median (IQR) 70.00 (63.00, 75.00)
    Range 44.00, 88.00
Đái tháo đường 77 / 193 (40%)
Siêu âm gan bình thường 12 / 193 (6.2%)
Siêu âm gan mỡ 178 / 193 (92%)
Giá trị nhiễm mỡ
    Mean (SD) 281.07 (26.97)
    Median (IQR) 278.00 (256.00, 302.00)
    Range 244.00, 354.00
Độ nhiễm mỡ
    2 76 / 193 (39%)
    3 58 / 193 (30%)
    4 59 / 193 (31%)
Chiều cao
    Mean (SD) 1.60 (0.07)
    Median (IQR) 1.60 (1.55, 1.65)
    Range 1.45, 1.76
Cân nặng
    Mean (SD) 64.85 (8.80)
    Median (IQR) 65.00 (60.00, 71.00)
    Range 40.00, 92.00
BMI
    Mean (SD) 25.29 (2.84)
    Median (IQR) 24.80 (23.53, 26.67)
    Range 18.26, 35.16
Vòng eo
    Mean (SD) 93.07 (7.00)
    Median (IQR) 92.00 (89.00, 96.00)
    Range 75.00, 119.00
Cholesterol toàn phần
    Mean (SD) 5.70 (1.26)
    Median (IQR) 5.70 (4.80, 6.50)
    Range 2.30, 9.00
Triglyceride
    Mean (SD) 2.37 (1.45)
    Median (IQR) 2.10 (1.40, 2.90)
    Range 0.80, 13.00
HDL
    Mean (SD) 1.24 (0.25)
    Median (IQR) 1.20 (1.00, 1.40)
    Range 0.70, 2.00
LDL
    Mean (SD) 3.46 (1.11)
    Median (IQR) 3.30 (2.65, 4.24)
    Range 0.85, 6.53
Non-HDLc
    Mean (SD) 4.47 (1.21)
    Median (IQR) 4.40 (3.60, 5.30)
    Range 1.30, 7.60
FLI
    Mean (SD) 57.34 (19.15)
    Median (IQR) 56.55 (42.71, 71.62)
    Range 21.21, 98.08
Tỷ số LDLc/HDLc
    Mean (SD) 2.87 (0.97)
    Median (IQR) 2.80 (2.10, 3.58)
    Range 0.82, 6.30
Tỷ số HDLc/non-HDLc
    Mean (SD) 0.30 (0.11)
    Median (IQR) 0.28 (0.22, 0.34)
    Range 0.13, 0.77
Glucose máu
    Mean (SD) 6.75 (2.23)
    Median (IQR) 6.10 (5.40, 7.20)
    Range 4.20, 19.70
ALT
    Mean (SD) 32.46 (18.24)
    Median (IQR) 28.00 (20.00, 39.00)
    Range 7.00, 113.00
AST
    Mean (SD) 29.98 (10.91)
    Median (IQR) 27.00 (23.00, 34.00)
    Range 2.50, 73.00
GGT
    Mean (SD) 55.37 (47.03)
    Median (IQR) 45.00 (28.00, 65.00)
    Range 6.30, 421.00
Ure
    Mean (SD) 5.43 (1.53)
    Median (IQR) 5.20 (4.30, 6.27)
    Range 2.30, 11.30
Creatinine
    Mean (SD) 87.51 (18.62)
    Median (IQR) 88.00 (75.00, 98.00)
    Range 51.00, 148.00
Tiểu cầu
    Mean (SD) 229.72 (56.35)
    Median (IQR) 222.00 (192.00, 265.00)
    Range 96.00, 415.00
Hẹp mạch vành nhiều nhánh 97 / 193 (50%)
1 n / N (%)

Chuyển đổi biến FLI thành biến định tính thứ tự có FLI<30; FLI >=30 và <60; FLI >=60

mafld_only$fli2 <- cut(mafld_only$fli,
                          breaks = c(-Inf, 30, 60, Inf),
                          labels = c(0, 1, 2),
                          right = FALSE)
mafld_only$fli2 <- factor(mafld_only$fli2,
                             levels = c(0, 1, 2),
                             ordered = TRUE)
table(mafld_only$fli2)
## 
##  0  1  2 
## 16 99 78
str(mafld_only$fli2)
##  Ord.factor w/ 3 levels "0"<"1"<"2": 3 2 2 3 2 3 1 3 3 2 ...
head(mafld_only)
##   stt sex year age dtd sagbt sagm giatrinhm donhm doxh giatrixh   cc cn
## 1   1   0 1958  66   1     0    1       336     4    1      7.1 1.58 72
## 2   4   0 1936  88   1     0    1       302     4    3     12.1 1.48 40
## 3   5   0 1975  49   0     0    1       271     3    1      5.3 1.46 60
## 4   8   1 1959  65   0     0    1       268     2    1      3.8 1.69 77
## 5   9   1 1945  79   1     0    1       245     2    3      9.8 1.63 70
## 6  13   1 1964  60   0     0    1       315     4    4     16.9 1.65 92
##        bmi  eo mafld hbsag antihcv cholestp trig hld  ldl nonhdl      fli
## 1 28.84153 104     1     0       0      6.6  2.4 1.4 4.11    5.2 76.22749
## 2 18.26150  75     1     0       0      4.1  2.2 1.0 2.10    3.1 30.86143
## 3 28.14787  87     1     1       0      3.6  1.5 1.0 1.92    2.6 53.60849
## 4 26.95984  96     1     0       0      6.2  2.1 1.6 3.65    4.6 75.22461
## 5 26.34649  80     1     0       0      5.0  1.6 1.2 3.07    3.8 50.38486
## 6 33.79247 107     1     0       0      5.1  1.0 1.2 3.04    3.9 89.49990
##     ldlhdl hdlnonhdl      fib4 glucose hba1c  alt ast ggt ure cre plt agaston
## 1 2.935714 0.2692308 1.3622814     6.4   6.9 20.0  24  24 7.3  75 260  128.30
## 2 2.100000 0.3225806 5.2588428     6.0   6.2 40.0  48 114 5.3  64 127  338.94
## 3 1.920000 0.3846154 1.0472972     4.6   5.8 11.4  21  35 3.1  64 291    0.00
## 4 2.281250 0.3478261 1.5740166     5.7   5.7 40.0  34  69 3.8  70 222  108.15
## 5 2.558333 0.3157895 2.8011966     6.9   7.4 54.0  37  79 5.9 102 142 1048.35
## 6 2.533333 0.3076923 0.8758424     4.5   6.5 52.0  32  92 3.1  87 304  341.13
##   multisteno fli2
## 1          0    2
## 2          0    1
## 3          0    1
## 4          1    2
## 5          1    1
## 6          1    2
View(mafld_only)
library(gtsummary)
summary3 <- mafld_only %>%
  select(sex, age, dtd, sagbt, sagm, giatrinhm, donhm, cc, cn, bmi, eo,
         cholestp, trig, hld, ldl, nonhdl, ldlhdl, hdlnonhdl,
         glucose, alt, ast, ggt, ure, cre, plt, multisteno, fli2) %>%
  tbl_summary(
    by = fli2,
    type = all_continuous() ~ "continuous2",
    statistic = list(
      all_continuous() ~ c("{mean} ({sd})", "{median} ({p25}, {p75})", "{min}, {max}"), 
      all_categorical() ~ "{n} / {N} ({p}%)"),
    digits = all_continuous() ~ 2,
    label  = list(
      sex ~ "Giới tính",
      age ~ "Tuổi",
      dtd ~ "Đái tháo đường",
      sagbt ~ "Siêu âm gan bình thường",
      sagm ~ "Siêu âm gan mỡ",
      giatrinhm ~ "Giá trị nhiễm mỡ",
      donhm ~ "Độ nhiễm mỡ", 
      cc ~ "Chiều cao", 
      cn ~ "Cân nặng", 
      bmi ~ "BMI", 
      eo ~ "Vòng eo",
      cholestp ~ "Cholesterol toàn phần", 
      trig ~ "Triglyceride", 
      hld ~ "HDL", 
      ldl ~ "LDL", 
      nonhdl ~ "Non-HDLc", 
      ldlhdl ~ "Tỷ số LDLc/HDLc", 
      hdlnonhdl ~ "Tỷ số HDLc/non-HDLc", 
      glucose ~ "Glucose máu",
      alt ~ "ALT", 
      ast ~ "AST",
      ggt ~ "GGT",
      ure ~ "Ure", 
      cre ~ "Creatinine", 
      plt ~ "Tiểu cầu", 
      multisteno ~ "Hẹp mạch vành nhiều nhánh", 
      missing_text = "(Missing)"
    )) %>% 
  add_p(pvalue_fun = ~ style_pvalue(.x, digits = 3)) %>%
  add_overall() %>%
  add_n() %>%
  modify_caption("**Đặc điểm dân số nghiên cứu**") %>%
  bold_labels()
summary3
Đặc điểm dân số nghiên cứu
Characteristic N Overall, N = 1931 0, N = 161 1, N = 991 2, N = 781 p-value2
Giới tính 193 116 / 193 (60%) 7 / 16 (44%) 56 / 99 (57%) 53 / 78 (68%) 0.116
Tuổi 193



0.012
    Mean (SD)
69.48 (9.28) 71.56 (6.77) 71.19 (8.23) 66.87 (10.40)
    Median (IQR)
70.00 (63.00, 75.00) 71.00 (68.75, 76.00) 72.00 (66.50, 76.00) 66.50 (59.25, 75.00)
    Range
44.00, 88.00 58.00, 84.00 45.00, 88.00 44.00, 86.00
Đái tháo đường 193 77 / 193 (40%) 6 / 16 (38%) 35 / 99 (35%) 36 / 78 (46%) 0.339
Siêu âm gan bình thường 193 12 / 193 (6.2%) 4 / 16 (25%) 7 / 99 (7.1%) 1 / 78 (1.3%) 0.005
Siêu âm gan mỡ 193 178 / 193 (92%) 11 / 16 (69%) 91 / 99 (92%) 76 / 78 (97%) 0.002
Giá trị nhiễm mỡ 193



0.002
    Mean (SD)
281.07 (26.97) 273.38 (28.55) 276.15 (26.03) 288.88 (26.22)
    Median (IQR)
278.00 (256.00, 302.00) 261.50 (252.75, 292.50) 271.00 (254.50, 292.50) 287.50 (267.25, 310.00)
    Range
244.00, 354.00 244.00, 328.00 245.00, 354.00 244.00, 345.00
Độ nhiễm mỡ 193



0.007
    2
76 / 193 (39%) 10 / 16 (63%) 45 / 99 (45%) 21 / 78 (27%)
    3
58 / 193 (30%) 2 / 16 (13%) 32 / 99 (32%) 24 / 78 (31%)
    4
59 / 193 (31%) 4 / 16 (25%) 22 / 99 (22%) 33 / 78 (42%)
Chiều cao 193



0.614
    Mean (SD)
1.60 (0.07) 1.59 (0.07) 1.60 (0.08) 1.61 (0.07)
    Median (IQR)
1.60 (1.55, 1.65) 1.56 (1.54, 1.67) 1.60 (1.53, 1.66) 1.60 (1.57, 1.65)
    Range
1.45, 1.76 1.50, 1.71 1.45, 1.73 1.45, 1.76
Cân nặng 193



<0.001
    Mean (SD)
64.85 (8.80) 58.31 (6.89) 61.99 (7.44) 69.82 (8.29)
    Median (IQR)
65.00 (60.00, 71.00) 59.50 (53.00, 63.50) 62.00 (59.00, 68.00) 68.50 (65.00, 75.00)
    Range
40.00, 92.00 45.00, 72.00 40.00, 78.00 53.00, 92.00
BMI 193



<0.001
    Mean (SD)
25.29 (2.84) 22.98 (1.69) 24.28 (2.04) 27.04 (2.97)
    Median (IQR)
24.80 (23.53, 26.67) 23.07 (22.22, 24.45) 24.22 (23.38, 25.74) 26.67 (24.71, 28.88)
    Range
18.26, 35.16 18.49, 25.30 18.26, 28.72 21.48, 35.16
Vòng eo 193



<0.001
    Mean (SD)
93.07 (7.00) 89.06 (3.75) 90.40 (5.34) 97.28 (7.26)
    Median (IQR)
92.00 (89.00, 96.00) 88.50 (86.75, 92.00) 91.00 (88.00, 94.00) 95.00 (92.25, 102.75)
    Range
75.00, 119.00 83.00, 96.00 75.00, 103.00 83.00, 119.00
Cholesterol toàn phần 193



0.256
    Mean (SD)
5.70 (1.26) 5.66 (1.33) 5.56 (1.26) 5.87 (1.23)
    Median (IQR)
5.70 (4.80, 6.50) 6.05 (4.90, 6.30) 5.60 (4.60, 6.40) 5.80 (5.00, 6.60)
    Range
2.30, 9.00 2.71, 8.00 2.30, 8.80 3.00, 9.00
Triglyceride 193



<0.001
    Mean (SD)
2.37 (1.45) 1.41 (0.53) 2.03 (1.01) 3.01 (1.77)
    Median (IQR)
2.10 (1.40, 2.90) 1.25 (1.05, 1.53) 1.80 (1.30, 2.35) 2.65 (2.00, 3.56)
    Range
0.80, 13.00 0.80, 2.80 0.80, 6.80 1.00, 13.00
HDL 193



0.361
    Mean (SD)
1.24 (0.25) 1.33 (0.29) 1.24 (0.24) 1.22 (0.26)
    Median (IQR)
1.20 (1.00, 1.40) 1.30 (1.18, 1.33) 1.20 (1.10, 1.40) 1.20 (1.00, 1.40)
    Range
0.70, 2.00 0.98, 2.00 0.77, 1.90 0.70, 1.80
LDL 193



0.491
    Mean (SD)
3.46 (1.11) 3.69 (1.25) 3.46 (1.13) 3.41 (1.05)
    Median (IQR)
3.30 (2.65, 4.24) 3.87 (3.21, 4.36) 3.30 (2.65, 4.25) 3.20 (2.65, 4.19)
    Range
0.85, 6.53 0.92, 6.02 0.85, 6.53 1.20, 6.50
Non-HDLc 193



0.173
    Mean (SD)
4.47 (1.21) 4.33 (1.33) 4.34 (1.21) 4.68 (1.18)
    Median (IQR)
4.40 (3.60, 5.30) 4.55 (3.73, 5.20) 4.30 (3.40, 5.17) 4.65 (3.90, 5.50)
    Range
1.30, 7.60 1.59, 6.70 1.30, 7.30 1.70, 7.60
Tỷ số LDLc/HDLc 193



0.951
    Mean (SD)
2.87 (0.97) 2.88 (1.13) 2.86 (0.98) 2.88 (0.93)
    Median (IQR)
2.80 (2.10, 3.58) 3.21 (1.91, 3.73) 2.78 (2.09, 3.58) 2.80 (2.11, 3.47)
    Range
0.82, 6.30 0.82, 4.63 0.85, 6.30 0.92, 5.42
Tỷ số HDLc/non-HDLc 193



0.114
    Mean (SD)
0.30 (0.11) 0.35 (0.17) 0.31 (0.11) 0.28 (0.10)
    Median (IQR)
0.28 (0.22, 0.34) 0.27 (0.24, 0.47) 0.28 (0.23, 0.38) 0.26 (0.22, 0.32)
    Range
0.13, 0.77 0.18, 0.70 0.14, 0.77 0.13, 0.76
Glucose máu 193



0.493
    Mean (SD)
6.75 (2.23) 6.72 (1.65) 6.59 (2.04) 6.95 (2.55)
    Median (IQR)
6.10 (5.40, 7.20) 6.30 (5.55, 7.10) 5.96 (5.40, 7.05) 6.35 (5.43, 7.28)
    Range
4.20, 19.70 5.10, 10.90 4.20, 14.80 4.50, 19.70
ALT 193



0.010
    Mean (SD)
32.46 (18.24) 27.94 (19.37) 29.66 (15.91) 36.93 (19.99)
    Median (IQR)
28.00 (20.00, 39.00) 23.50 (18.00, 28.50) 27.00 (20.00, 35.00) 31.00 (21.25, 47.00)
    Range
7.00, 113.00 11.00, 94.00 7.00, 99.00 10.00, 113.00
AST 193



0.386
    Mean (SD)
29.98 (10.91) 28.13 (11.36) 28.81 (8.82) 31.83 (12.91)
    Median (IQR)
27.00 (23.00, 34.00) 25.00 (21.00, 30.50) 27.00 (24.20, 33.20) 28.00 (23.00, 35.00)
    Range
2.50, 73.00 17.00, 66.00 2.50, 57.00 11.00, 73.00
GGT 193



<0.001
    Mean (SD)
55.37 (47.03) 25.12 (11.79) 43.88 (25.08) 76.15 (62.37)
    Median (IQR)
45.00 (28.00, 65.00) 23.50 (17.00, 29.00) 36.00 (28.00, 50.50) 59.50 (43.25, 94.68)
    Range
6.30, 421.00 6.30, 51.90 16.00, 144.20 17.00, 421.00
Ure 193



0.064
    Mean (SD)
5.43 (1.53) 4.79 (1.00) 5.63 (1.54) 5.31 (1.58)
    Median (IQR)
5.20 (4.30, 6.27) 4.80 (4.35, 5.20) 5.40 (4.60, 6.40) 5.10 (4.13, 6.13)
    Range
2.30, 11.30 2.60, 6.70 2.30, 10.20 2.50, 11.30
Creatinine 193



0.196
    Mean (SD)
87.51 (18.62) 79.18 (16.32) 88.43 (18.87) 88.06 (18.53)
    Median (IQR)
88.00 (75.00, 98.00) 75.50 (67.75, 94.35) 88.00 (75.85, 99.50) 89.00 (75.25, 97.00)
    Range
51.00, 148.00 51.00, 107.00 53.00, 145.00 52.00, 148.00
Tiểu cầu 193



0.495
    Mean (SD)
229.72 (56.35) 243.63 (62.82) 223.54 (55.09) 234.72 (56.33)
    Median (IQR)
222.00 (192.00, 265.00) 224.50 (205.75, 269.25) 219.00 (188.50, 263.50) 229.50 (186.75, 264.75)
    Range
96.00, 415.00 158.00, 415.00 96.00, 353.00 133.00, 375.00
Hẹp mạch vành nhiều nhánh 193 97 / 193 (50%) 9 / 16 (56%) 48 / 99 (48%) 40 / 78 (51%) 0.824
1 n / N (%)
2 Pearson’s Chi-squared test; Kruskal-Wallis rank sum test; Fisher’s exact test

Thực hiện kiểm định Kruskal-Wallis để đánh giá liệu có sự khác biệt giữa nhóm S2 với S3 hay S3-S4 hay S2-S4. Tiếp theo đánh giá Hồi quy logistic thứ tự (ordinal logistic regression): Phân tích giữa nhóm độ nhiễm mỡ gan S1,S2,S3 với FLI theo phân nhóm <30; 30-60 và >=60. Kiểm định giả định proportional odds (Brant test)

library(FSA)         # Để dùng dunnTest()
## Warning: package 'FSA' was built under R version 4.4.1
## Registered S3 methods overwritten by 'FSA':
##   method       from
##   confint.boot car 
##   hist.boot    car
## ## FSA v0.10.0. See citation('FSA') if used in publication.
## ## Run fishR() for related website and fishR('IFAR') for related book.
library(ggplot2)     # Vẽ biểu đồ
library(ggsignif)    # Thêm mức ý nghĩa vào biểu đồ
mafld_clean <- mafld_only[!is.na(mafld_only$fli2) & !is.na(mafld_only$donhm), ]
mafld_clean$donhm <- factor(as.character(mafld_clean$donhm),
                            levels = c("2", "3", "4"),
                            labels = c("S2", "S3", "S4"))
kruskal_result <- kruskal.test(fli2 ~ donhm, data = mafld_clean)
cat("📌 Kết quả kiểm định Kruskal-Wallis:\n")
## 📌 Kết quả kiểm định Kruskal-Wallis:
print(kruskal_result)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  fli2 by donhm
## Kruskal-Wallis chi-squared = 11.432, df = 2, p-value = 0.003292
comparison_pairs <- list(c("S2", "S3"), c("S3", "S4"), c("S2", "S4"))

ggplot(mafld_clean, aes(x = donhm, y = fli2, fill = donhm)) +
  geom_violin(trim = FALSE, alpha = 0.5, color = NA) +  # Phân bố
  geom_jitter(width = 0.15, shape = 21, size = 2, alpha = 0.7) +  # Các điểm dữ liệu
  geom_boxplot(width = 0.2, outlier.shape = NA, color = "black", alpha = 0.4) +  # Box
  geom_signif(comparisons = comparison_pairs,
              map_signif_level = TRUE,
              step_increase = 0.1) +
  labs(title = "Phân bố fli2 theo mức độ gan nhiễm mỡ",
       subtitle = "Kết hợp violin, boxplot và jitter",
       x = "Mức độ nhiễm mỡ gan (donhm)",
       y = "Chỉ số FLI phân loại (fli2)") +
  theme_minimal(base_size = 14) +
  theme(legend.position = "none")
## Warning: Computation failed in `stat_signif()`.
## Caused by error in `scales$y$range$range[2] - scales$y$range$range[1]`:
## ! non-numeric argument to binary operator

mafld_only$fli2 <- factor(mafld_only$fli2, levels = c(0,1,2), ordered = TRUE)
mafld_only$donhm <- factor(mafld_only$donhm, levels = c(2,3,4), ordered = TRUE)
library(MASS)
## 
## Attaching package: 'MASS'
## The following object is masked from 'package:gtsummary':
## 
##     select
## The following object is masked from 'package:dplyr':
## 
##     select
model <- polr(donhm ~ fli2, data = mafld_only, Hess = TRUE)
summary(model)
## Call:
## polr(formula = donhm ~ fli2, data = mafld_only, Hess = TRUE)
## 
## Coefficients:
##         Value Std. Error t value
## fli2.L 0.9409     0.3971  2.3692
## fli2.Q 0.1596     0.2741  0.5822
## 
## Intercepts:
##     Value   Std. Error t value
## 2|3 -0.2735  0.2052    -1.3325
## 3|4  1.0440  0.2179     4.7911
## 
## Residual Deviance: 409.0249 
## AIC: 417.0249
ctable <- coef(summary(model))
p_values <- pnorm(abs(ctable[, "t value"]), lower.tail = FALSE) * 2
results <- cbind(ctable, "p value" = round(p_values, 4))
print(results)
##             Value Std. Error    t value p value
## fli2.L  0.9408760  0.3971282  2.3691997  0.0178
## fli2.Q  0.1595685  0.2740809  0.5821949  0.5604
## 2|3    -0.2734912  0.2052426 -1.3325266  0.1827
## 3|4     1.0440347  0.2179099  4.7911303  0.0000
OR <- exp(coef(model))
CI <- exp(confint(model))  # cần MASS >= 7.3-60
## Waiting for profiling to be done...
data.frame(OddsRatio = OR, Lower95 = CI[,1], Upper95 = CI[,2])
##        OddsRatio   Lower95  Upper95
## fli2.L  2.562225 1.2000641 5.819443
## fli2.Q  1.173005 0.6751422 1.994316
library(brant)
brant(model)
## -------------------------------------------- 
## Test for X2  df  probability 
## -------------------------------------------- 
## Omnibus      3.54    2   0.17
## fli2.L       2.45    1   0.12
## fli2.Q       2.26    1   0.13
## -------------------------------------------- 
## 
## H0: Parallel Regression Assumption holds

Sự khác biệt chỉ có ý nghĩa giữa nhóm S2 và S4, nghĩa là: Những người có độ nhiễm mỡ gan nặng nhất (S4) có chỉ số FLI phân loại (fli2) cao hơn đáng kể so với nhóm nhẹ hơn (S2). S3 không khác biệt rõ với S2 hay S4, có thể do mức trung gian hoặc cỡ mẫu chưa đủ. –> “Chỉ số FLI phân loại có xu hướng tăng theo mức độ gan nhiễm mỡ, và có sự khác biệt có ý nghĩa thống kê giữa mức độ nhẹ (S2) và nặng (S4).”

Khi FLI phân loại tăng theo xu hướng tuyến tính (từ 0 → 2), nguy cơ (odds) tăng lên mức gan nhiễm mỡ cao hơn (S3 hoặc S4) gấp ~2.56 lần, và điều này có ý nghĩa thống kê (p = 0.0178). “Chỉ số FLI phân loại (fli2) có liên quan tuyến tính có ý nghĩa với mức độ gan nhiễm mỡ. Người có FLI phân loại cao hơn có nguy cơ cao hơn mắc mức gan nhiễm mỡ nặng hơn (S3, S4).”

Brant test kiểm định giả định “proportional odds” của mô hình hồi quy logistic thứ tự. Nếu p-value < 0.05 → giả định bị vi phạm → nên cân nhắc mô hình khác như multinomial logistic.