Thứ Sáu, 23 tháng 3, 2018

Tính Toán Xác Suất Bằng Cách Sử Dụng R(phần 2)

2. Biểu đồ
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.

2.1 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ế. 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)

2.2 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:
> barplot(table(sex), main=”Frequency of males and females”)
upload_2018-3-15_8-55-4.png 

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
> barplot(sex.freq,
horiz = TRUE,
col = rainbow(length(sex.freq)),
main=”Frequency of males and females”)

2.3 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:

upload_2018-3-15_8-58-57.png 

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

upload_2018-3-15_8-59-45.png 

2.4 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 đồ 10a là 3 nhóm độ tuổi, và Biểu đồ 10b là biểu đồ tần số cho 5 nhóm tuổi:

> pie(table(ageg))
Ví dụ pie(table(cut(age,5)))

upload_2018-3-15_9-1-23.png 

2.5 Biểu đồ cho một biến số liên tục: stripchart và hist
2.5.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”)

2.5.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")

upload_2018-3-15_9-4-17.png 

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
> plot(density(age),add=TRUE)
upload_2018-3-15_9-5-11.png 

2.6 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:

upload_2018-3-15_9-6-24.png 

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

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:
> boxplot(tc~sex, horizontal=TRUE, main="Box plot of total cholesterol", ylab="mg/L", col = "pink")

upload_2018-3-15_9-12-12.png 

2.7 Phân tích biểu đồ cho hai biến liên tục
2.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)

upload_2018-3-15_9-15-23.png 

Chúng ta mu 8 ố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))
> plot(hdl, tc, pch=ifelse(sex=="Nam", “M”, “F”))
Previous Post
Next Post

post written by:

0 nhận xét: