Tải bản đầy đủ (.pdf) (41 trang)

sử dụng biểu đồ phân tích

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (793.7 KB, 41 trang )

8
Phân tích s liu bng biu đ


Yu t th giác rt quan trng. Ngi Trung Quc có câu “mt biu đ có giá tr
bng c vn ch vit”. Qu tht, biu đ tt có kh nng gây n tng cho ngi đc báo
khoa hc rt ln, và thng có giá tr đi din cho c công trình nghiên cu. Vì th biu
đ là mt phng tin hu hiu nht đ nhn mnh thông đip ca bài báo. Biu đ
thng đc s dng đ th hin xu hng và kt qu cho tng nhóm, nhng cng có th
dùng đ trình bày d kin mt cách gn gàng. Các biu đ d hiu, ni dung phong phú
là nhng phng tin vô giá. Do đó, nhà nghiên cu cn phi suy ngh mt cách sáng to
cách th hin s liu quan trng bng biu đ. Vì th, phân tích biu đ đóng mt vai trò
cc kì quan trng trong phân tích thng kê. Có th nói, không có đ th là phân tích
thng kê không có ngha.

Trong ngôn ng R có rt nhiu cách đ thit k mt biu đ gn và đp. Phn ln
nhng hàm đ thit k biu đ có sn trong R, nhng mt s loi biu đ tinh vi và phc
tp khác có th thit k bng các package chuyên dng nh lattice hay trellis có
th ti t website ca R. Trong chng này tôi s ch cách v các biu đ thông dng
bng cách s dng các hàm ph bin trong R.


8.1 Môi trng và thit k biu đ

8.1.1 Nhiu biu đ cho mt ca s (windows)

Thông thng, R v mt biu đ cho mt ca s. Nhng chúng ta có th v nhiu
biu đ trong mt ca s bng cách s dng hàm par. Chng hn nh
par(mfrow=c(1,2))có hiu nng chia ca s ra thành 1 dòng và hai ct, tc là
chúng ta có th trình bày hai biu đ k cnh bên nhau. Còn par(mfrow=c(2,3))
chia ca s ra thành 2 dòng và 3 ct, tc chúng ta có th trình bày 6 biu đ trong m ca


