8
Phân tích s liu bng biu đ Yu t th giác rt quan trng. Ngi Trung Quc có câu “mt biu đ có giá tr
bng c vn ch vit”. Qu tht, biu đ tt có kh nng gây n tng cho ngi đc báo
khoa hc rt ln, và thng có giá tr đi din cho c công trình nghiên cu. Vì th biu
đ là mt phng tin hu hiu nht đ nhn mnh thông đip ca bài báo. Biu đ
thng đc s dng đ th hin xu hng và kt qu cho tng nhóm, nhng cng có th
dùng đ trình bày d kin mt cách gn gàng. Các biu đ d hiu, ni dung phong phú
là nhng phng tin vô giá. Do đó, nhà nghiên cu cn phi suy ngh mt cách sáng to
cách th hin s liu quan trng bng biu đ. Vì th, phân tích biu đ đóng mt vai trò
cc kì quan trng trong phân tích thng kê. Có th nói, không có đ th là phân tích
thng kê không có ngha.
Trong ngôn ng R có rt nhiu cách đ thit k mt biu đ gn và đp. Phn ln
nhng hàm đ thit k biu đ có sn trong R, nhng mt s loi biu đ tinh vi và phc
tp khác có th thit k bng các package chuyên dng nh lattice hay trellis có
th ti t website ca R. Trong chng này tôi s ch cách v các biu đ thông dng
bng cách s dng các hàm ph bin trong R. 8.1 Môi trng và thit k biu đ
8.1.1 Nhiu biu đ cho mt ca s (windows)
Thông thng, R v mt biu đ cho mt ca s. Nhng chúng ta có th v nhiu
biu đ trong mt ca s bng cách s dng hàm par. Chng hn nh
par(mfrow=c(1,2))có hiu nng chia ca s ra thành 1 dòng và hai ct, tc là
chúng ta có th trình bày hai biu đ k cnh bên nhau. Còn par(mfrow=c(2,3))
chia ca s ra thành 2 dòng và 3 ct, tc chúng ta có th trình bày 6 biu đ trong m ca
Biu đ 1. Cách chia ca s thành 2 dòng và 2 ct
và trình bày 4 biu đ trong cùng mt ca s. 8.1.2 t tên cho trc tung và trc hoành
Biu đ thng có trc tung (y-axis) và trc hoành. Vì d liu thng đc gi
bng các ch vit tt, cho nên biu đ cn phi có tên cho tng bin đ d theo dõi.
Trong ví d sau đây, biu đ bên trái không có tên mà ch dùng tên ca bin gc (tc x và
y), còn bên phi có tên d hiu hn.
> par(mfrow=c(1,2))
> N <- 200
> x <- runif(N, -4, 4)
> y <- sin(x) + 0.5*rnorm(N)
> plot(x,y)
> plot(x, y, xlab=”X factor”,
ylab=”Production”,
main=”Production and x factor \n Second line of title here”)
> par(mfrow=c(1,1))
Trong các lnh trên, xlab (vit tt t x label)và ylab (vit tt t y label) dùng đ đt
tên cho trc hoành và trc tung. Còn main đc dùng đ đt tên cho biu đ. Chú ý
rng trong main có kí hiu \n dùng đ vit dòng th hai (nu tên gi biu đ quá dài). -4 -2 0 2 4
-2 -1 0 1 2
x
y
chnh và cho các s liu này. Tuy nhiên, chúng ta cng có th kim soát biu đ bng
cách s dng xlim và ylim đ cho R bit c th gii hn ca hai trc này:
> plot(x, y, xlab=”X factor”,
ylab=”Production”,
main=”Plot of production and x factor”,
xlim=c(-5, 5),
ylim=c(-3, 3)) 8.1.4 Th loi và đng biu din
Trong mt dãy biu đ, chúng ta có th yêu cu R v nhiu kiu và đng biu
din khác nhau.
> par(mfrow=c(2,2))
> plot(y, type="l"); title("lines")
> plot(y, type="b"); title("both")
> plot(y, type="o"); title("overstruck")
> plot(y, type="h"); title("high density")
0 50 100 150 200
-2 -1 0 1 2
Index
y
lines
0 50 100 150 200
-2 -1 0 1 2
Index
y
Index
y
Production data
lty=2
0 50 100 150 200
-2 -1 0 1 2
Index
y
Production data
lt
y
=3
0 50 100 150 200
-2 -1 0 1 2
Index
y
Production data
lt
y
=4
Biu đ 4. nh hng ca lty. 8.1.5 Màu sc, khung, và kí hiu
Chúng ta có th kim soát màu sc ca mt biu đ bng lnh col. Giá tr mc
đnh ca col là 1. Tuy nhiên, chúng ta có th thay đi các màu theo ý mun hoc bng
cách cho s hoc bng cách vit ra tên màu nh “red”, “blue”, “green”,
“orange”, “yellow”, “cyan”, v.v…
Hình dng ca biu đ cng có th thay đi bng type nh sau:
> op <- par(mfrow=c(3,2))
> plot(runif(5), type = 'p',
main = "plot type 'p' (points)")
> plot(runif(5), type = 'l',
main = "plot type 'l' (lines)")
> plot(runif(5), type = 'b',
main = "plot type 'b' (both points and lines)")
> plot(runif(5), type = 's',
main = "plot type 's' (stair steps)")
> plot(runif(5), type = 'h',
main = "plot type 'h' (histogram)")
> plot(runif(5), type = 'n',
main = "plot type 'n' (no plot)")
> par(op)
12345
0.3 0.5 0.7 0.9
plot type 'p' (points)
Index
runif(5)
12345
0.3 0.5 0.7 0.9
plot type 'l' (lines)
Index
runif(5)
12345
0.2 0.4 0.6 0.8
plot type 'b' (both points and lines)
V hp 2 cnh chung quanh biu đ theo hình s 7
Cách hay nht đ bn đc làm quen vi các cách v biu đ này là bng cách th trên R
đ bit rõ hn.
Kí hiu ca mt biu đ cng có th thay th bng cách cung cp s cho pch (plotting
character) trong R. Các kí hiu thông dng là:
Available symbols
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25> plot(x, y, col=”red”, pch=16, bty=”l”)
-4 -2 0 2 4
-2 -1 0 1 2
x
y
Biu đ 4. nh hng ca pch=16 và col=”red”,
bty=”l”. 8.1.6 Ghi chú (legend)
Hàm legend rt có ích cho vic ghi chú mt biu đ và giúp ngi đc hiu
đc ý ngha ca biu đ tt hn. Cách s dng legend có th minh jo bng ví d sau
đây:
Phn ln các biu đ không cung cp phng tin đ vit ch hay ghi chú trong
biu đ, hay có cung cp nhng rt hn ch. Trong R có hàn mtext() cho phép
chúng ta đt ch vit hay gii thích bên cnh hay trong biu đ.
Bt đu t phía di ca biu đ (side=1), chúng ta chuyn theo hng kim
đng h đn cnh s 4. Lnh plot trong ví d sau đây không in tên ca trc và tên ca
biu đ, nhng ch cung cp mt cái khung. Trong ví d này, chúng ta s dng cex
(character expansion) đ kim soát kích thc ca ch vit. Theo mc đnh thì cex=1,
nhng vi cex=2, ch vit s có kích thc gp hai ln kích thc mc đnh. Lnh
text() cho phép chúng ta đt ch vit vào mt v trí c th. Lnh th nht đt ch
vit trong ngoc kép và trung tâm ti x=15, y=4.3. Qua s dng adj, chúng ta còn
có th sp xp v phía trái (adj=0) sao cho ta đ là đim xut phát ca ch vit.
> plot(y, xlab=" ", ylab=" ", type="n")
> mtext("Text on side 1, cex=1", side=1,cex=1)
> mtext("Text on side 2, cex=1.2", side=2,cex=1.2)
> mtext("Text on side 3, cex=1.5", side=3,cex=1.5)
> mtext("Text on side 4, cex=2", side=4,cex=2)
> text(15, 4.3, "text(15, 4.3)")
> text(35, 3.5, adj=0, "text(35, 3.5), left aligned")
> text(40, 5, adj=1, "text(40, 5), right aligned")
0 50 100 150 200
-4 -2 0 2 4Text on side 1, cex=1
Text on side 2, cex=1.2
Text on side 3, cex=1.5
Text on side 4, cex=2
text(15, 4.3)
> arrows(-1, 1.0, 1.5, 1.5)
> text(0, 1, "Trung tam", cex=0.7)
-4 -2 0 2 4
-4 -2 0 2 4
Scatter plot of y and x
x
y
Trung tam8.2 S liu cho phân tích biu đ
Sau khi đã bit qua môi trng và nhng la chn đ thit k mt biu đ, bây
gi chúng ta có th s dng mt s hàm thông dng đ v các biu đ cho s liu. Theo
tôi, biu đ có th chia thành 2 loi chính: biu đ dùng đ mô t mt bin s và biu đ
v mi liên h gia hai hay nhiu bin s. Tt nhiên, bin s có th là liên tc hay không
liên tc, cho nên, trong thc t, chúng ta có 4 loi biu đ. Trong phn sau đây, tôi s
đim qua các loi biu đ, t đn gin đn phc tp.
Có l cách tt nht đ tìm hiu cách v đ th bng R là bng mt d liu thc t.
Tôi s quay li ví d 2 trong chng trc. Trong ví d đó, chúng ta có d liu gm 8
ct (hay bin s): id, sex, age, bmi, hdl, ldl, tc, và tg. (Chú ý, id
là mã s ca 50 đi tng nghiên cu; sex là gii tính (nam hay n); age là đ tui;
bmi là t s trng lng; hdl là high density cholesterol; ldl là low density
cholesterol; tc là tng s - total – cholesterol; và tg triglycerides). D liu đc cha
trong directory directory c:\works\insulin di tên chol.txt. Trc khi v đ
th, chúng ta bt đu bng cách nhp d liu này vào R.
> setwd(“c:/works/stats”)
3.1, 3.0, 1.7, 2.0, 2.1, 4.0, 4.1, 4.0, 4.2, 4.2,
4.4, 4.3, 2.3, 6.0, 3.0, 3.0, 2.6, 4.4, 4.3, 4.0,
3.0, 4.1, 4.4, 2.8, 3.0, 2.0, 1.0, 4.0, 4.6, 4.0)
tc <-c (4.0, 3.5, 4.7, 7.7, 5.0, 4.2, 5.9, 6.1, 5.9, 4.0,
6.2, 4.1, 3.0, 4.0, 6.9, 5.7, 5.7, 5.3, 7.1, 3.8,
4.3, 4.8, 4.0, 3.0, 3.1, 5.3, 5.3, 5.4, 4.5, 5.9,
5.6, 8.3, 5.8, 7.6, 5.8, 3.1, 5.4, 6.3, 8.2, 6.2,
6.2, 6.7, 6.3, 6.0, 4.0, 3.7, 6.1, 6.7, 8.1, 6.2)
tg <- c(1.1, 2.1, 0.8, 1.1, 2.1, 1.5, 2.6, 1.5, 5.4, 1.9,
1.7, 1.0, 1.6, 1.1, 1.5, 1.0, 2.7, 3.9, 3.0, 3.1,
2.2, 2.7, 1.1, 0.7, 1.0, 1.7, 2.9, 2.5, 6.2, 1.3,
3.3, 3.0, 1.0, 1.4, 2.5, 0.7, 2.4, 2.4, 1.4, 2.7,
2.4, 3.3, 2.0, 2.6, 1.8, 1.2, 1.9, 3.3, 4.0, 2.5)
cong <- data.frame(sex, age, bmi, hdl, ldl, tc, tg)
Sau khi đã có s liu, chúng ta sn sàng tin hành phân tích s liu bng biu đ nh sau:
8.3 Biu đ cho mt bin s ri rc (discrete variable):
barplot
Bin sex trong d liu trên có hai giá tr (nam và nu), tc là mt bin không liên
tc. Chúng ta mun bit tn s ca gii tính (bao nhiêu nam và bao nhiêu n) và v mt
biu đ đn gin. thc hin ý đnh này, trc ht, chúng ta cn dùng hàm table đ
bit tn s:
> sex.freq <- table(sex)
> sex.freq
> barplot(sex.freq,
horiz = TRUE,
col = rainbow(length(sex.freq)),
main=”Frequency of males and females”)
8.4 Biu đ cho hai bin s ri rc (discrete variable):
barplot
Age là mt bin s liên tc. Chúng ta có th chia bnh nhân thành nhiu nhóm
da vào đ tui. Hàm cut có chc nng “ct” mt bin liên tc thành nhiu nhóm ri
rc. Chng hn nh:
> ageg <- cut(age, 3)
> table(ageg)
ageg
(42,54.7] (54.7,67.3] (67.3,80]
19 24 7
Có hiu qu chia bin age thành 3 nhóm. Tn s ca ba nhóm này là: 42 tui đn 54.7
tui thành nhóm 1, 54.7 đn 67.3 thành nhóm 2, và 67.3 đn 80 tui thành nhóm 3.
Nhóm 1 có 19 bnh nhân, nhóm 2 và 3 có 24 và 7 bnh nhân.
Bây gi chúng ta mun bit có bao nhiêu bnh nhân trong tng đ tui và tng gii tính
bng lnh table:
> age.sex <- table(sex, ageg)
> age.sex
ageg
sex (42,54.7] (54.7,67.3] (67.3,80]
Nam 10 10 2
Tn s mt bin ri rc cng có th th hin bng biu đ hình tròn. Ví d sau đây v
biu đ tn s ca đ tui. Biu đ 8a là 3 nhóm đ tui, và Biu đ 8b là biu đ tn s
cho 5 nhóm tui:
> pie(table(ageg))
pie(table(cut(age,5)))
(42,54.7]
(54.7,67.3]
(67.3,80]
(42,49.6]
(49.6,57.2]
(57.2,64.8]
(64.8,72.4]
(72.4,80]
Biu đ 8a. Tn s cho 3 nhóm tui Biu đ 8b. Tn s cho 5 nhóm tui 8.6 Biu đ cho mt bin s liên tc: stripchart và hist
8.6.1 Stripchart
Biu đ strip cho chúng ta thy tính liên tc ca mt bin s. Chng hn nh
chúng ta mun tìm hiu tính liên tc ca triglyceride (tg), hàm stripchart() s giúp
trong mc tiêu này:
> stripchart(tg,
main=”Strip chart for triglycerides”, xlab=”mg/L”)
123456
Chng hn nh tui 40 đn 45 có 6 bnh nhân,
t 70 đn 80 tui có 4 bnh nhân.
Biu đ 9b. Thêm tên biu đ và tên ca trc
trung và trc hoành bng xlab và ylab. Chúng ta cng có th bin đi biu đ thành mt đ th phân phi xác sut bng hàm
plot(density) nh sau (kt qu trong Biu đ 10a):
> plot(density(age),add=TRUE)
30 40 50 60 70 80 90
0.00 0.01 0.02 0.03 0.04
density.default(x = age)
N = 50 Bandwidth = 3.806
Density
Histogram of age
age
Density
40 50 60 70 80
0.00 0.01 0.02 0.03 0.04
Biu đ 10a. Xác sut phân phi mt đ cho
bin age (đ tui).
Biu đ 10b. Xác sut phân phi mt đ cho
bin age (đ tui) vi nhiu interquartile.
Chúng ta có th v hai đ th chng lên bng cách dùng hàm interquartile nh sau (kt
qu xem Biu đ 10b):
> iqr <- diff(summary(age)[c(2,5)])
(1:n)/n
-2 -1 0 1 2
50 60 70 80
Normal Q-Q Plot
Theoreti cal Quantiles
Sample Quantiles
Biu đ 11. Xác sut phân phi mt đ cho
bin age (đ tui).
Biu đ 12. Kim tra bin age có theo lut
phân phi chun hay không. Trong đ th trên, trc tung là xác sut tích ly và trc hoành là đ tui t thp đn cao.
Chng hn nh nhìn qua biu đ, chúng ta có th thy khong 50% đi tng có tui thp
hn 60.
bit xem phân phi ca age có theo lut phân phi chun (normal distribution) hay
không chúng ta có th s dng hàm qqnorm.
> qqnorm(age)
Trc hoành ca biu đ trên là đnh lng theo lut phân phi chun (theoretical
quantile) và trc hoành đnh lng ca s liu (sample quantiles). Nu phân phi ca
age theo lut phân phi chun, thì đng biu din phi theo mt đng thng chéo 45
đ (tc là đnh lng phân phi và đnh lng s liu bng nhau). Nhng qua Biu đ
12, chúng ta thy phân phi ca age không hn theo lut phân phi chun. 8.6.3 Biu đ hp (boxplot)
mg/ L
Nam Nu
345678
Box plot of total cholesterol
mg/L
Biu đ 14a. Trong biu đ này, chúng ta
thy trung v ca total cholesterol n gii
thp hn nam gii, nhng đ dao đng gia
hai nhóm không khác nhau bao nhiêu.
Biu đ 14b. Total cholesterol cho tng
gii tính, vi màu sc và hình hp nm
ngang. 8.6.4 Biu đ thanh (bar chart)
v biu đ thanh ca bin s bmi, chúng ta ch đn gin lnh:
> barplot(bmi, col=”blue”)
kg/m^2
0 5 10 15 20 25
Biu đ 15. Biu đ thanh cho bin bmi. 8.6.5 Biu đ đim (dotchart)
Mt đ th khác cung cp thông tin ging nh barplot là dotchart:
chúng ta phi dùng đn hàm ifelse. Trong lnh sau đây, nu sex==”Nam” thì v kí
t s 16 (ô tròn), nu không nam thì v kí t s 22 (tc ô vuông):
> plot(hdl, tc, pch=ifelse(sex=="Nam", 16, 22))
Kt qu là Biu đ 18a. Chúng ta cng có th thay kí t thành “M” (nam) và “F”
n(xem Biu đ 18b):
> plot(hdl, tc, pch=ifelse(sex=="Nam", “M”, “F”))
345678
2468
tc
hdl
M
F
F
M
M
F
M
M
M
F
F
M
F
M
M
FF
F
2468
345678
hdl
tc
Biu đ 18a. Mi liên h gia tc và hdl theo
tng gii tính đc th hin bng hai kí hiu
du.
Biu đ 18a. Mi liên h gia tc và hdl theo
tng gii tính đc th hin bng hai kí t. Chúng ta cng có th v mt đng biu din hi qui tuyn tính (regression line) qua các
đim trên bng cách tip tc ra các lnh sau đây:
> plot(hdl ~ tc, pch=16, main="Total cholesterol and HDL cholesterol",
xlab="Total cholesterol", ylab="HDL cholesterol", bty=”l”)
> reg <- lm(hdl ~ tc)
> abline(reg)
Kt qu là Biu đ 19a di đây. Chúng ta cng có th dùng hàm trn (smooth function)
đ biu din mi liên h gia hai bin s. th sau đây s dng lowess (mt hàm
thông thng nht) trong vic “làm trn” s liu tc và hdl (Biu đ 19b).
> plot(hdl ~ tc, pch=16,
main="Total cholesterol and HDL cholesterol with LOEWSS smooth
function",
xlab="Total cholesterol", ylab="HDL cholesterol", bty=”l”)
> lines(lowess(hdl, tc, f=2/3, iter=3), col="red")