Bài giảng với các nội dung: dữ liệu thực tế; phân tích mô tả và so sánh dữ liệu y tế; mô tả biến liên tục; mô tả biến theo nhóm; mô tả bằng biểu đồ; biểu đổ phổ biến; phân bố whr theo nhóm diabetes; tương quan giữa whr và bmi; tương quan đa biến; hàm R cho phân tích mô tả...
Tuan V Nguyen Garvan Institute of Medical Research Professor, UNSW School of Public Health and Community Medicine Professor of Predictive Medicine, University of Technology Sydney Adj Professor of Epidemiology and Biostatistics, School of Medicine Sydney, University of Notre Dame Australia Phân tích liệu ứng dụng | Đại học Dược Hà Nội | 12/6 to 17/6/2019 © Tuan V Nguyen Dữ liệu thực tế Nghiên cứu tiểu đường (n = 3165 nam nữ) > db = read.csv("~/Dropbox/_Conferences and Workshops/Dai hoc Duoc 62019/Datasets/Diabetes data.csv") > head(db) id age gender height weight waist hip sysbp diabp active hypertension 1 76 Female 163 53 90 93 160 90 40 Female 149 51 74 94 100 60 0 51 Female 151 55 91 100 120 80 0 43 Female 158 62 78 96 120 80 72 Female 148 47 91 95 130 60 44 Male 155 48 69 86 120 80 0 > bmi whr diabetes 19.95 0.97 IFG 22.97 0.79 Normal 24.12 0.91 Normal 24.84 0.81 Normal 21.46 0.96 IFG 19.98 0.80 Normal sim(db) Phân tích mơ tả so sánh • Mơ tả biến liên tục (continuous variables) • Mơ tả biến phân nhóm (categorical variables) • So sánh hai nhóm: biến liên tục • So sánh hai nhóm: biến phân nhóm Mơ tả biến liên tục • Biểu đồ phân bố, biểu đồ hộp • Phân bố chuẩn: trung bình, độ lệch chuẩn • Phân bố lệch so với phân bố chuẩn: trung vị, bách phân vị 25%, 75% Mô tả biến phân nhóm • Biểu đồ bar • Tỉ lệ, độ lệch chuẩn, khoảng tin cậy 95% • Phân bố lệch so với phân bố chuẩn: trung vị, bách phân vị 25%, 75% Mô tả biểu đồ Biểu đồ phổ biến • Biểu đồ phân bố (hist) • Biểu đồ hộp (boxplot) • Biểu đồ tương quan (plot) • Biểu đồ tương quan đa biến (pairs.panels; package psych) Phân bố whr (tỉ số eo – mông) hist(db$whr, breaks=20, col="blue", border="white") 400 200 Frequency 600 800 Histogram of db$whr 0.6 0.8 1.0 db$whr 1.2 1.4 Phân bố whr theo nhóm diabetes 0.6 0.8 1.0 1.2 boxplot(db$whr ~ db$diabetes, col="blue", border="red") IFG Normal Yes Phân bố whr theo nhóm diabetes (sắp xếp lại) db$diabetes = factor(db$diabetes, levels=c("Normal", "IFG", "Yes")) 0.6 0.8 1.0 1.2 boxplot(db$whr ~ db$diabetes, col="blue", border="red") Normal IFG Yes Tương quan whr bmi plot(db$whr ~ db$bmi, pch=16, col="blue") 1.0 0.8 0.6 db$whr 1.2 abline(lm(db$whr ~ db$bmi), col="red") 15 20 25 30 db$bmi 35 40 45 Tương quan đa biến library(psych) # Chọn biến số từ db vars = db[,c("age", "weight", "bmi", "waist", "hip", "whr")] pairs.panels(vars) 40 60 80 80 100 120 0.6 0.8 1.0 1.2 30 -0.13 -0.05 0.19 -0.03 0.32 60 90 age 60 120 60 90 waist 0.74 0.76 hip 0.13 0.6 1.0 whr 30 50 70 90 15 25 35 45 15 0.71 0.72 0.37 60 80 100 100 bmi 30 45 0.84 0.74 0.74 0.38 60 40 80 weight Tương quan đa biến library(corrplot) # tính hệ số tương quan corr = cor(na.omit(vars)) age whr hip waist bmi weight age corrplot(corr, method="circle") 0.8 0.6 weight 0.4 bmi 0.2 waist -0.2 -0.4 hip -0.6 whr -0.8 -1 Package "DescTools" Hàm R cho phân tích mơ tả • Package "DescTools" "table1" • Hàm chính: Desc Desc(var ~ group, options) • Hàm chính: table1 Desc(~var1 + var2 + var3 ~ group) Mô tả biến waist (biến liên tục) db = read.csv("~/Dropbox/_Conferences and Workshops/Dai hoc Duoc 6-2019/Datasets/Diabetes data.csv") Desc(db$waist) > library(DescTools) > Desc(db$waist) -db$waist (numeric) db$waist (numeric) 0.035 0.030 length 3'165 05 65.00 n 3'154 99.7% NAs 11 0.3% unique 76 10 69.00 25 74.00 median 82.00 0s 0.0% mean 81.98 75 89.00 90 95.00 meanCI 81.62 82.35 0.025 95 99.00 1.00 75 50 25 00 0.020 0.015 0.010 0.005 0.000 50 range 66.00 sd 10.43 vcoef 0.13 mad 11.86 IQR 15.00 skew 0.20 kurt -0.08 lowest : 54.0 (2), 55.0, 56.0 (2), 57.0 (4), 58.0 (3) highest: 116.0, 117.0, 118.0 (2), 119.0 (2), 120.0 (2) 60 70 80 90 100 110 120 Mô tả biến diabetes (biến phân nhóm) Desc(db$diabetes) > Desc(db$diabetes) -db$diabetes (factor) db$diabetes (factor) Normal length 3'165 level Normal IFG Yes n 3'165 100.0% freq 2'680 243 242 NAs unique levels 3 0.0% perc 84.7% 7.7% 7.6% cumfreq 2'680 2'923 3'165 dupes y cumperc 84.7% 92.4% 100.0% IFG Yes 1000 2000 frequency 3000 0.0 0.2 0.4 0.6 percent 0.8 1.0 Phân tích so sánh: biến liên tục (t-test) > Desc(db$waist ~ db$gender) > t.test(db$waist ~ db$gender) db$waist ~ db$gender Welch Two Sample t-test Summary: n pairs: 3'165, valid: 3'154 (99.7%), missings: 11 (0.3%), groups: data: db$waist by db$gender t = -15.666, df = 2050.2, p-value < 2.2e-16 alternative hypothesis: true difference in means is not equal to 95 percent confidence interval: -6.652544 -5.172280 sample estimates: mean in group Female mean in group Male 80.10455 86.01697 mean median sd IQR n np NAs 0s Female 80.105 79.000 10.226 14.000 2'152 68.231% Male 86.017 87.000 9.697 13.000 1'002 31.769% Kruskal-Wallis rank sum test: Kruskal-Wallis chi-squared = 240.82, df = 1, p-value < 2.2e-16 Biến phân tích: Liên tục (waist) Biến so sánh: Phân nhóm (gender) Phương pháp: Kiểm định t (t-test) Phân tích mơ tả so sánh: biến liên tục > Desc(db$waist ~ db$diabetes) -db$waist ~ db$diabetes Summary: n pairs: 3'165, valid: 3'154 (99.7%), missings: 11 (0.3%), groups: db$waist ~ db$diabetes Kruskal-Wallis rank sum test: Kruskal-Wallis chi-squared = 27.71, df = 2, pvalue = 9.614e-07 n=242 n=2671 n=241 means 84.5 IFG 83.5 Yes 82.5 81.5 Yes 83.743 83.000 9.510 12.000 241 7.641% 110 Normal 81.557 81.000 10.435 15.000 2'671 84.686% 60 70 80 90 mean median sd IQR n np NAs 0s IFG 84.936 85.000 10.620 15.000 242 7.673% IFG Normal Yes Normal x$g Phân tích mơ tả so sánh: biến phân nhóm > Desc(db$diabetes ~ db$gender) -db$diabetes ~ db$gender Summary: n: 3'165, rows: 3, columns: Pearson's Chi-squared test: X-squared = 9.1224, df = 2, p-value = 0.01045 db$gender Female Male Sum Biến phân tích: Phân nhóm (diabetes) Biến so sánh: Phân nhóm (gender) db$diabetes IFG freq perc p.row p.col 157 5.0% 64.6% 7.3% 86 2.7% 35.4% 8.6% 243 7.7% Normal freq perc p.row p.col 1'857 58.7% 69.3% 85.9% 823 26.0% 30.7% 82.0% 2'680 84.7% Yes freq perc p.row p.col 147 4.6% 60.7% 6.8% 95 3.0% 39.3% 9.5% 242 7.6% Sum freq perc p.row p.col 2'161 68.3% 1'004 3'165 31.7% 100.0% Phương pháp: Kiểm định Ki bình phương (Chi squared test) Package "table1" Package "table1" • Có thể mơ tả nhiều biến lúc • Mơ tả theo nhóm • Hàm table1(~var1 + var2 + var3 | group) • Ví dụ library(table1) table1(~age + height + weight + waist + diabetes | gender, data=db) Phân tích mơ tả • Biểu đồ – histogram, boxplot, scatterplot • Chỉ số thống kê – biến liên tục: trung bình, độ lệch chuẩn – biến phân nhóm: tỉ lệ, độ lệch chuẩn • So sánh >2 nhóm – biến liên tục: t-test (2 nhóm), Kruskal-Wallis (>2 nhóm) – biến phân nhóm: Ki bình phương Phân tích mơ tả: R packages • Biểu đồ – hist, boxplot, plot, pairs.panels • Chỉ số thống kê – biến liên tục: Desc, table1 – biến phân nhóm: Desc, table1 • So sánh >2 nhóm – biến liên tục: Desc, t.test – biến phân nhóm: Desc ... Kruskal-Wallis (>2 nhóm) – biến phân nhóm: Ki bình phương Phân tích mơ tả: R packages • Biểu đồ – hist, boxplot, plot, pairs.panels • Chỉ số thống kê – biến liên tục: Desc, table1 – biến phân nhóm: Desc, table1... chi-squared = 240.82, df = 1, p-value < 2.2e-16 Biến phân tích: Liên tục (waist) Biến so sánh: Phân nhóm (gender) Phương pháp: Ki? ??m định t (t-test) Phân tích mơ tả so sánh: biến liên tục > Desc(db$waist... biến liên tục • Biểu đồ phân bố, biểu đồ hộp • Phân bố chuẩn: trung bình, độ lệch chuẩn • Phân bố lệch so với phân bố chuẩn: trung vị, bách phân vị 25%, 75% Mơ tả biến phân nhóm • Biểu đồ bar