s. Sau khi đã v xong, chúng ta có th quay v vi “ch đ” 1 ca s bng lnh
par(mfrow=c(1,1).

Ví d sau đây to ra mt d liu gm hai bin x và y bng phng pháp mô phng
(tc s liu hoàn toàn đc to ra bng R). Sau đó, chúng ta chia ca s thành 2 dòng và
2 ct, và trình bày bn loi biu đ t d liu đc mô phng:

> par(mfrow=c(2,2))
> N <- 200
> x <- runif(N, -4, 4)
> y <- sin(x) + 0.5*rnorm(N)
> plot(x,y, main=”Scatter plot of y and x”)
> hist(x, main=”Histogram of x”)
> boxplot(y, main=”Box plot of y”)
> barplot(x, main=”Bar chart of x”)
> par(mfrow=c(1,1))

-4 -2 0 2 4
-2 -1 0 1 2
Scatter plot of y and x
x
y
Histogram of x
x
Frequency
-4 -2 0 2 4
0 5 10 15 20 25 30
-2 -1 0 1 2
Box plot of y Bar chart of x
-2 0 2

Biu đ 1. Cách chia ca s thành 2 dòng và 2 ct
và trình bày 4 biu đ trong cùng mt ca s.


8.1.2 t tên cho trc tung và trc hoành

Biu đ thng có trc tung (y-axis) và trc hoành. Vì d liu thng đc gi
bng các ch vit tt, cho nên biu đ cn phi có tên cho tng bin đ d theo dõi.
Trong ví d sau đây, biu đ bên trái không có tên mà ch dùng tên ca bin gc (tc x và
y), còn bên phi có tên d hiu hn.

> 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 lnh trên, xlab (vit tt t x label)và ylab (vit tt t y label) dùng đ đt
tên cho trc hoành và trc tung. Còn main đc dùng đ đt tên cho biu đ. Chú ý
rng trong main có kí hiu \n dùng đ vit dòng th hai (nu tên gi biu đ quá dài).


-4 -2 0 2 4
-2 -1 0 1 2
x
y

-4 -2 0 2 4
-2 -1 0 1 2
Production and x factor
Second line of title here
X factor
Production
Biu đ 2. Biu đ bên trái không có tên gi, biu
đ bên phi có tên gi cho trc tung, trc hoành và
tên ca biu đ.

Ngoài ra, chúng ta còn có th s dng hàm title và sub đ đt tên:

> plot(x, y, xlab=”Time”,
ylab=”Production”)
> title(main=“Plot of production and x factor”,
sub=”Figure 1”)

-4 -2 0 2 4
-2 -1 0 1 2
X factor
Production
Plot of production and x factor
Fi
g
ure 1


8.1.3 Cho gii hn ca trc tung và trc hoành

Nu không cung cp gii hn ca trc tung và trc hoành, R s t đng tìm điu

chnh và cho các s liu này. Tuy nhiên, chúng ta cng có th kim soát biu đ bng
cách s dng xlim và ylim đ cho R bit c th gii hn ca hai trc 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 loi và đng biu din

Trong mt dãy biu đ, chúng ta có th yêu cu R v nhiu kiu và đng biu
din 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

both
0 50 100 150 200
-2 -1 0 1 2
Index
y
overstruck
0 50 100 150 200
-2 -1 0 1 2
Index
y
high density

Biu đ 3. Kiu biu đ và đng biu din.

Ngoài ra, chúng ta cng có th nhiu đng biu din bng lty nh sau:

> par(mfrow=c(2,2))
> plot(y, type="l", lty=1); title(main="Production data", sub="lty=1")
> plot(y, type="l", lty=2); title(main="Production data", sub="lty=2")
> plot(y, type="l", lty=3); title(main="Production data", sub="lty=3")
> plot(y, type="l", lty=4); title(main="Production data", sub="lty=4")

0 50 100 150 200
-2 -1 0 1 2
Index
y
Production data
lty=1
0 50 100 150 200
-2 -1 0 1 2

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
Biu đ 4. nh hng ca lty.


8.1.5 Màu sc, khung, và kí hiu

Chúng ta có th kim soát màu sc ca mt biu đ bng lnh col. Giá tr mc
đnh ca col là 1. Tuy nhiên, chúng ta có th thay đi các màu theo ý mun hoc bng
cách cho s hoc bng cách vit ra tên màu nh “red”, “blue”, “green”,
“orange”, “yellow”, “cyan”, v.v…


Ví d sau đây dùng mt hàm đ v ba đng biu din vi ba màu đ, xanh nc bin, và
xanh lá cây:

> plot(runif (10), ylim=c(0,1), type='l')
> for (i in c('red', 'blue', 'green'))
{
lines(runif (10), col=i )
}
> title(main="Lines in various colours")

246810
0.0 0.2 0.4 0.6 0.8 1.0
Ind e x
runif(10)
Lines in various colours

Ngoài ra, chúng ta còn có th v đng biu din bng cách tng b dày ca mi đng:

> plot(runif(5), ylim=c(0,1), type='n')
> for (i in 5:1)
{
lines( runif(5), col=i, lwd=i )
}
> title(main="Varying the line thickness")

12345
0.0 0.2 0.4 0.6 0.8 1.0
Ind ex
runif(5)
Varying the line thickness


Hình dng ca biu đ cng có th thay đi bng 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)

Index
runif(5)
12345
0.4 0.6 0.8
plot type 's' (stair steps)
Index
runif(5)
12345
0.1 0.2 0.3 0.4
plot type 'h' (histogram)
Index
runif(5)
12345
0.2 0.4 0.6
plot type 'n' (no plot)
Index
runif(5)


Khung biu đ có th kim soát bng lnh bty vi các thông s nh sau:

bty=”n”
Không có vòng khung chung quanh biu đ
bty=”o”
Có 4 khung chung quanh biu đ
bty=”c”
V mt hp gm 3 cnh chung quanh biu đ theo hình ch C
bty=”l”
V hp 2 cnh chung quanh biu đ theo hình ch L
bty=”7”

