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