#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.
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
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)
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
| 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 (%) | |
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
| 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 | ||||||
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.