V hp 2 cnh chung quanh biu đ theo hình s 7

Cách hay nht đ bn đc làm quen vi các cách v biu đ này là bng cách th trên R
đ bit rõ hn.

Kí hiu ca mt biu đ cng có th thay th bng cách cung cp s cho pch (plotting
character) trong R. Các kí hiu thông dng 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
Biu đ 4. nh hng ca pch=16 và col=”red”,
bty=”l”.


8.1.6 Ghi chú (legend)

Hàm legend rt có ích cho vic ghi chú mt biu đ và giúp ngi đc hiu
đc ý ngha ca biu đ tt hn. Cách s dng legend có th minh jo bng ví d sau
đây:


> N <- 200
> x <- runif(N, -4, 4)
> y <- x + 0.5*rnorm(N)
> plot(x,y, pch=16, main=”Scatter plot of y and x”)
> reg <- lm(y~x)
> abline(reg)
> legend(2,-2, c("Production","Regression line"), pch=16, lty=c(0,1))


Thông s legend(2, -2) có ngha là đt phn ghi chú vào trc hoành (x-axis) bng 2
và trc tung (y-axis) bng -2.


-4 -2 0 2 4
-4 -2 0 2 4
Scatter plot of y and x
x
y
*

Production
Regression line
Production
Regression line
Biu đ 5. nh hng ca legend


8.1.7 Vit ch trong biu đ


Phn ln các biu đ không cung cp phng tin đ vit ch hay ghi chú trong
biu đ, hay có cung cp nhng rt hn ch. Trong R có hàn mtext() cho phép
chúng ta đt ch vit hay gii thích bên cnh hay trong biu đ.

Bt đu t phía di ca biu đ (side=1), chúng ta chuyn theo hng kim
đng h đn cnh s 4. Lnh plot trong ví d sau đây không in tên ca trc và tên ca
biu đ, nhng ch cung cp mt cái khung. Trong ví d này, chúng ta s dng cex
(character expansion) đ kim soát kích thc ca ch vit. Theo mc đnh thì cex=1,
nhng vi cex=2, ch vit s có kích thc gp hai ln kích thc mc đnh. Lnh
text() cho phép chúng ta đt ch vit vào mt v trí c th. Lnh th nht đt ch
vit trong ngoc kép và trung tâm ti x=15, y=4.3. Qua s dng adj, chúng ta còn
có th sp xp v phía trái (adj=0) sao cho ta đ là đim xut phát ca ch vit.

> 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 4


Text 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)

text(35, 3.5), left aligned
4
0, 5), right aligned

8.1.8 t kí hiu vào biu đ. abline() có th s dng đ v mt đng thng,
vi nhng thông s nh sau:

abline(a,b): đng hi qui tuyn tính a=intercept và b=slope.
abline(h=30) v mt đng ngang ti y=30.
abline(v=12) v mt đng thng đng ti đim x=12.

Ngoài ra, chúng ta còn có th cho vào biu đ mt mi tên đ ghi chú mt đim s liu
nào đó.

> N <- 200
> x <- runif(N, -4, 4)
> y <- x + 0.5*rnorm(N)
> plot(x,y, pch=16, main=”Scatter plot of y and x”)

-4 -2 0 2 4
-4 -2 0 2 4
Scatter plot of y and x
x
y

Gi s chúng ta mun ghi chú ngay ti x=0 và y=0 là đim trung tâm, chúng ta trc ht
dùng arrows đ v mi tên. Trong lnh sau đây, arrows(-1, 1, 1.5, 1.5) có
ngha nh sau ta đ x=-1, y=1 bt đu v mi tên và chm dt ti ta đ x=1.5, y=1.5.
Phn text(0, 1) yêu cu R vit ch ti ta đ x=0, y=1.


> 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 tam


8.2 S liu cho phân tích biu đ

Sau khi đã bit qua môi trng và nhng la chn đ thit k mt biu đ, bây
gi chúng ta có th s dng mt s hàm thông dng đ v các biu đ cho s liu. Theo
tôi, biu đ có th chia thành 2 loi chính: biu đ dùng đ mô t mt bin s và biu đ
v mi liên h gia hai hay nhiu bin s. Tt nhiên, bin s có th là liên tc hay không
liên tc, cho nên, trong thc t, chúng ta có 4 loi biu đ. Trong phn sau đây, tôi s
đim qua các loi biu đ, t đn gin đn phc tp.

