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
© Tuan V. Nguyen
Phân tích dữ liệu và ứng dụng | Đại học Dược Hà Nội | 12/6 to 17/6/2019
Dữ liệu thực tế
> db = read.csv("~/Dropbox/_Conferences and Workshops/Dai hoc Duoc 6- 2019/Datasets/Diabetes data.csv") > head(db)
Nghiên cứu tiểu đường (n = 3165 nam và nữ)
id age gender height weight waist hip sysbp diabp active hypertension 1 1 76 Female 163 53 90 93 160 90 0 1 2 1 40 Female 149 51 74 94 100 60 0 0 3 1 51 Female 151 55 91 100 120 80 0 0 4 1 43 Female 158 62 78 96 120 80 1 0 5 2 72 Female 148 47 91 95 130 60 1 0 6 2 44 Male 155 48 69 86 120 80 0 0
bmi whr diabetes 1 19.95 0.97 IFG 2 22.97 0.79 Normal 3 24.12 0.91 Normal 4 24.84 0.81 Normal 5 21.46 0.96 IFG 6 19.98 0.80 Normal > sim(db)
Phân tích mô tả và 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ả bằng 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")
Histogram of db$whr
0 0 8
0 0 6
0 0 4
y c n e u q e r F
0 0 2
0
0.6
0.8
1.2
1.4
1.0
db$whr
Phân bố whr theo nhóm diabetes
boxplot(db$whr ~ db$diabetes, col="blue", border="red")
2 . 1
0 . 1
8 . 0
6 . 0
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"))
boxplot(db$whr ~ db$diabetes, col="blue", border="red")
2 . 1
0
.
1
8
.
0
6 . 0
Normal
IFG
Yes
Tương quan giữa whr và bmi
plot(db$whr ~ db$bmi, pch=16, col="blue")
abline(lm(db$whr ~ db$bmi), col="red")
2 . 1
0
.
1
r h w $ b d
8
.
0
6 . 0
15
20
25
30
35
40
45
db$bmi
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
60
80
100 120
0.6 0.8 1.0 1.2
0 9
age
0 6
-0.13 -0.05
0.32
0.19 -0.03
0 3
weight
0 8
0.84 0.74 0.74 0.38
0 4
5 4
bmi
0 3
0.37
0.71 0.72
5 1
0 2 1
waist
0 9
0.74 0.76
0 6
hip
0 0 1
0.13
0 6
whr
0
.
1
6
.
0
30
50
70
90
15
25
35
45
60
80 100
Tương quan đa biến
library(corrplot)
# tính hệ số tương quan
corr = cor(na.omit(vars))
corrplot(corr, method="circle")
t
i
i
i
i
e g a
h g e w
m b
t s a w
p h
r h w
1
age
0.8
0.6
weight
0.4
0.2
bmi
0
waist
-0.2
-0.4
hip
-0.6
-0.8
whr
-1
Package "DescTools"
Hàm R cho phân tích mô tả
• Package "DescTools" và "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)
db$waist (numeric)
> library(DescTools) > Desc(db$waist) ---------------------------------------------------- db$waist (numeric)
0.035
0.030
0.025
0.020
0.015
0.010
0.005
length n NAs unique 0s mean meanCI 3'165 3'154 11 76 0 81.98 81.62 99.7% 0.3% 0.0% 82.35
0.000
.05 .10 .25 median .75 .90 .95 65.00 69.00 74.00 82.00 89.00 95.00 99.00
1.00 .75 .50 .25 .00
50
60
70
80
90
100
110
120
range sd vcoef mad IQR skew kurt 66.00 10.43 0.13 11.86 15.00 0.20 -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)
Desc(db$diabetes)
Mô tả biến diabetes (biến phân nhóm)
db$diabetes (factor)
> Desc(db$diabetes) ---------------------------------------------- db$diabetes (factor)
Normal
IFG
length n NAs unique levels dupes 3'165 3'165 0 3 3 y 100.0% 0.0%
Yes
0
1000
2000
3000
0.0 0.2 0.4 0.6 0.8 1.0
level freq perc cumfreq cumperc 1 Normal 2'680 84.7% 2'680 84.7% 2 IFG 243 7.7% 2'923 92.4% 3 Yes 242 7.6% 3'165 100.0%
frequency
percent
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: 2
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 0 95 percent confidence interval:
-6.652544 -5.172280
sample estimates: mean in group Female mean in group Male
80.10455
86.01697
Biến phân tích: Liên tục (waist)
Female Male mean 80.105 86.017 median 79.000 87.000 sd 10.226 9.697 IQR 14.000 13.000 n 2'152 1'002 np 68.231% 31.769% NAs 9 2 0s 0 0
Biến so sánh: Phân nhóm (gender)
Phương pháp: Kiểm định t (t-test)
Kruskal-Wallis rank sum test: Kruskal-Wallis chi-squared = 240.82, df = 1, p-value < 2.2e-16
Phân tích mô tả và 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: 3
db$waist ~ db$diabetes
n=242
n=2671
n=241
means
IFG
5 . 4 8
0 1 1
Yes
5
.
0 9
3 8
0 8
5
.
2 8
0 7
0 6
5
.
Normal
1 8
x$g
IFG
Normal
Yes
IFG Normal Yes mean 84.936 81.557 83.743 median 85.000 81.000 83.000 sd 10.620 10.435 9.510 IQR 15.000 15.000 12.000 n 242 2'671 241 np 7.673% 84.686% 7.641% NAs 1 9 1 0s 0 0 0
Kruskal-Wallis rank sum test: Kruskal-Wallis chi-squared = 27.71, df = 2, p- value = 9.614e-07
Phân tích mô tả và 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: 2
Pearson's Chi-squared test:
Biến phân tích: Phân nhóm (diabetes)
X-squared = 9.1224, df = 2, p-value = 0.01045
Biến so sánh: Phân nhóm (gender)
db$gender Female Male Sum db$diabetes
Phương pháp: Kiểm định Ki bình phương (Chi squared test)
IFG freq 157 86 243 perc 5.0% 2.7% 7.7% p.row 64.6% 35.4% . p.col 7.3% 8.6% .
Normal freq 1'857 823 2'680 perc 58.7% 26.0% 84.7% p.row 69.3% 30.7% . p.col 85.9% 82.0% .
Yes freq 147 95 242 perc 4.6% 3.0% 7.6% p.row 60.7% 39.3% . p.col 6.8% 9.5% .
Sum freq 2'161 1'004 3'165 perc 68.3% 31.7% 100.0% p.row . . . p.col . . .
Package "table1"
Package "table1"
• Có thể mô tả nhiều biến cùng một lúc
• Mô tả theo nhóm
• Hàm chính
table1(~var1 + var2 + var3 | group)
library(table1)
table1(~age + height + weight + waist + diabetes | gender, data=db)
• Ví dụ
Phân tích mô tả
– histogram, boxplot, scatterplot
• Biểu đồ
– 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
• Chỉ số thống kê
– 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
• So sánh giữa >2 nhóm
Phân tích mô tả: R packages
– hist, boxplot, plot, pairs.panels
• Biểu đồ
– biến liên tục: Desc, table1
– biến phân nhóm: Desc, table1
• Chỉ số thống kê
– biến liên tục: Desc, t.test
– biến phân nhóm: Desc
• So sánh giữa >2 nhóm