Professional Documents
Culture Documents
2024 THKHSS Chuong 123
2024 THKHSS Chuong 123
1
THỰC HÀNH THỐNG KÊ KHOA HỌC SỰ SỐNG
2.2.5 Factor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.2.6 Array . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.2.7 Matrix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.2.8 List . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.2.9 Data.frame . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2
THỰC HÀNH THỐNG KÊ KHOA HỌC SỰ SỐNG
3
Chương 1
1.1.1 R là gì?
R là một phần mềm thống kê được sử dụng để phân tích dữ liệu và vẽ biểu đồ. Thực ra, về bản chất, R là
ngôn ngữ máy tính đa năng, có thể sử dụng cho nhiều mục tiêu khác nhau, từ tính toán đơn giản, tính toán
ma trận, đến các phân tích thống kê phức tạp.
R là một ngôn ngữ lập trình và môi trường phần mềm cho phân tích thống kê, trình bày đồ thị và viết báo
4
THỰC HÀNH THỐNG KÊ KHOA HỌC SỰ SỐNG
cáo. R được tạo ra bởi Ross Ihaka và Robert Gentleman tại Đại Học Auckland, New Zealand và hiện tại được
phát triển bởi “R Development Core Team”.
R xuất hiện lần đầu vào năm 1993. Khi đó một nhóm lớn, các cá nhân đã đóng góp vào R bằng việc gửi code
và báo cáo lỗi. Từ giữa 1997, có một nhóm trụ cột “R Development Core Team” là những người có thể chỉnh
sửa trên kho lưu trữ mã nguồn R.
Ngôn ngữ này được đặt tên R, dựa trên ký tự đầu của tên của hai tác giả (Robert Gentleman và Ross Ihaka).
1.2.1 Ưu điểm
1. R là phần mềm miễn phí. R là một dự án GNU chính thức và được phân phối dưới “Free Software
Foundation General Public License (GPL)”
2. R là một gói phân tích dữ liệu với nhiều chức năng thống kê tiên tiến. Xem the Comprehensive R Archive
Network (CRAN)’s Task Views để thấy được những gì ta có thể làm với R.
3. R được sử dụng rộng rãi trong các ngành khoa học chính trị, thống kê, kinh tế lượng, khoa học bảo hiểm,
xã hội học, tài chính, . . .
4. R là một ngôn ngữ lập trình, vì vậy các khả năng của nó có thể được mở rộng một cách dễ dàng thông
qua việc sử dụng các hàm do người dùng định nghĩa. Một tập hợp các hàm và gói lệnh được đóng góp từ
người dùng có thể được tìm thấy trên CRAN’s Contributed Packages.
5. Chạy trên mọi nền tảng máy tính – Linux, Window, Mac.
6. R là ngôn ngữ hướng đối tượng. Hầu như bất cứ điều gì (chẳng hạn các cấu trúc dữ liệu phức tạp) có thể
được lưu trữ như một đối tượng R.
8. R tạo ra những biểu đồ với chất lượng cao (chuẩn bài báo khoa học).
10. R cung cấp một bộ các phép toán để tính toán trên mảng, danh sách, vector, và ma trận.
1. Không dễ để bắt đầu các phân tích với R – cần thiết phải học các kiến thức cơ bản về cú pháp và các
lệnh cơ bản.
2. Hầu như không có giao diện đồ họa người dùng (GUI) mà chỉ có dòng lệnh.
3. Ta cần tìm kiếm các lệnh khả thi tốt nhất trong nhiều gói lệnh.
4. Mọi bảng, đồ thị phải được “lập trình” – không được tạo ra bằng cách click chuột.
5
THỰC HÀNH THỐNG KÊ KHOA HỌC SỰ SỐNG
Truy cập https://cran.r-project.org/ , trong mục “Download and Install R”, ta chọn một trong các đường dẫn
sau để cài đặt R cho các hệ điều hành khác nhau:
Nhấp vào base và chọn Download R 4.x.x Đây là giao diện của R.
6
THỰC HÀNH THỐNG KÊ KHOA HỌC SỰ SỐNG
Truy cập https://www.rstudio.com, chọn Download RStudio, sau đó chọn mục download free, cuối cùng chọn
hệ điều hành phù hợp. Tải về và cài đặt bình thường. Đây là giao diện của RStudio. Khi làm việc với R, chúng
ta nên viết và thực thi các dòng lệnh trên cửa sổ Editor (Script).
• Mở cửa sổ Editor (Script): File → New File → R Script hoặc tổ hợp phím Ctrl+Shift+N.
• Lưu file Script: File → Save → Thư mục lưu trữ → Đặt tên file.
• Mở lại file Script: File → Open Script → Thư mục lưu trữ → file cần mở.
Chú ý: Thực thi dòng lệnh bằng cách đặt con trỏ tại dòng lệnh cần thực thi (bất kỳ vị trí nào ở dòng đó) và
nhấn tổ hợp phím Ctrl+Enter.
- Lệnh help.search(“chủ đề”) có thể giúp ích khi bạn không biết tên của một hàm.
- Lệnh help.start() sẽ mở một trình duyệt chỉ đến các thông tin được lưu trên máy về R.
- Lệnh example(tên hàm): chạy minh họa các ví dụ của một hàm (nếu có).
7
THỰC HÀNH THỐNG KÊ KHOA HỌC SỰ SỐNG
• example(plot)
• example(hist)
• example(boxplot)
- Lệnh demo(): Minh họa tổng quan về các chức năng của R.
Hầu hết các hàm trong R đều thuộc các gói lệnh khác nhau. Do đó, để sử dụng được các hàm này, ta cần
phải tải và cài đặt các gói lệnh vào R.
Ví dụ 1.5.1. Giả sử ta cần xác định hàm combinations thuộc gói lệnh nào, ta làm như sau:
find(what = "combinations")
[1] "package:gtools
Chú ý 1.5.1. Trong trường hợp hai hoặc nhiều gói lệnh có hàm trùng tên nhau thì khi ta sử dụng cần chú
ý chọn đúng hàm trong gói cụ thể để R thực thi đúng. Chẳng hạn, hàm det() vừa thuộc gói base vừa
thuộc gói Matrix.
find("det")
[1] "package:Matrix""package:base"
Do đó, khi sử dụng hàm này ta có thể thực hiện như sau để tránh nhầm lẫn
# Dung ham det() thuoc goi Matrix
Matrix::det()
8
THỰC HÀNH THỐNG KÊ KHOA HỌC SỰ SỐNG
Ví dụ 1.5.2. Giả sử ta cần unload gói gtools, ta thực hiện như sau
# Cach 1
detach(name = "package:gtools")
# Cach 2
install.package("lsr")
library(lsr)
unlibrary(gtools)
1. Liệt kê các biến đang tồn tại trong phiên làm việc
Ta có thể dùng hàm objects(), hàm ls() hoặc hàm who() (thuộc package lrs).
9
THỰC HÀNH THỐNG KÊ KHOA HỌC SỰ SỐNG
2. Loại bỏ các biến đang tồn tại trong phiên làm việc
1. Working directory
Dữ liệu trong quá trình sử dụng R phải được lưu vào một khu vực trong máy tính gọi là working directory.
Để biết hiện tại R đang làm việc ở working directory nào ta dùng lệnh
getwd()
[1] "C:/Users/Administrator/Documents"
Để tạo một working directory mới riêng cho cá nhân ta thực hiện
setwd("C:/Users/Administrator/Documents/Trang")
Lưu ý: R dùng forward slash "/" chứ không phải là backward slash "\"như trong hệ thống Windows.
2. Liệt kê các thư mục, tập tin đang tồn tại trong working directory
list.files()
3. Options
Để biết các thông số hiện tại của R ta dùng lệnh
options()
Đặc biệt, ta có thể thay đổi những mặc định của các thông số đó. Chẳng hạn, trong R prompt mặc định
là ">", chúng ta có thể thay đổi bằng cách
options(prompt = "trang>")
trang>
hay muốn màn ảnh R rộng hơn (100 characters) thay vì 80 characters như mặc định thì dùng options(width
= 100)
4. Thoát khỏi R
Khi muốn thoát khỏi R ta dùng lệnh
q()
Save workspace image to /.RData? [y/n]:
Trong đó, q là viết tắt của từ quit còn y/n/c là viết tắt của từ yes/no/cancel. Nếu chọn y (hoặc n) sẽ
lưu (hoặc không lưu) toàn bộ “workspace”. Ngược lại nếu chọn c thì R sẽ hủy lệnh q().
10
Chương 2
• Loại numeric
x = 1
class ( x )
[ 1 ] " numeric "
• Loại character
y = " Hello "
class ( y )
[ 1 ] " character "
• Loại logical
z = TRUE
class ( z )
[ 1 ] " logical "
• Factor đối tượng vector với các nhóm rời rạc (có thứ tự/không thứ tự)
• Data.frame “tựa matrix” danh sách các biến với cùng số hàng.
11
THỰC HÀNH THỐNG KÊ KHOA HỌC SỰ SỐNG
• NULL đối tượng có chiều dài 0, kiểm tra với lệnh is.null(x)
• NaN Not a number, kiểm tra với lệnh is.nan(x)(e.g. 0/0, log(-1))
• Inf, -Inf Positive/negative infinity, kiểm tra với lệnh is.infinite(x)(e.g. 1/0)
• is.<mode>(x) kiểm tra kiểu của đối tượng (is.numeric, is.logical, v.v.)
• attr(x, which) nhận hoặc thiết lập thuộc tính của một đối tượng
• attributes(x) nhận hoặc thiết lập mọi thuộc tính của một đối tượng.
2.2.1 Số và biến số
• Tên biến có thể được thiết lập từ các chữ cái (in hoa hoặc in thường) kết hợp với dấu “.”, dấu “_”
và số đếm (gọi chung là các ký tự). Chẳng hạn, ta có thể đặt tên biến S.ale1_s. Tuy nhiên, không
nên đặt tên biến quá phức tạp đến thế.
12
THỰC HÀNH THỐNG KÊ KHOA HỌC SỰ SỐNG
• Trong tên biến, ở giữa các ký tự không có khoảng trắng. Ví dụ, tên biến là “my sales”, R sẽ báo lỗi.
• Tên biến không được trùng với một số từ đặc biệt trong R như: if, else, repeat, while, function,
for, in, next, break, TRUE, FALSE, NULL, Inf, NaN, NA, NA_integer_, NA_real_, NA_complex_,
NA_character_.
• Lời khuyên: ngoài những nguyên tắc mà R đã mặc định ta nên đặt tên biến sao cho
ngắn gọn, có tính gợi nhớ.
a + b # a plus b
a - b # a minus b
a * b # a multiply b
a / b # a divide b
a % / % b # Integer part of a divided b
a %% b # Remainder of a divided b
x ^ n or x * * n # x power n
a ^ x # General exponential funct of x
exp ( x ) # Exponential funct of x
sqrt ( x ) or x ^(1 / 2) # Square root of x
x ^(1 / n ) # n root of x
abs ( x ) # Absolute value of x
log (x , base = a ) or logb (x , base = a ) # Logarithm of base a of x
log (x , base = 2) or log2 ( x ) # Logarithm of base 2 of x
log (x , base = 10) or log10 ( x ) # Logarithm of base 10 of x
log (x , base = exp (1)) or log ( x ) # Logarithm of base e of x
sin ( x ) , cos ( x ) , tan ( x ) # Trigonometric funct
asin ( x ) , acos ( x ) , atan ( x ) # Inverse functions of trigonometric funct
sum () # Sum of vector elements
prod () # Product of vector elements
choose (n , k ) # Combination funct
factorial ( n ) or prod ( n :1) # Factorial funct
Ví dụ 2.2.1.
abs ( -30) # gia tri tuyet doi cua -30
[1] 30
sqrt (36) # can bac hai cua 36
[1] 6
-8^(1 / 3) # can bac ba cua -8
[1] -2
sin ( pi / 6)
[1] 0.5
asin (0.5) # arcsin cua 0.5
[1] 0.5235988
exp (3) # Gia tri cua e ^3
[1] 20.08554
log ( exp (3)) # Logarit tu nhien cua e ^3
{[1] 3
log10 (10000) # Logarit co so 10 cua 10000
[1] 4
13
THỰC HÀNH THỐNG KÊ KHOA HỌC SỰ SỐNG
a == b # a equal to b
a ! = b # a not equal to b
a < b # a smaller than b
a <= b # a smaller than or equal to b
a > b # a bigger than b
a >= b # a bigger than or equal to b
! a # not a
a | b # a or b
a & b # a and b
Đây là dữ liệu dạng logic (TRUE hoặc FALSE) để xác định chân trị của một vấn đề.
Chú ý: dấu “=” trong R là phép gán giá trị còn dấu “==” mới thật sự là phép so sánh
thông thường.
Ví dụ 2.2.2.
99 < 100 99 > 100 99 >= 100
[1] TRUE [1] FALSE [1] FALSE
100 > 100 100 <= 100 (2 + 2) ! = 5
[1] FALSE [1] TRUE [1] TRUE
! ((2 + 2) == 5) ! (2 < 3)
[1] TRUE [1] FALSE
((2 + 2) == 4) & ((2 + 2) == 5) ((2 + 2) == 4)|((2 + 2) == 5)
[1] FALSE [1] TRUE
! (2 < 3) & (3 <= 4) (2 ! = 3)|(2 == 3)}
[1] FALSE [1] TRUE
14
THỰC HÀNH THỐNG KÊ KHOA HỌC SỰ SỐNG
Ví dụ 2.2.3.
# Vector kieu so ( numeric )
x = c ( 1 ,3 ,5 ,7 ,9 ,0 ,2 ,4 ,6 ,8 )
x
[1] 1 3 5 7 9 0 2 4 6 8
# Vector chuoi ( string ): them dau nhay ( mot dau hay hai dau deu duoc )
name = c ( ’A ’ , ’B ’ , ’C ’ , ’D ’)
name
[1] "A" "B" "C" "D"
# vector kieu date
t = c ( " 1 4 / 0 2 / 2 0 1 5 " ," 8 / 3 / 2 0 1 5 " ," 0 1 / 4 / 2 0 1 5 " ," 3 0 / 0 4 / 2 0 1 5 " )
t = as . Date (t , format = " % d /% m /% Y " )
t
[ 1 ] " 2 0 1 5 -0 2 -1 4 " " 2 0 1 5 -0 3 -0 8 " " 2 0 1 5 -0 4 -0 1 " " 2 0 1 5 -0 4 -3 0 "
x <- c ( " 1 jan 1 9 6 0 " , " 2 jan 1 9 6 0 " , " 3 1 mar 1 9 6 0 " , " 3 0 jul 1 9 6 0 " )
z <- as . Date (x , " % d % b % Y " )
z
[ 1 ] " 1 9 6 0 -0 1 -0 1 " " 1 9 6 0 -0 1 -0 2 " " 1 9 6 0 -0 3 -3 1 " " 1 9 6 0 -0 7 -3 0 "
15
THỰC HÀNH THỐNG KÊ KHOA HỌC SỰ SỐNG
Giả sử trong quá trình nhập dữ liệu có sai sót. Vấn đề đặt ra là ta chỉ thay giá trị
sai sót đó bằng giá trị đúng mà không cần nhập lại toàn bộ số liệu. Có hai cách
làm như sau:
x = c(1, 3, 5, 7, 9, 0, 2, 4, 6, 8)
x
[1] 1 3 5 7 9 0 2 4 6 8
16
THỰC HÀNH THỐNG KÊ KHOA HỌC SỰ SỐNG
2.2.5 Factor
Lệnh factor() dùng để chuyển đổi một vector thành một factor. Một factor cũng có
thể được sắp thứ tự với tùy chọn ordered=T hoặc lệnh ordered(). Lệnh levels() kết
quả trả về các mức của một factor.
gl() sinh ra các factor. n là số mức, k là số lần lặp lại của mỗi factor và length là
tổng chiều dài của factor. labels là tùy chọn và cho các nhãn của mỗi mức.
Các factor có thể được xem như các biến danh mục. Một hàm quan trọng cho phân
tích factor là hàm table(), đưa ra một loại tổng hợp. Khi xét các loại dữ liệu thống
kê (định danh, thứ bậc, khoảng và tỷ lệ), các factor có thể là định danh, thứ bậc, hoặc
khoảng.
Ví dụ 2.2.6.
factor ( c ( " yes " , " no " , " yes " , " maybe " , " maybe " , " no " , " maybe " , " no " , " no " ))
[ 1 ] yes no yes maybe maybe no maybe no no
Levels : maybe no yes
factor ( c ( " yes " , " no " , " yes " , " maybe " , " maybe " , " no " , " maybe " , " no " , " no " ) , ordered = T )
[ 1 ] yes no yes maybe maybe no maybe no no
Levels : maybe < no < yes
ordered ( c ( " yes " , " no " , " yes " , " maybe " , " maybe " , " no " , " maybe " , " no " , " no " ))
[ 1 ] yes no yes maybe maybe no maybe no no
Levels : maybe < no < yes
ordered ( as . factor ( c ( " First " , " Third " , " Second " , " Fifth " , " First " , " First " , " Third " )) ,
levels = c ( " First " , " Second " , " Third " , " Fourth " , " Fifth " ))
[ 1 ] First Third Second Fifth First First Third
Levels : First < Second < Third < Fourth < Fifth
gl ( n = 2 , k = 2 , length = 1 0 , labels = c ( " Male " , " Female " )) # generate factor levels
[ 1 ] Male Male Female Female Male Male Female Female Male Male
Levels : Male Female
2.2.6 Array
Một mảng gồm n chiều với mỗi chiều là một vector về các đối tượng R cùng loại. Một
mảng một chiều một phần tử có thể được xây dựng như sau
x = array ( c (T , F ) , dim = c ( 1 ))
print ( x )
[ 1 ] TRUE
Mảng x được tạo với một chiều (dim=c(1)) được rút từ vector các giá trị có thể c(T,F).
Một cách tương tự, y, có thể được tạo với một chiều và hai giá trị.
17
THỰC HÀNH THỐNG KÊ KHOA HỌC SỰ SỐNG
y = array ( c (T , F ) , dim = c ( 2 ))
print ( y )
[ 1 ] TRUE FALSE
Các mảng R được truy xuất theo cách tương tự các mảng trong các ngôn ngữ khác:
theo chỉ số nguyên, bắt đầu là 1 (không phải 0). Đoạn mã sau đây cho ta thấy cách mà
chiều thứ ba của mảng 3x3x3 có thể được truy xuất như thế nào.
z[,,3]
[,1] [,2] [,3]
[ 1 ,] 19 22 25
[ 2 ,] 20 23 26
[ 3 ,] 21 24 27
Xác định cụ thể hai trong ba chiều sẽ trả về một mảng một chiều.
z [ , 3 ,3 ]
[1] 25 26 27
Xác định cụ thể ba trong ba chiều sẽ trả về một phần tử của mảng 3x3x3.
z [ 3 ,3 ,3 ]
[1] 27
18
THỰC HÀNH THỐNG KÊ KHOA HỌC SỰ SỐNG
[ 1 ,] 13 16
[ 2 ,] 14 17
[ 3 ,] 15 18
, , 2
[,1] [,2]
[ 1 ,] 22 25
[ 2 ,] 23 26
[ 3 ,] 24 27
Các mảng không cần đối xứng theo mọi chiều. Đoạn code sau tạo một cặp các mảng
3x3.
w = array ( 1 : 1 8 , dim = c ( 3 , 3 , 2 ))
print ( w )
, , 1
[,1] [,2] [,3]
[ 1 ,] 1 4 7
[ 2 ,] 2 5 8
[ 3 ,] 3 6 9
, , 2
[,1] [,2] [,3]
[ 1 ,] 10 13 16
[ 2 ,] 11 14 17
[ 3 ,] 12 15 18
Các đối tượng của các vector tạo nên mảng phải cùng loại, nhưng chúng không cần phải
là số.
u = array ( c (T , F ) , dim = c ( 3 , 3 , 2 ))
print ( u )
, , 1
[,1] [,2] [,3]
[ 1 ,] TRUE FALSE TRUE
[ 2 ,] FALSE TRUE FALSE
[ 3 ,] TRUE FALSE TRUE
, , 2
[,1] [,2] [,3]
[ 1 ,] FALSE TRUE FALSE
[ 2 ,] TRUE FALSE TRUE
[ 3 ,] FALSE TRUE FALSE
2.2.7 Matrix
Ma trận là một mảng hai chiều gồm các số, ký hiệu hoặc biểu thức sắp xếp theo
hàng và cột. Trong đó, tất cả các phần tử có cùng một kiểu numeric, character hoặc
logical.
19
THỰC HÀNH THỐNG KÊ KHOA HỌC SỰ SỐNG
Nếu ta muốn tạo một ma trận, một cách là sử dụng hàm matrix(data, nrow, ncol,
byrow, dimnames). Ta phải nhập một vector dữ liệu, số hàng và/hoặc cột và cuối cùng
ta có thể xác định xem ta muốn R đọc vector theo hàng hay theo cột (tùy chọn mặc
định).
Nếu thêm byrow = TRUE thì các phần tử được sắp theo hàng trước
B <- matrix ( 1 : 2 0 , nrow = 4 , ncol = 5 , byrow = T )
B
[,1] [,2] [,3] [,4] [,5]
[ 1 ,] 1 2 3 4 5
[ 2 ,] 6 7 8 9 10
[ 3 ,] 11 12 13 14 15
[ 4 ,] 16 17 18 19 20
x = c(1, 3, 5, 7, 9, 0, 2, 4, 6, 8)
rnames <- c ( " R 1 " , " R 2 " , " R 3 " , " R 4 " , " R 5 " )
cnames <- c ( " C 1 " , " C 2 " )
C <- matrix (x , nrow = 5 , byrow = T , dimnames = list ( rnames , cnames ))
C
C1 C2
R1 1 3
R2 5 7
R3 9 0
R4 2 4
R5 6 8
• Các hàm cbind() và rbind() kết hợp các vector thành ma trận theo cột hoặc hàng
v 1 <- 1 : 5
v 2 <- seq ( 1 , 1 3 , by = 3 )
cbind ( v 1 , v 2 )
v1 v2
[ 1 ,] 1 1
[ 2 ,] 2 4
[ 3 ,] 3 7
[ 4 ,] 4 10
[ 5 ,] 5 13
rbind ( v 1 , v 2 )
[,1] [,2] [,3] [,4] [,5]
20
THỰC HÀNH THỐNG KÊ KHOA HỌC SỰ SỐNG
v1 1 2 3 4 5
v2 1 4 7 10 13
• Chiều của một ma trận có thể tính được bằng cách sử dụng hàm dim(). Một cách
khác là dùng lệnh nrow() và ncol() trả về số dòng và số cột của ma trận.
X <- matrix ( data = 1 : 1 5 , nrow = 5 , ncol = 5 , byrow = T )
dim ( X )
[1] 5 5
nrow ( X )
[1] 5
ncol ( X )
[1] 5
21
THỰC HÀNH THỐNG KÊ KHOA HỌC SỰ SỐNG
[ 2 ,] -3 9 2 0
[ 3 ,] 0 8 1 -2
[ 4 ,] -3 8 4 -2
diag ( F 1 )
[1] 0 9 1 -2
22
THỰC HÀNH THỐNG KÊ KHOA HỌC SỰ SỐNG
[ 1 ] 4 . 7 3 3 1 6 5e - 3 0
det ( F 1 )
[ 1 ] -2 1 3
$ vectors
[,1] [,2] [,3]
[ 1 ,] -0 . 2 1 1 5 7 6 6 0 . 9 1 0 7 0 6 2 -0 . 9 4 2 4 6 8 5 7
[ 2 ,] -0 . 9 2 2 2 9 8 9 -0 . 2 4 9 9 0 0 4 0.32752158
[ 3 ,] -0 . 3 2 3 4 1 9 3 0 . 3 2 8 8 8 3 1 -0 . 0 6 6 9 5 2 2 6
Hoặc mượn tạm lệnh phân tích qr() để tìm hạng của ma trận
23
THỰC HÀNH THỐNG KÊ KHOA HỌC SỰ SỐNG
qr ( H )
$ ‘ qr ‘
[,1] [,2] [,3]
u 1 -5 . 3 8 5 1 6 4 8 -1 3 . 5 5 5 7 5 9 7 6.3136415
u2 0.7427814 -3 . 2 0 0 2 1 5 5 -5 . 8 0 7 7 9 8 5
u3 0.3713907 0 . 1 7 9 4 0 8 4 -0 . 6 3 8 2 8 4 7
$ rank
[1] 3
$ qraux
[1] 1.5570860 1.9837747 0.6382847
$ pivot
[1] 1 2 3
attr ( , " class " )
[ 1 ] " qr "
2x + y
=4
2.2.8 List
List là một dạng dữ liệu phức tạp nhất trong R. Nó là một tập hợp có thứ tự các
đối tượng (object – components) khác nhau. Trong đó, mỗi object có thể là vector, ma
trận, data.frame, hay một list khác.
Hàn list() dùng để tạo một danh sách. unlist() chuyển đổi một danh sách thành
một vector. Các đối tượng trong một danh sách không cần cùng loại hoặc chiều dài.
24
THỰC HÀNH THỐNG KÊ KHOA HỌC SỰ SỐNG
Ví dụ 2.2.7.
x <- c ( 1 : 4 )
y <- FALSE
z <- matrix ( c ( 1 : 4 ) , nrow = 2 , ncol = 2 )
t <- c ( 2 8 ,1 9 ,1 8 ,2 0 )
myList <- list ( vector = x , logical = y , matrix = z , age = t )
myList
$ ‘ vector ‘
[1] 1 2 3 4
$ logical
[ 1 ] FALSE
$ matrix
[,1] [,2]
[ 1 ,] 1 3
[ 2 ,] 2 4
$ age
[1] 28 19 18 20
myList $ age
[1] 28 19 18 20
myList [ " vector " ]
$ ‘ vector ‘
[1] 1 2 3 4
print ( myList [[ 3 ]])
un <- unlist ( myList )
print ( un )
vector 1 vector 2 vector 3 vector 4 logical matrix 1 matrix 2
1 2 3 4 0 1 2
matrix 3 matrix 4 age 1 age 2 age 3 age 4
3 4 28 19 18 20
print ( un [[ 4 ]])
[1] 4
print ( un [[ 1 0 ]])
[1] 28
2.2.9 Data.frame
Data frame là một cấu trúc trong R gồm nhiều dòng và nhiều cột. Trong đó, mỗi cột
tương ứng với mỗi biến, mỗi dòng tương ứng với mỗi quan sát. Chú ý, ở các cột khác
nhau thì dữ liệu có thể thuộc các loại khác nhau (chẳng hạn numeric, character, hoặc
logical).
Một data frame có thể được xem như “một danh sách các biến/vector có cùng chiều
dài”. Trong ví dụ sau, một data frame có hai vector được tạo, mỗi vector có năm phần
tử. Vector đầu, v1, là một dãy các số nguyên từ 1 đến 5. Vector thứ hai, v2, là 5 giá trị
logical được rút từ loại T và F. Data frame sau đó được tạo từ các vector này. Các cột
25
THỰC HÀNH THỐNG KÊ KHOA HỌC SỰ SỐNG
của data frame có thể được truy xuất bằng cách dùng cách chỉ số nguyên hoặc tên cột
và ký hiệu $.
Ví dụ 2.2.8.
v1 = 1:5
v 2 = c (T ,T ,F ,F , T )
df = data . frame ( v 1 ,v 2 )
print ( df )
v1 v2
1 1 TRUE
2 2 TRUE
3 3 FALSE
4 4 FALSE
5 5 TRUE
df [ , 1 ]
[1] 1 2 3 4 5
df $ v 2
[1] TRUE TRUE FALSE FALSE TRUE
# Cach tao mot data . frame
ID <- c ( 1 , 2 , 3 , 4 ) # STT cua benh nhan
Age <- c ( 2 5 , 3 4 , 2 8 , 5 2 )
Diabetes <- c ( " Type 1 " , " Type 2 " , " Type 1 " , " Type 1 " ) # Benh tieu duong
Status <- c ( " Poor " , " Improved " , " Excellent " , " Poor " )
data <- data . frame ( ID , Age , Diabetes , Status )
data
ID Age Diabetes Status
1 1 25 Type 1 Poor
2 2 34 Type 2 Improved
3 3 28 Type 1 Excellent
4 4 52 Type 1 Poor
# Cach loc cac yeu to trong data . frame
data [ 1 : 2 ]
ID Age
1 1 25
2 2 34
3 3 28
4 4 52
data [ c ( " Diabetes " , " Status " )]
Diabetes Status
1 Type 1 Poor
2 Type 2 Improved
3 Type 1 Excellent
4 Type 1 Poor
# Dung $
data $ Age
[1] 25 34 28 52
# Dung ham with ()
with ( data = data , expr = Age )
[1] 25 34 28 52
with ( data , age )
[1] 25 34 28 52
26
THỰC HÀNH THỐNG KÊ KHOA HỌC SỰ SỐNG
data $ Diabetes [ data $ Age > 3 5 & data $ Status == " Poor " ]
[ 1 ] Type 1
Levels : Type 1 Type 2
with ( data = data , Diabetes [ age >3 5 & Status == " Poor " ])
[ 1 ] Type 1
Levels : Type 1 Type 2
# Xac dinh ten cac bien
names ( data )
[ 1 ] " ID " " Age " " Diabetes " " Status "
27
THỰC HÀNH THỐNG KÊ KHOA HỌC SỰ SỐNG
Bài tập
Bài tập 2.2.1. Sử dụng hàm rep() để xác định các vector sau trong R.
a) 6,6,6,6,6,6
b) 5,8,5,8,5,8,5,8
c) 5,5,5,5,8,8,8,8
d) 5,5,5,8,8,8,5,5,8,8,8,5,5,8,8,8
Bài tập 2.2.2. Sử dụng hàm seq() để xác định các vector sau trong R.
Bài tập 2.2.3. Dự đoán các dãy sau đây và dùng R để kiểm tra lại:
a) 7:11
b) seq(2,9)
c) seq(4,10,by=2)
d) seq(3,30,length=10)
e) seq(6,-4,by=-2)
Bài tập 2.2.4. Nếu x<- c(5,9,2,3,4,6,7,0,8,12,2,9) xác định giá trị của các biểu
thức sau là gì và sử dụng R để kiểm tra lại:
(a) x[2]
(b) x[2:4]
(c) x[c(2,3,6)]
28
THỰC HÀNH THỐNG KÊ KHOA HỌC SỰ SỐNG
(d) x[c(1:5,10:12)]
(e) x[-(10:12)]
A4k+4 143
xk = − , k = 1, 2, . . . , 10.
(k + 2)! 4 · k!
c) Các số hạng không âm là các số hạng thứ bao nhiêu trong dãy.
a) 3! + 4 · 5! − 6!.
b) 1! + 2! + · · · + 20!.
c) 1 − 2 + 3 − 4 + · · · + 99 − 100.
23 13 7
d) C25 − C15 − 3C10 .
0 1 10
e) C10 + C10 + · · · + C10 .
2 k 10
1 C10 C10 C10
f) C10 +2 1 + · · · + k k−1
+ · · · + 10 9 .
C10 C10 C10
P100 1
g) j=1 j 2 . h) A210 .
A515 + A210
i) A57 − A25 . j) .
A59
P10 k
Q10 k
k) k=1 A10 . l) k=1 A10 .
10
A59 Y 1
m) − 2!A210 . n) √ √ .
4 n=1
n + n + 1
29
THỰC HÀNH THỐNG KÊ KHOA HỌC SỰ SỐNG
Ma trận E
Ung thu Khong ung thu
Phoi nghiem 11 17
Khong phoi nhiem 36 127
Bài tập 2.2.9. Thực hiện các phép toán trên ma trận
1 −3 0 2 0 3
1 0 −3 −1 3 6
1. 3 + 4 , 2. 2 −4 1 0 1 −4
2 −8 1 1 −6 0
3 −5 2 1 −1 0
3 4
1 2 −1 0
3. , 4.
0 4 0 −4
T
1 3 0 2 7
h iT 11 5 −3
5. 0 −2 0 1 23 45 , 6. − 5
+ 4 9
2 −18 0
−3 −8 2 12 −5
1 3 5 −1
0 2 2
2 −1 0 2
1. 1 0 1 , 2.
7 −1 1 5
1 2 0
7 9 1 0
Bài tập 2.2.11. Tìm các ma trận nghịch đảo (nếu có)
1 2 −2 6
A= , B=
−2 3 −3 9
30
THỰC HÀNH THỐNG KÊ KHOA HỌC SỰ SỐNG
1 0 2 1 3 −2
C = 2 −1 3 , D = 1 −5 1
4 1 8 3 13 −6
1 1 1 1 1 1 1 1
1 1 −1 −1 1 1 −1 −1
E= , F =
1 −1 0 0 1 −1 1 −1
0 0 1 −1 1 −1 −1 1
Bài tập 2.2.13. Khởi tạo ma trận A có 50 dòng và 10 cột, trong đó các phần tử trên
dòng thứ i của A có giá trị bằng i.
T
Tính: A + 2B, A − B 2 , AB, BA, AT + B, A + B T , (AB) , B T AT , det(A), A2 B, A−1 .
Bài tập 2.2.15. Tạo ra một list tên là Jane gồm các objects sau:
Tuổi (age) bằng 34.
Tình trạng việc làm (working status) là TRUE.
Giới tính (gender) là female.
Tên của cha mẹ (parents) lần lượt là Joe và Liz.
Con (children) là Alex 5 tuổi (age.of.children).
31
THỰC HÀNH THỐNG KÊ KHOA HỌC SỰ SỐNG
Bài tập 2.2.16. Cho danh sách các bệnh nhân bị bệnh tiểu đường theo bảng sau
b) Lọc cột Age và Status trong patientdata bằng cách (dùng $ và hàm with()).
Bài tập 2.2.17. Tạo một data.frame có tên diemthi với các số liệu cụ thể sau
32
THỰC HÀNH THỐNG KÊ KHOA HỌC SỰ SỐNG
c) Xác định tên người có điểm (score) thấp nhất và cao nhất.
e) Sắp xếp data frame diemthi theo biến score với thứ tự từ nhỏ đến lớn (dùng hàm
order()).
33
Chương 3
34
THỰC HÀNH THỐNG KÊ KHOA HỌC SỰ SỐNG
STT 1 2 3 4 5 6 7 8 9 10
Age 50 62 60 40 48 47 57 70 48 67
Insulin 16.5 10.8 32.3 19.3 14.2 11.3 15.5 15.8 16.2 11.2
Trong đó, sep là tham số để tạo ngăn cách các cột, row.names mặc định là TRUE
xuất ra chỉ số thứ tự của các dòng. Do đó, ta phải chọn FALSE không xuất ra các
chỉ số đó.
• Lưu tất cả các công việc đã làm thành file text: File/Save as File. . .
35
THỰC HÀNH THỐNG KÊ KHOA HỌC SỰ SỐNG
Dùng hàm spss.get() thuộc package Hmisc. Hoặc dùng hàm read.spss(file.choose())
và read.dta(file.choose()) thuộc package foreign
Ví dụ 3.2.3. Đọc file khanangtrano.sav trong thư mục Datafiles ở ổ đĩa E vào R.
install . packages ( " Hmisc " )
library ( Hmisc )
nganhang = spss . get ( file . choose ())
head ( nganhang ) # xuat 6 dong dau tien cua du lieu
Đôi khi, chúng ta đọc các file tài liệu như word, excel, pdf, sách điện tử (nói chung
tài liệu điện tử),. . . và ở đó, chúng ta thỉnh thoảng thấy có một số bảng dữ liệu có sẵn.
Lúc này, nếu ta muốn sao chép chúng để sử dụng thì ta có thể sử dụng hàm scan() sẽ
đỡ mất thời gian gõ từng con số và ký tự. Hãy theo dõi các ví dụ sau:
• Dữ liệu dạng numeric
Trọng lượng của 50 cầu thủ hàng đầu NBA Bộ dữ liệu dưới đây liệt kê về trọng
lượng của 50 cầu thủ hàng đầu NBA (đơn vị: lb).
240 210 220 260 250 195 230 270 325 225
165 295 205 230 250 210 220 210 230 202
250 265 230 210 240 245 225 180 175 215
215 235 245 250 215 210 195 240 240 225
260 210 190 260 230 190 210 230 185 260
36
THỰC HÀNH THỐNG KÊ KHOA HỌC SỰ SỐNG
M M M A H M S M H M
S M M M M A M M A M
M M H M M M H M H M
A M M M H M M M M M
Cách làm tương tự như dữ liệu dạng numeric, tuy nhiên thêm đối số what = "string".
• Dữ liệu vừa có numeric vừa có character
37
THỰC HÀNH THỐNG KÊ KHOA HỌC SỰ SỐNG
• Sắp xếp biến x theo thứ tự tăng dần: x[order(x)] hoặc sort(x, decreasing =
FALSE).
• Sắp xếp biến x theo thứ tự giảm dần: x[order(-x)] hoặc sort(x, decreasing =
TRUE).
Ví dụ 3.3.1.
Sắp xếp dãy số sau tăng dần: 2;-1.5; 0; 3; 2; 1; 7; 9; 10.
x = c ( 2 , -1 . 5 , 0 , 3 , 2 , 1 , 7 , 9 , 1 0 )
x
[ 1 ] 2 . 0 -1 . 5 0 . 0 3 . 0 2 . 0 1 . 0 7 . 0 9 . 0 1 0 . 0
sort ( x )
[ 1 ] -1 . 5 0 . 0 1 . 0 2 . 0 2 . 0 3 . 0 7 . 0 9 . 0 1 0 . 0
sort (x , decreasing = TRUE )
[ 1 ] 1 0 . 0 9 . 0 7 . 0 3 . 0 2 . 0 2 . 0 1 . 0 0 . 0 -1 . 5
Ví dụ 3.3.2. Cho bảng số liệu về điểm thi học kỳ 1 của 10 học sinh như sau:
38
THỰC HÀNH THỐNG KÊ KHOA HỌC SỰ SỐNG
• Rút ra một tập con dữ liệu thỏa mãn điều kiện đặt ra
Dùng lệnh subset(data, điều kiện)
Ở ví dụ 3.3.2, thực hiện các yêu cầu sau
a) Rút ra một tập con dữ liệu với điều kiện giới tính là nữ
b) Rút ra một tập con dữ liệu với điều kiện giới tính là nữ và có điểm lớn hoặc
bằng 8.0
c) Rút ra một tập con dữ liệu với điều kiện giới tính là nữ hoặc có điểm lớn hoặc
bằng 8.0
Chúng ta có hai bảng số liệu về kết quả điểm học kỳ 1 (bảng dữ liệu ở ví dụ trên) và
bảng dữ liệu học kỳ 2, chúng ta cần hợp hai bảng dữ liệu điểm bằng lệnh merge().
Sau đó, tạo cột điểm trung bình và cột xếp loại cho dataframe ca.nam.
39
THỰC HÀNH THỐNG KÊ KHOA HỌC SỰ SỐNG
40
THỰC HÀNH THỐNG KÊ KHOA HỌC SỰ SỐNG
Chúng ta cần mã hóa female là 0, male là 1. Chúng ta có thể mã hóa và lưu vào
cột tên là Gioi.tinh như sau
hk 1 $ Gioi . tinh [ gender == ’ female ’] <- 0
hk 1 $ Gioi . tinh [ gender == ’ male ’] <- 1
hk 1
id name gender diem . hk 1 Gioi . tinh
1 1 Minh male 7.0 1
2 2 Quan male 8.8 1
3 3 Phuc male 9.0 1
4 4 Linh female 5.0 0
5 5 Vy female 6.0 0
6 6 Tu female 6.8 0
7 7 Mai female 7.5 0
8 8 Tram female 8.5 0
9 9 Tien female 8.0 0
1 0 1 0 Ngoc female 9.5 0
Chúng ta cần xếp loại học lực trung bình, khá, giỏi. Chúng ta có thể mã hóa và
lưu vào cột tên là Xep.loai như sau:
hk 1 $ Xep . loai [ diem . hk 1 >= 5 & diem . hk 1 < 6 . 5 ] < - " TB "
hk 1 $ Xep . loai [ diem . hk 1 >= 6 . 5 & diem . hk 1 < 8 ] <- " Kha "
hk 1 $ Xep . loai [ diem . hk 1 >= 8 . 0 ] <- " Gioi "
hk 1
id name gender diem . hk 1 Gioi . tinh Xep . loai
1 1 Minh male 7.0 1 Kha
2 2 Quan male 8.8 1 Gioi
3 3 Phuc male 9.0 1 Gioi
4 4 Linh female 5.0 0 TB
5 5 Vy female 6.0 0 TB
6 6 Tu female 6.8 0 Kha
7 7 Mai female 7.5 0 Kha
8 8 Tram female 8.5 0 Gioi
9 9 Tien female 8.0 0 Gioi
1 0 1 0 Ngoc female 9.5 0 Gioi
41
THỰC HÀNH THỐNG KÊ KHOA HỌC SỰ SỐNG
3.4 Mô tả dữ liệ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.
42
THỰC HÀNH THỐNG KÊ KHOA HỌC SỰ SỐNG
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 ))}
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 " )
• Biểu đồ đường
Sử dụng hàm plot(x, y, type, lty, lwd, pch, main, xlab, ylab, xlim, ylim,
col, ...)
trong đó,
x, y: là các vector số liệu để vẽ tương ứng trên trục hoành và trục tung. Trong
trường hợp chỉ khai báo một thông số thì trục hoành được vẽ mặc định và trục
tung thể hiện các giá trị số liệu.
type: loại đồ thị cần vẽ.
type = "p": point (vẽ điểm);
type = "l": lines (vẽ đường);
type = "b": both (vẽ cả đường và điểm);
type = "o": overplotted (đường điểm dính liền);
type = "h": histogram (có dạng gậy thẳng đứng);
44
THỰC HÀNH THỐNG KÊ KHOA HỌC SỰ SỐNG
Ví dụ 3.4.1. Cho số liệu về lượng mưa của một số thủ đô (data file: cityrain.txt).
Vẽ biểu đồ đường thể hiện xu hướng biến động về lượng mưa theo các tháng của
các thủ đô? Thực hiện so sánh lượng mưa của các thủ đô trên?
> cityrain = read . table ( file . choose () , header = TRUE )
> attach ( cityrain )
> cityrain
plot ( Tokyo , type = ’o ’ , col = ’ blue ’ ,
ylim = c ( 0 , 2 5 0 ) , axes =F , ann = F )
axis ( 1 , at = 1 : 1 2 , lab = Month )
axis ( 2 , at = 5 0 * 0 : 2 5 0 )
box ()
lines ( NewYork , type = ’o ’ , pch = 2 2 , lty = 2 , col = ’ red ’)
lines ( London , type = ’o ’ , pch = 2 3 , lty = 3 , col = ’ green ’)
lines ( Berlin , type = ’o ’ , pch = 2 4 , lty = 4 , col = ’ black ’)
title ( main = ’ Monthly Rainfall in major cities ’ ,
col . main = ’ red ’ , font . main = 4 , xlab = ’ Month of year ’ ,
ylab = ’ Rainfall ( mm ) ’ , col . lab = rgb ( 0 ,0 . 5 ,0 ))
legend ( 1 , 2 5 0 , c ( ’ Tokyo ’ , ’ NewYork ’ , ’ London ’ , ’ Berlin ’) ,
col = c ( ’ blue ’ , ’ red ’ , ’ green ’ , ’ black ’) ,
pch = 2 1 : 2 4 , lty = 1 : 4 )
- beside: TRUE hoặc FALSE (mặc định là FALSE). Vẽ các cột chồng lên nhau
hay là xếp bên cạnh nhau.
- horiz: TRUE hoặc FALSE (mặc định là FALSE): Vẽ các cột nằm ngang hay là
thẳng đứng (mặc định là thẳng đứng).
- density: tạo mật độ cho các cột bằng các nét gạch chéo.
Ví dụ 3.4.2. Bảng số liệu sau đây là phân phối mức độ giáo dục cao nhất cho
những người từ 25 đến 34 tuổi. Vẽ biểu đồ thanh để mô tả biến Percent.
46
THỰC HÀNH THỐNG KÊ KHOA HỌC SỰ SỐNG
# Input data
Education = c ( ’ Not HS ’ , ’ HS ’ , ’ College ’ , ’ Associate ’ , ’ Bachelor ’ ,
’ Advanced ’)
Education
[ 1 ] " Not HS " " HS " " College " " Associate " " Bachelor " " Advanced "
Count = c ( 4 . 6 , 1 1 . 6 , 7 . 4 , 3 . 3 , 8 . 6 , 2 . 5 )
Count
[1] 4.6 11.6 7.4 3.3 8.6 2.5
Percent = c ( 1 1 . 1 , 3 0 . 5 , 1 9 . 5 , 8 . 7 , 2 2 . 6 , 6 . 6 )
Percent
[1] 11.1 30.5 19.5 8.7 22.6 6.6
level . edu = data . frame ( Education , Count , Percent )
level . edu
# Ve tho
barplot ( Percent )
# Them mau sac
barplot ( Percent , col = c ( ’ red ’ , ’ blue ’ , ’ yellow ’ , ’ orange ’ , ’ green ’ , ’ brown ’ ))
# Them ten cac cot
barplot ( Percent , col = rainbow ( 6 ) , names . arg = Education )
# Them ten truc Ox
barplot ( Percent , col = rainbow ( 6 ) , names . arg = Education , xlab = ’ Education
Degree ’)
# Them ten truc Oy
barplot ( Percent , col = rainbow ( 6 ) , names . arg = Education , xlab = ’ Education
Degree ’ , ylab = ’ Percent (%) ’)
# Them ten cho bieu do
barplot ( Percent , col = rainbow ( 6 ) , names . arg = Education , xlab = ’ Education
Degree ’ , ylab = ’ Percent (%) ’ , main = ’ The distribution of the highest
level of education ’)
# Noi rong truc Oy
barplot ( Percent , col = rainbow ( 6 ) , names . arg = Education , xlab = ’ Education
Degree ’ , ylab = ’ Percent (%) ’ , main = ’ The distribution of the highest
level of education ’ , ylim = c ( 0 ,4 0 ))
# Tao chu thich
barplot ( Percent , col = rainbow ( 6 ) , names . arg = Education , xlab = ’ Education
Degree ’ , ylab = ’ Percent (%) ’ , main = ’ The distribution of the highest
level of education ’ , ylim = c ( 0 ,4 0 ) , legend . text = Education )
# Dan cac gia tri
x = barplot ( Percent , col = rainbow ( 6 ) , names . arg = Education , xlab =
47
THỰC HÀNH THỐNG KÊ KHOA HỌC SỰ SỐNG
Ngoài ra, biểu đồ thanh còn vẽ cho biến dạng bảng tần số. Cách làm
tương tự như phần trên. Tức là barplot(bảng tần số).
Ví dụ 3.4.3. Cho số liệu doanh thu (triệu USD) của ba sản phẩm A, B, C được
tiêu thụ ở một số thành phố lớn trên thế giới. (data file citysale.csv).
a) Vẽ biểu đồ cột so sánh doanh thu của các thành phố theo từng sản phẩm?
b) Vẽ biểu đồ cột so sánh doanh thu của ba sản phẩm theo từng thành phố?
48
THỰC HÀNH THỐNG KÊ KHOA HỌC SỰ SỐNG
sale
ProductA ProductB ProductC
[ 1 ,] 23 11 12
[ 2 ,] 89 6 56
[ 3 ,] 24 7 13
[ 4 ,] 36 34 44
[ 5 ,] 3 78 14
> rownames ( sale )= c ( ’ Seattle ’ , ’ London ’ , ’ Tokyo ’ , ’ Berlin ’ , ’ Mumbai ’)
sale
ProductA ProductB ProductC
Seattle 23 11 12
London 89 6 56
Tokyo 24 7 13
Berlin 36 34 44
Mumbai 3 78 14
barplot ( sale , beside =T , legend . text =T , ylim = c ( 0 ,1 0 0 ) , col = rainbow ( 5 ) ,
xlab = " Products " , ylab = " Revenue ( Million USD ) " , main = " Revenue of Cities by
Products " )
b) Đầu tiên ta cần chuyển vị ma trận sale để các thành phố lúc này trở thành các
cột của ma trận.
barplot ( t ( sale ) , beside =T , ylim = c ( 0 ,1 0 0 ) , col = rainbow ( 3 ) , xlab = " City " ,
49
THỰC HÀNH THỐNG KÊ KHOA HỌC SỰ SỐNG
ylab = " Revenue ( Million USD ) " , main = " Revenue of Products by City " )
# Tao chu thich tai toa do ( 1 0 ,1 0 0 )
legend ( 1 0 ,1 0 0 , legend = colnames ( sale ) , fill = rainbow ( 3 ))
50
THỰC HÀNH THỐNG KÊ KHOA HỌC SỰ SỐNG
• Biểu đồ tròn
51
THỰC HÀNH THỐNG KÊ KHOA HỌC SỰ SỐNG
Ngoài ra, chúng ta cũng có thể vẽ biểu đồ tròn 3D. Sử dụng hàm: pie3D() trong
package plotrix
install . packages ( " plotrix " )
library ( plotrix )
slices <- c ( 1 0 , 1 2 , 4 , 1 6 , 8 )
lbls <- c ( ’ US ’ , ’ UK ’ , ’ Australia ’ , ’ Germany ’ , ’ France ’)
pie 3 D ( slices , labels = lbls , explode = 0 . 1 ,
main = " Pie Chart of Countries " )
52
THỰC HÀNH THỐNG KÊ KHOA HỌC SỰ SỐNG
Biểu đồ thân lá thường được dùng để mô tả phân bố của số liệu có kích thước
nhỏ. Hàm sử dụng: stem(x, scale) hoặc stem.leaf(data, unit) trong package
“aplpack”, trong đó
Ví dụ 3.4.5. Cho số liệu về tỷ lệ biết chữ của một số quốc gia Hồi giáo. Đọc file
literacy rates.csv, thực hiện các yêu cầu sau
c) Vẽ biểu đồ thân lá cho cả hai biến trên cùng một thân để so sánh biến Male
và biến Female. Biểu đồ này được gọi là back to back stem plot (dùng hàm
stem.leaf.backback(x,y))
53
THỰC HÀNH THỐNG KÊ KHOA HỌC SỰ SỐNG
2 | 9
3 | 18
4 | 6
5 |
6 | 038
7 | 0118
8 | 256
9 | 999
• Biểu đồ phân bố histogram Khác với biểu đồ thân lá, biểu đồ histogram
thường được dùng để mô tả bộ số liệu có kích thước lớn. Để vẽ histogram, ta
dùng lệnh hist()
hist(x, breaks,freq,include.lowest,right,labels, ...)
54
THỰC HÀNH THỐNG KÊ KHOA HỌC SỰ SỐNG
trong đó,
x: dữ liệu cần vẽ histogram.
breaks: thiết lập cách phân tổ dữ liệu.
freq: TRUE/FALSE (mặc định là TRUE). Nếu freq=T vẽ histogram tần số (mặc định).
Nếu freq=F thì vẽ histogram tần suất.
right: TRUE/FALSE (mặc định là TRUE). Nếu right =TRUE chia tổ theo kiểu (a;b].
Ngược lại nếu right=F thì phân tổ có dạng [a, b).
include.lowest: TRUE/FALSE (mặc định là TRUE),bao gồm giá trị nhỏ nhất nếu
right=T. Ngược lại, có bao gồm giá trị lớn nhất nếu right=F.
labels: TRUE/FALSE (mặc định là FALSE) hiện thị các tần số hoặc tần suất lên phía
trên các cột của histogram.
Ví dụ 3.4.6. Cho số liệu về lợi nhuận của các cửa hàng bán lẻ của một công ty
như sau. Đơn vị tính : Triệu đồng
20 35 23 52 47 31 27 44 55 24
34 58 49 60 36 43 22 25 48 56
56 41 24 58 27 46 54 39 35 42
43 22 46 51 48 42 51 44 40 31
29 46 30 49 52 47 33 51 41 43
a) Phân tổ số liệu trên thành 4 tổ và khoảng cách tổ bằng nhau. Trình bày kết
quả trên bảng tần số, tần suất.
55
THỰC HÀNH THỐNG KÊ KHOA HỌC SỰ SỐNG
56
THỰC HÀNH THỐNG KÊ KHOA HỌC SỰ SỐNG
Tự thực hành ví dụ sau: Cho số liệu về chỉ số IQ của 60 học sinh lớp 5 như sau:
b) Vẽ biểu đồ phân bố tần suất histogram và gắn thêm đường mật độ. Nhận xét
thông tin nhận được.
Ngoài ra, breaks có thể nhận giá trị là một vector. Xét ví dụ sau đây:
Ví dụ 3.4.7. Vẽ histogram cho dữ liệu phân phối chuẩn với trung bình 24, phương
sai 4.
57
THỰC HÀNH THỐNG KÊ KHOA HỌC SỰ SỐNG
• Biểu đồ tán xạ
Biểu đồ tán xạ dùng để thể hiện mối quan hệ của hai biến định lượng.
Hàm sử dụng: plot(x, y, type, lty, lwd, pch, main, xlab, ylab, xlim, ylim,
col, ...)
Ví dụ 3.4.8. Trong package MASS, có một dataset tên là cats, bao gồm các biến
Sex, Bwt (đơn vị kg), Hwt (g).
library ( MASS )
data ( cats )
cats
plot ( cats $ Bwt , cats $ Hwt , col = cats $ Sex )
abline ( lm ( cats $ Hwt ~ cats $ Bwt ) , col = ’ blue ’) # Duong hoi quy tuyen tinh
plot ( cats $ Bwt , cats $ Hwt , col = cats $ Sex , pch = 1 6 )
abline ( lm ( cats $ Hwt ~ cats $ Bwt ) , col = ’ blue ’)
cor ( cats $ Bwt , cats $ Hwt ) # He so tuong quan
[1] 0.8041274
58
THỰC HÀNH THỐNG KÊ KHOA HỌC SỰ SỐNG
59
THỰC HÀNH THỐNG KÊ KHOA HỌC SỰ SỐNG
Lưu ý: Yếu vị của một bộ dữ liệu là giá trị xuất hiện nhiều nhất trong bộ dữ liệu đó.
Câu lệnh:
freq=table()
names(freq)[freq==max(freq)]
Ví dụ 3.4.9. Dưới đây là điểm kiểm tra học kỳ 1 môn nhập môn thống kê của 10 bạn
sinh viên.
80 75 92 85 75 98 90 75 80 90
a) Tìm trung bình, trung vị, phương sai, độ leehcj chuẩn, Q1, Q3, IQR.
b) Lập bảng tần số và bảng tần số tương đối cho dữ liệu trên.
60
THỰC HÀNH THỐNG KÊ KHOA HỌC SỰ SỐNG
[1] 80 75 92 85 75 98 90 75 80 90
mean ( score ) # Tinh trung binh
[1] 84
median ( score ) # Tinh trung vi
[1] 82.5
var ( score ) # Tinh phuong sai
[1] 67.55556
sd ( score ) # Tinh do lech chuan
[1] 8.219219
quantile ( score , probs = 0 . 2 5 ) # Tinh Q 1 theo type = 7
25%
76.25
quantile ( score , probs = 0 . 2 5 , type = 2 ) # Tinh Q 1 theo type = 2
25%
75
quantile ( score , probs = 0 . 7 5 ) # Tinh Q 3 theo type = 2
75%
90
quantile ( score , probs = 0 . 7 5 , type = 2 ) # Tinh Q 3 theo type = 2
75%
90
IQR ( score ) # Tinh do trai giua IQR theo type = 7
[1] 13.75
IQR ( score , type = 2 ) # Tinh do trai giua IQR theo type = 2
[1] 15
summary ( score ) # Tom tat so lieu bang mot lenh
Min . 1 st Qu . Median Mean 3 rd Qu . Max .
75.00 76.25 82.50 84.00 90.00 98.00
# Bang tan so
tanso = table ( score )
tanso
score
75 80 85 90 92 98
3 2 1 2 1 1
# Bang tan suat = tan so / n
tansuat = prop . table ( tanso )
tansuat
score
75 80 85 90 92 98
0.3 0.2 0.1 0.2 0.1 0.1
# Ghep tan so va tan suat thanh mot bang
bang = cbind ( tanso , tansuat )
bang
tanso tansuat
75 3 0.3
80 2 0.2
85 1 0.1
90 2 0.2
92 1 0.1
98 1 0.1
61
THỰC HÀNH THỐNG KÊ KHOA HỌC SỰ SỐNG
Biểu đồ hộp được tạo ra từ năm đặc trưng bao gồm Min, Q1, Median, Q3, Max. Trong
đó, Min và Max lần lượt là giá trị nhỏ nhất và giá trị lớn nhất khi đã loại bỏ các outliers
(các giá trị ngoại vi) ra khỏi số liệu. Outliers là các phần tử bất thường quá lớn hoặc
quá bé và chúng được xác định bằng nguyên tắc sau:
Hàm sử dụng: boxplot(x, col, main, xlab, ylab, xlim, ylim,...). Ngoài ra, ta
có thể xuất các đặc trưng Min, Q1, Median, Q3, Max, khoảng ước lượng cho trung vị
và các outliers (nếu có) qua hàm boxplot.stats().
boxplot ( score , col = " blue " , xlab = " First Score " , ylab = " Score " ,
main = " The scores on the first exam in an introductory statistics " )
boxplot . stats ( score )
$ stats # lan luot la Min , Q 1 , Median , Q 3 , Max
[1] 75.0 75.0 82.5 90.0 98.0
$n
[1] 10
62
THỰC HÀNH THỐNG KÊ KHOA HỌC SỰ SỐNG
Nhận xét: Biểu đồ hộp cho thấy không có outliers nào và biểu đồ không có râu dưới
vì Min trùng với Q1. Biểu đồ hộp cân xứng với trung vị nằm ngay chính giữa, chứng tỏ
số liệu không bị lệch.
2.3 13.8 16.1 1.6 0.3 0.5 13.1 8.6 1.3 12.7
3.4 72.8 0.3 5.0 11.4 5.8 3.2 26.0 0.1 6.5
x = c(2.3, 13.8, 16.1, 1.6, 0.3, 0.5, 13.1, 8.6, 1.3, 12.7, 3.4, 72.8,
0.3, 5.0, 11.4, 5.8, 3.2, 26.0, 0.1, 6.5)
x
[1] 2.3 13.8 16.1 1.6 0.3 0.5 13.1 8.6 1.3 12.7 3.4 72.8
[13]0.3 5.0 11.4 5.8 3.2 26.0 0.1 6.5
boxplot (x , col = " red " )
boxplot . stats ( x )
$ stats
[1] 0.10 1.45 5.40 12.90 26.00
$n
63
THỰC HÀNH THỐNG KÊ KHOA HỌC SỰ SỐNG
[1] 20
$ conf
[1] 1.354729 9.445271
$ out
[1] 72.8
Nhận xét: ta thấy có một giá trị outlier là 72.8. Sau khi loại bỏ giá trị oulier này
thì max = 26.0, min = 0.1, Q1 = 1.45, median = 5.4, Q3 = 12.9. Số liệu bị lệch
phải do bên phải có ít số liệu hơn bên trái.
Phần này, sử dụng dữ liệu carprice.csv bao gồm một số biến sau:
Manufacturer: Tên nhà sản suất
Model: Các kiểu mẫu xe
64
THỰC HÀNH THỐNG KÊ KHOA HỌC SỰ SỐNG
Type: Các loại xe (xe có kích thước nhỏ, lớn, kích thước trung bình,
xe thể thao,\ldots)
Min.Price: giá thấp nhất
Max.Price: giá cao nhất
Price: Giá bình quân của các loại xe
MPG.city: (miles per gallon in city) số dặm chạy được trong thành phố trên
1 gallon nhiên liệu.
MPG.highway: (miles per gallon in highway) số dặm chạy được trong đường
cao tốc trên 1 gallon nhiên liệu.
65
THỰC HÀNH THỐNG KÊ KHOA HỌC SỰ SỐNG
bang . Type = data . frame ( tanso . Type , tyle , tyle . tichluy , row . names = NULL )
bang . Type
Type Freq tyle tyle . tichluy
1 Compact 16 17.2% 17.20
2 Large 11 11.83% 29.03
3 Midsize 22 23.66% 52.69
4 Small 21 22.58% 75.27
5 Sporty 14 15.05% 90.32
6 Van 9 9.68% 100.00
66
THỰC HÀNH THỐNG KÊ KHOA HỌC SỰ SỐNG
5 [ 5 1 ,6 2 ) 1 1.08% 100.00
Giả sử những chiếc xe có giá dưới 20 (đơn vị $1000) là loại xe có giá thấp; xe có giá trên
20 và dưới 40 là thuộc loại giá trung bình; còn xe có giá từ 40 trở lên là giá cao. Hãy
chia biến Price theo ba nhóm trên, dán nhãn tương ứng, thống kê tần số đếm được và
tính tỷ lệ phần trăm?
# Chia nhom co dan nhan
Gia = cut ( Price , breaks = c ( 7 , 2 0 , 4 0 , 6 5 ) , labels = c ( " Thap " , " Trungbinh " , " Cao " ) , right = F )
Gia
Freq . Price = table ( Gia )
Freq . Price
Gia
Thap Trungbinh Cao
61 29 3
f = round ( prop . table ( Freq . Price )* 1 0 0 , 2 )
Relative = paste (f , " % " , sep = " " )
bang . p = data . frame ( Freq . Price , Relative , row . names = NULL )
bang . p
Gia Freq Relative
1 Thap 61 65.59%
2 Trungbinh 29 31.18%
3 Cao 3 3.23%
Đây còn gọi là bảng chéo (cross table) thể hiện thông tin liên hệ theo hai biến. Chẳng
hạn, thống kê số xe bán được theo loại xe (biến Type) và theo giá (thấp, trung bình,
cao).
freq 1 = table ( Type , Gia )
freq 1
Gia
Type Thap Trungbinh Cao
Compact 11 5 0
Large 3 8 0
Midsize 8 11 3
Small 21 0 0
Sporty 10 4 0
Van 8 1 0
Nhận xét: Xe loại kích thước nhỏ và giá thấp có số lượng nhiều nhất: 21 chiếc; Xe có giá
cao có số lượng 3 chiếc và chúng thuộc loại xe có kích thước trung bình (Midsize). . . Có
thể sử dụng hàm xtabs() cũng cho kết quả tương tự nhưng nó có ưu điểm là ta có thể
67
THỰC HÀNH THỐNG KÊ KHOA HỌC SỰ SỐNG
68