Có l cách tt nht đ tìm hiu cách v đ th bng R là bng mt d liu thc t.
Tôi s quay li ví d 2 trong chng trc. Trong ví d đó, chúng ta có d liu gm 8
ct (hay bin s): id, sex, age, bmi, hdl, ldl, tc, và tg. (Chú ý, id
là mã s ca 50 đi tng nghiên cu; sex là gii tính (nam hay n); age là đ tui;
bmi là t s trng lng; hdl là high density cholesterol; ldl là low density
cholesterol; tc là tng s - total – cholesterol; và tg triglycerides). D liu đc cha
trong directory directory c:\works\insulin di tên chol.txt. Trc khi v đ
th, chúng ta bt đu bng cách nhp d liu này vào R.

> setwd(“c:/works/stats”)

> cong <- read.table(“chol.txt”, header=TRUE, na.strings=”.”)
> attach(cong)

Hay đ tin vic theo dõi tôi s nhp các d liu đó bng các lnh sau đây:

sex <- c(“Nam”, “Nu”, “Nu”,“Nam”,“Nam”, “Nu”,“Nam”,“Nam”,“Nam”, “Nu”,
“Nu”,“Nam”, “Nu”,“Nam”,“Nam”, “Nu”, “Nu”, “Nu”, “Nu”, “Nu”,
“Nu”, “Nu”, “Nu”, “Nu”,“Nam”,“Nam”, “Nu”,“Nam”, “Nu”, “Nu”,
“Nu”,“Nam”,“Nam”, “Nu”, “Nu”,“Nam”, “Nu”,“Nam”, “Nu”, “Nu”,
“Nam”, “Nu”,“Nam”,“Nam”,“Nam”, “Nu”,“Nam”,“Nam”, “Nu”, “Nu”)

age <- c(57, 64, 60, 65, 47, 65, 76, 61, 59, 57,
63, 51, 60, 42, 64, 49, 44, 45, 80, 48,
61, 45, 70, 51, 63, 54, 57, 70, 47, 60,
60, 50, 60, 55, 74, 48, 46, 49, 69, 72,
51, 58, 60, 45, 63, 52, 64, 45, 64, 62)

bmi <- c( 17, 18, 18, 18, 18, 18, 19, 19, 19, 19, 20, 20, 20, 20, 20,
20, 21, 21, 21, 21, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22,
22, 22, 22, 22, 23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24,
24, 24, 24, 25, 25)

hdl <- c(5.000,4.380,3.360,5.920,6.250,4.150,0.737,7.170,6.942,5.000,
4.217,4.823,3.750,1.904,6.900,0.633,5.530,6.625,5.960,3.800,
5.375,3.360,5.000,2.608,4.130,5.000,6.235,3.600,5.625,5.360,
6.580,7.545,6.440,6.170,5.270,3.220,5.400,6.300,9.110,7.750,
6.200,7.050,6.300,5.450,5.000,3.360,7.170,7.880,7.360,7.750)

ldl <- c(2.0, 3.0, 3.0, 4.0, 2.1, 3.0, 3.0, 3.0, 3.0, 2.0,
5.0, 1.3, 1.2, 0.7, 4.0, 4.1, 4.3, 4.0, 4.3, 4.0,

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 liu, chúng ta sn sàng tin hành phân tích s liu bng biu đ nh sau:

8.3 Biu đ cho mt bin s ri rc (discrete variable):
barplot

Bin sex trong d liu trên có hai giá tr (nam và nu), tc là mt bin không liên
tc. Chúng ta mun bit tn s ca gii tính (bao nhiêu nam và bao nhiêu n) và v mt
biu đ đn gin.  thc hin ý đnh này, trc ht, chúng ta cn dùng hàm table đ
bit tn s:

> sex.freq <- table(sex)
> sex.freq

sex
Nam Nu
22 28

Có 22 nam và 28 na trong nghiên cu. Sau đó dùng hàm barplot đ th hin tn s
này nh sau:

> barplot(sex.freq, main=”Frequency of males and females”)

Biu trên cng có th có đc bng mt lnh đn gin hn (Biu đ 8a):

> barplot(table(sex), main=”Frequency of males and females”)


Nam Nu
Frequency of males and females
0 5 10 15 20 25

Nam Nu
Frequency of males and females
0 5 10 15 20 25

Biu đ 8a. Tn s gii tính th hin bng
ct s.
Biu đ 8b. Tn s gii tính th hin bng
dòng s.

Thay vì th hin tn s nam và n bng 2 ct, chúng ta có th th hin bng hai dòng
bng thông s horiz = TRUE, nh sau (xem kt qu trong Biu đ 6b):


> barplot(sex.freq,
horiz = TRUE,
col = rainbow(length(sex.freq)),
main=”Frequency of males and females”)

8.4 Biu đ cho hai bin s ri rc (discrete variable):
barplot

Age là mt bin s liên tc. Chúng ta có th chia bnh nhân thành nhiu nhóm
da vào đ tui. Hàm cut có chc nng “ct” mt bin liên tc thành nhiu nhóm ri
rc. Chng hn nh:

> ageg <- cut(age, 3)
> table(ageg)
ageg
(42,54.7] (54.7,67.3] (67.3,80]
19 24 7

Có hiu qu chia bin age thành 3 nhóm. Tn s ca ba nhóm này là: 42 tui đn 54.7
tui thành nhóm 1, 54.7 đn 67.3 thành nhóm 2, và 67.3 đn 80 tui thành nhóm 3.
Nhóm 1 có 19 bnh nhân, nhóm 2 và 3 có 24 và 7 bnh nhân.

Bây gi chúng ta mun bit có bao nhiêu bnh nhân trong tng đ tui và tng gii tính
bng lnh table:

> age.sex <- table(sex, ageg)
> age.sex
ageg
sex (42,54.7] (54.7,67.3] (67.3,80]
Nam 10 10 2

Nu 9 14 5

Kt qu trên cho thy chúng ta có 10 bnh nhân nam và 9 n trong nhóm tui th nht,
10 nam và 14 na trong nhóm tui th hai, v.v…  th hin tn s ca hai bin này,
chúng ta vn dùng barplot:

> barplot(age.sex, main=”Number of males and females in each age
group”)


(42,54.7] (54.7,67.3] (67.3,80]
Number of males and females in each age group
0 5 10 15 20
(42,54.7] (54.7,67.3] (67.3,80]
Age group
0 2 4 6 8 101214
Biu đ 7a. Tn s gii tính và nhóm tui
th hin bng ct s.
Biu đ 7b. Tn s gii tính và nhóm tui
th hin bng hai dòng s.

Trong Biu đ 7a, mi ct là cho mt đ tui, và phn đm ca ct là n, và phn màu
nht là tn s ca nam gii. Thay vì th hin tn s nam n trong mt ct, chúng ta cng
có th th hin bng 2 ct vi beside=T nh sau (Biu đ 7b):

barplot(age.sex, beside=TRUE, xlab="Age group")


8.5 Biu đ hình tròn


Tn s mt bin ri rc cng có th th hin bng biu đ hình tròn. Ví d sau đây v
biu đ tn s ca đ tui. Biu đ 8a là 3 nhóm đ tui, và Biu đ 8b là biu đ tn s
cho 5 nhóm tui:

> 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]

Biu đ 8a. Tn s cho 3 nhóm tui Biu đ 8b. Tn s cho 5 nhóm tui


8.6 Biu đ cho mt bin s liên tc: stripchart và hist

8.6.1 Stripchart

Biu đ strip cho chúng ta thy tính liên tc ca mt bin s. Chng hn nh
chúng ta mun tìm hiu tính liên tc ca triglyceride (tg), hàm stripchart() s giúp
trong mc tiêu này:

> stripchart(tg,
main=”Strip chart for triglycerides”, xlab=”mg/L”)
123456

Strip chart for triglycerides
mg/L


Chúng ta thy bin s tg có s bt liên tc, nht là các đi tng có tg cao. Trong khi
phn ln đi tng có đ tg thp hn 5, thì có 2 đi tng vi tg rt cao (>5).

8.6.2 Histogram

Age là mt bin s liên tc.  v biu đ tn s ca bin s age, chúng ta ch
đn gin lnh hist(age). Nh đã đ cp trên, chúng ta có th ci tin đ th này bng
cách cho thêm ta đ chính (main) và ta đ ca trc hoành (xlab) và trc tung
(ylab):

> hist(age)
> hist(age, main="Frequency distribution by age group", xlab="Age
group", ylab="No of patients")

Histogram of age
age
Frequency
40 50 60 70 80
024681012
Frequency distribution by age group
Age group
No of patients
40 50 60 70 80
024681012
Biu đ 9a. Trc tung là s bnh nhân (đi
tng nghiên cu) và trc hoành là đ tui.

Chng hn nh tui 40 đn 45 có 6 bnh nhân,
t 70 đn 80 tui có 4 bnh nhân.
Biu đ 9b. Thêm tên biu đ và tên ca trc
trung và trc hoành bng xlab và ylab.


Chúng ta cng có th bin đi biu đ thành mt đ th phân phi xác sut bng hàm
plot(density) nh sau (kt qu trong Biu đ 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
Biu đ 10a. Xác sut phân phi mt đ cho
bin age (đ tui).
Biu đ 10b. Xác sut phân phi mt đ cho
bin age (đ tui) vi nhiu interquartile.

Chúng ta có th v hai đ th chng lên bng cách dùng hàm interquartile nh sau (kt
qu xem Biu đ 10b):

> iqr <- diff(summary(age)[c(2,5)])

> des <- density(age, width=0.5*iqr)
> hist(age, xlim=range(des$x), probability=TRUE)
> lines(des, lty=2)

Trong đ th trên, chúng ta dùng khong cách 0.5*iqr (tng đi “gn” nhau). Nhng
chúng ta có th bin đi thông s này thành 1.5*iqr đ làm cho phân phi thc t hn:
> iqr <- diff(summary(age)[c(2,5)])
> des <- density(age, width=1.5*iqr)
> hist(age, xlim=range(des$x), probability=TRUE)
> lines(des, lty=2)

Histogram of age
age
Density
30 40 50 60 70 80 90
0.00 0.01 0.02 0.03 0.04


Chúng ta có th bin đi biu đ thành mt đ th phân phi xác sut tích ly (cumulative
distribution) bng hàm plot và sort nh sau:

> n <- length(age)
> plot(sort(age), (1:n)/n, type="s", ylim=c(0,1))

Kt qu đc trình bày trong phn trái ca biu đ sau đây (Biu đ 11).


50 60 70 80
0.0 0.2 0.4 0.6 0.8 1.0
sort(age)

(1:n)/n
-2 -1 0 1 2
50 60 70 80
Normal Q-Q Plot
Theoreti cal Quantiles
Sample Quantiles
Biu đ 11. Xác sut phân phi mt đ cho
bin age (đ tui).
Biu đ 12. Kim tra bin age có theo lut
phân phi chun hay không.


Trong đ th trên, trc tung là xác sut tích ly và trc hoành là đ tui t thp đn cao.
Chng hn nh nhìn qua biu đ, chúng ta có th thy khong 50% đi tng có tui thp
hn 60.

 bit xem phân phi ca age có theo lut phân phi chun (normal distribution) hay
không chúng ta có th s dng hàm qqnorm.

> qqnorm(age)

Trc hoành ca biu đ trên là đnh lng theo lut phân phi chun (theoretical
quantile) và trc hoành đnh lng ca s liu (sample quantiles). Nu phân phi ca
age theo lut phân phi chun, thì đng biu din phi theo mt đng thng chéo 45
đ (tc là đnh lng phân phi và đnh lng s liu bng nhau). Nhng qua Biu đ
12, chúng ta thy phân phi ca age không hn theo lut phân phi chun.


8.6.3 Biu đ hp (boxplot)


 v biu đ hp ca bin s tc, chúng ta ch đn gin lnh:

> boxplot(tc, main="Box plot of total cholesterol", ylab="mg/L")

345678
Box plot of total cholesterol
mg/ L

Biu đ 13. Trong biu đ này, chúng ta thy median
(trung v) khong 5.6 mg/L, 25% total cholesterol thp
hn 4.1, và 75% thp hn 6.2. Total cholesterol thp nht
là khoang 3, và cao nht là trên 8 mg/L.


Trong biu đ sau đây, chúng ta so sánh tc gia hai nhóm nam và n:

> boxplot(tc ~ sex, main=”Box plot of total cholestrol by sex”,
ylab="mg/L")

Kt qu trình bày trong Biu đ 14a. Chúng ta có th bin đ giao din ca đ th bng
cách dùng thông s horizontal=TRUE và thay đi màu bng thông s col nh sau
(Biu đ 14b):

> boxplot(tc~sex, horizontal=TRUE, main="Box plot of total
cholesterol", ylab="mg/L", col = "pink")


Nam Nu
345678
Box plot of total cholesterol by sex

mg/ L
Nam Nu
345678
Box plot of total cholesterol
mg/L
Biu đ 14a. Trong biu đ này, chúng ta
thy trung v ca total cholesterol  n gii
thp hn nam gii, nhng đ dao đng gia
hai nhóm không khác nhau bao nhiêu.
Biu đ 14b. Total cholesterol cho tng
gii tính, vi màu sc và hình hp nm
ngang.


8.6.4 Biu đ thanh (bar chart)

 v biu đ thanh ca bin s bmi, chúng ta ch đn gin lnh:

> barplot(bmi, col=”blue”)

kg/m^2
0 5 10 15 20 25

Biu đ 15. Biu đ thanh cho bin bmi.


8.6.5 Biu đ đim (dotchart)

Mt đ th khác cung cp thông tin ging nh barplot là dotchart:


> dotchart(bmi, xlab="Body mass index (kg/m^2)", main="Distribution of
BMI")

18 20 22 24
Distribution of BMI
Body mass index (kg/m^2)
Biu đ 16. Biu đ đim bin bmi.


8.7 Phân tích biu đ cho hai bin liên tc

8.7.1 Biu đ tán x (scatter plot)

 tìm hiu mi liên h gia hai bin, chúng ta dùng biu đ tán x.  v biu đ tán x
v mi liên h gia bin s tc và hdl, chúng ta s dng hàm plot. Thông s th nht
ca hàm plot là trc hoành (x-axis) và thông s th 2 là trc tung.  tìm hiu mi liên
h gia tc và hdl chúng ta đn gin lnh:

> plot(tc, hdl)

345678
2468
tc
hdl

Biu đ 17. Mi liên h gia tc và hdl. Trong biu đ
này, chúng ta v bin s hdl trên trc tung và tc trên
trc hoành.

Chúng ta mun phân bit gii tính (nam và n) trong biu đ trên.  v biu đ đó,

chúng ta phi dùng đn hàm ifelse. Trong lnh sau đây, nu sex==”Nam” thì v kí
t s 16 (ô tròn), nu không nam thì v kí t s 22 (tc ô vuông):

> plot(hdl, tc, pch=ifelse(sex=="Nam", 16, 22))

Kt qu là Biu đ 18a. Chúng ta cng có th thay kí t thành “M” (nam) và “F”
n(xem Biu đ 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
F
F
F
F
F
F
M
MF
M
F
F
F
M
M
F
F
M
F
M
F
FM
F
M
M
M
F
M
M
F

F
2468
345678
hdl
tc
Biu đ 18a. Mi liên h gia tc và hdl theo
tng gii tính đc th hin bng hai kí hiu
du.
Biu đ 18a. Mi liên h gia tc và hdl theo
tng gii tính đc th hin bng hai kí t.


Chúng ta cng có th v mt đng biu din hi qui tuyn tính (regression line) qua các
đim trên bng cách tip tc ra các lnh 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)

Kt qu là Biu đ 19a di đây. Chúng ta cng có th dùng hàm trn (smooth function)
đ biu din mi liên h gia hai bin s.  th sau đây s dng lowess (mt hàm
thông thng nht) trong vic “làm trn” s liu tc và hdl (Biu đ 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")



×