Professional Documents
Culture Documents
R là một phần mềm thống kê được sử dụng để phân tích dữ liệu. Nó chứa một lượng lớn các
thủ tục thống kê chẳng hạn t-test, chi-square test, các mô hình hồi quy chuẩn, ước lượng các
biến công cụ, hồi quy đa thức địa phương,… Nó cũng cung cấp khả năng đồ họa cấp cao. Có
một số điểm tương đồng giữa ngôn ngữ lập trình C và R, nhưng cả hai đều có cách vận hành
khác nhau.
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 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ả R (Robert
Gentleman và Ross Ihaka), và một phần theo cách đặt tên của Ngôn ngữ S của Bell Labs.
Để cài đặt R trên máy tính của bạn, vào trang chủ của R: http://www.r-project.org/ và làm các
bước sau (giả sử bạn dùng hệ điều hành Windows):
- Nhấp vào download CRAN ở thanh bên trái
- Chọn một download site
- Chọn Windows như là hệ điều hành mục tiêu
- Nhấp base
- Chọn Download R 3.x.x for Windows và chọn các câu trả lời mặc định cho mọi
câu hỏi.
Cửa sổ chương trình R khi mở lên. Ta thấy nó xuất hiện cửa sổ chính là RGUI (32bit) và
một cửa sổ con trong đó là R Console (Bảng điểu khiển lệnh). Các lệnh trong R được thực
hiện qua cửa sổ R Console này.
5. Trợ giúp trong R
- Lệnh help(tên hàm), hoặc ?tên hàm : xem trang thông tin về một hàm bất kỳ trong
R
- 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ó)
Ví dụ:
Chạy thử các lệnh sau:
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
7.1. Vector
Ta có thể tạo một vector bằng cách dùng lệnh c() để nối các phần tử lại với nhau. Ta có thể
tạo một dãy bằng cách dùng lệnh symbol hoặc seq(). Ví dụ, 1:5 cho mọi số giữa 1 và 5.
Lệnh seq() cho phép ta xác định khoảng giữa các số liên tiếp. Ta cũng có thể lặp lại một
khuôn mẫu bằng cách dùng lệnh rep(). Ta cũng có thể tạo một vector số gồm các giá trị
trống bằng cách dùng numeric(), một vector ký tự các giá trị trống bằng cách dùng
character() và một vector logical các giá trị trống (tức là FALSE) bằng cách
logical()
> c(1,2,3,4,5)
[1] 1 2 3 4 5
> c("a","b","c","d","e")
[1] "a" "b" "c" "d" "e"
> c(T,F,T,F)
[1] TRUE FALSE TRUE FALSE
> 1:5
[1] 1 2 3 4 5
> 5:1
[1] 5 4 3 2 1
> seq(1,5)
[1] 1 2 3 4 5
> seq(1,5,by=.5)
[1] 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0
> rep(1,5)
[1] 1 1 1 1 1
> rep(1:2,5)
[1] 1 2 1 2 1 2 1 2 1 2
> numeric(5)
[1] 0 0 0 0 0
> logical(5)
[1] FALSE FALSE FALSE FALSE FALSE
> character(5)
[1] "" "" "" "" ""
Lệnh length() tính chiều dài của vector. last() (sfsmisc) trả về phần tử cuối cùng
của một vector nhưng điều này cũng có thể thực hiện một cách đơn giản mà không cần gói
lệnh thêm nào.
x <- seq(1,5,by=.5) # Tạo một dãy số
x # Hiển thị đối tượng này
[1] 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0
> length(x) # Nhận chiều dài của đối tượng x
[1] 9
> library(sfsmisc)
> last(x) # Chọn phần tử cuối cùng của x
[1] 5.0
> x[length(x)] # Chọn phần tử cuối cùng mà không cần gói
lệnh thêm nào.
[1] 5.0
7.2. Factor
factor() 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(). levels() 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 định danh. Một hàm quan trọng cho phân tích factor
là hàm table(). 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. Các factor định danh là các tên danh mục, ví
dụ đó có thể là tên các quốc gia kết hợp với một số thông tin khác. Một ví dụ về factor thứ
bậc là tập các lần đua của một vận động viên nào đó kèm theo vị trí hoàn thành của vận động
viên này (nhất, nhì, …). Cuối cùng, ví dụ về các factor khoảng sẽ là các khoảng tuổi như "20
- 29", "30 - 39", v.v. Nói chung, R có thể sắp thứ tự một cách tự động các số được lưu một
cách phù hợp nhưng chúng ta có thể sử dụng các kỹ thuật với loại dữ liệu này để sắp thứ bậc
theo kiểu phù hợp nhất với dữ liệu của ta.
Xem thêm is.factor(), as.factor(), is.ordered() và as.ordered().
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=10, labels = c("Male", "Female")) # generate
factor levels
[1] Male Male Female Female Male Male Female Female Male
Male
Levels: Male Female
7.3. Ma trận
Nếu ta muốn tạo một ma trận mới, một cách là sử dụng hàm matrix(). 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). Dưới đây là hai ví dụ.
matrix(data = NA, nrow = 5, ncol = 5, byrow = T)
[,1] [,2] [,3] [,4] [,5]
[1,] NA NA NA NA NA
[2,] NA NA NA NA NA
[3,] NA NA NA NA NA
[4,] NA NA NA NA NA
[5,] NA NA NA NA NA
Các hàm cbind() và rbind() kết hợp các vector thành ma trận theo cột hoặc theo hàng:
v1 <- 1:5
v2 <- 5:1
v2
[1] 5 4 3 2 1
cbind(v1,v2)
v1 v2
[1,] 1 5
[2,] 2 4
[3,] 3 3
[4,] 4 2
[5,] 5 1
rbind(v1,v2)
[,1] [,2] [,3] [,4] [,5]
v1 1 2 3 4 5
v2 5 4 3 2 1
Chiều của một ma trận có thể đạt được bằng cách dùng hàm dim(). Một cách khác là
nrow() và ncol() trả về số hàng và cột của ma trận:
Không giống data frame, các ma trận phải có dạng số hoặc ký tự:
a=matrix(2,2,2)
a
[,1] [,2]
[1,] 2 2
[2,] 2 2
a = rbind(a,c("A","A"))
a
[,1] [,2]
[1,] "2" "2"
[2,] "2" "2"
[3,] "A" "A"
7.4. Mảng
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ị.
y = array(c(T,F),dim=c(2))
print(y)
[1] TRUE FALSE
, , 2
[,1] [,2] [,3]
[1,] 10 13 16
[2,] 11 14 17
[3,] 12 15 18
, , 3
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
[,1] [,2]
[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:18,dim=c(3,3,2))
print(w)
, , 1
, , 2
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
, , 2
Một danh sách là một tập các đối tượng R. list() 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 phải cùng loại
hoặc chiều dài.
x <- c(1:4)
y <- FALSE
z <- matrix(c(1:4),nrow=2,ncol=2)
myList <- list(x,y,z)
myList
[[1]]
[1] 1 2 3 4
[[2]]
[1] FALSE
[[3]]
[,1] [,2]
[1,] 1 2
[2,] 3 4
Các danh sách có các phương pháp rất linh hoạt để tham chiếu
Theo chỉ số:
a = list()
a
list()
a[[1]] = "A"
a
[[1]]
[1] "A"
a[[2]]="B"
a
[[1]]
[1] "A"
[[2]]
[1] "B"
Theo tên:
a
list()
a$fruit = "Apple"
a
$fruit
[1] "Apple"
a$color = "green"
a
$fruit
[1] "Apple"
$color
[1] "green"
$park
[1] "green's park"
a
[[1]]
[[1]][[1]]
[1] "house"
[[1]]$address
[1] "1 main st."
$park
[1] "green's park"
Sử dụng các quy tắc phạm vi trong R người ta cũng có thể đặt tên động và tạo các phần tử
danh sách
a = list()
n = 1:10
fruit = paste("number of coconuts in bin",n)
my.number = paste("I have",10:1,"coconuts")
for (i in 1:10)a[fruit[i]] = my.number[i]
a$'number of coconuts in bin 7'
[1] "I have 4 coconuts"
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 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 kèm ký hiệu $.
v1 = 1:5
v2 = c(T,T,F,F,T)
df = data.frame(v1,v2)
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$v2
[1] TRUE TRUE FALSE FALSE TRUE
Data frame có thể được tạo một cách trực tiếp. Trong đoạn code sau, data frame được tạo
bằng cách đặt tên mỗi vector tạo nên data frame như kiểu nó là input của lệnh data.frame.
df = data.frame(foo=1:5,bar=c(T,T,F,F,T))
print(df)
foo bar
1 1 TRUE
2 2 TRUE
3 3 FALSE
4 4 FALSE
5 5 TRUE
8. Bài tập
Bài 1
Định nghĩa
> x<-c(4,2,6)
> y<-c(1,0,-1)
Đoán kết quả của các lệnh sau đây:
(a) length(x)
(b) sum(x)
(c) sum(x^2)
(d) x+y
(e) x*y
(f) x-2
(g) x^2
Dùng R để kiểm tra kết quả.
Bài 2
Đ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 3
Xác định các kết quả của các biểu thức R sau đây, và sau đó sử dụng R để kiểm tra:
(a) rep(2,4)
(b) rep(c(1,2),4)
(c) rep(c(1,2),c(4,4))
(d) rep(1:4,4)
(e) rep(1:4,rep(3,4))
Bài 4
Bài 5
Bài 6
1 4 0
y
0 1 1
Tính biểu thức sau và kiểm tra kết quả trong R:
(a) 2*x
(b) x*x
(c) x%*%x
(d) x%*%y
(e) t(y)
(f) solve(x)
Bài 8
(Sử dụng Bài 7)
Với x và y như trên, tính tác động của các phép toán subscript sau và kiểm tra trong R.
(a) x[1,]
(b) x[2,]
(c) x[,2]
(d) y[1,2]
(e) y[,2:3]
Bài 9
1. Attach dataset quakes và tạo một tóm lược thống kê về các biến depth và mag.
2. Attach dataset mtcars và tìm trọng lượng trung bình và mức tiêu thụ nhiên liệu trung
bình cho các xe trong dataset (gõ help(mtcars) để xem mô tả của các biến có sẵn).
Bài 2.
Giới thiệu về R (phần 2)
Lập trình cơ bản trong R
log(x) : logarti cơ số e
log10(x), log(x,n): logarit cơ số n
exp(x): e^x
sqrt(x): căn bậc 2 của x
factorial(x): x!
choose(n,k): tổ hợp n chập k
floor(x): giá trị nguyên <x (sàn của x)
ceiling(x): giá trị nguyên > x (trần của x)
trunc(x): làm tron tới giá trị nguyên gần nhất giữa x và 0.
round(x, digits=n): làm tròn x đến n chữ số
signif(x, digits=n): hiển thị x dưới dạn dấu chấm thập phân, n tổng chữ số hiển thị
sin(x), cos(x), tan(x)
abs(x): |x|
x %/% y: lấy phần nguyên của phép chia x/y
x %% y: lấy phần dư của phép chia x/y
2. Lệnh điều kiện:
Các phép toán so sánh: == (equal), != (not equal), >, <, >=, <=.
Các phép toán logic: & (and), | (or), ! (not), && (AND with IF), || (OR with IF).
2.1 Lệnh if-esle:
Cú pháp:
if (logical expr) {group cmd}
if (logical expr) {group cmd1} else {group cmd2}
Thường sử dụng && và || trong biểu thức điều kiện của IF.
Ví dụ:
1.
x <- c(2,4,4,5,6)
if (all(x>0)) y <- sqrt(x)
y
2.
M <- matrix(rpois(12,3),nrow=3) #Tạo ngẫu nhiên ma trận
d <- dim(M) #Tìm số hàng/số cột của ma trận
{if (d[1] == d[2])
{ cat('M is a squared matrix\n')
cat('The determinant of M is', det(M),'\n')
}
else
cat('M is not a squared matrix\n')
}
3.
#Gia he phuong trinh bac hai ax^2 + bx + c = 0 voi a≠0
delta <- b^2 - 4*a*c
if (delta < 0){
cat('Phuong trinh vo nghiem\n')
}else{
cat('Phuong trinh co nghiem:\n');
sol <- c(-b + sqrt(delta), -b + sqrt(delta))/(2*a)
}
sol
2.2 Lệnh ifelse:
Cú pháp: ifelse(test, true_value, false_value)
Ví dụ:
x <- 1:10
ifelse(x<5 | x>8,x,0)
3. Vòng lặp: Các vòng lặp thường được dùng là ‘for’ và ‘while’, ‘apply’; ít thông dụng là
vòng lặp ‘repeat’. Lệnh ‘break’ dùng để ngắt vòng lặp, ‘next’ dùng để nhảy sang bước lặp kế
tiếp.
3.1. Vòng lặp For:
Cú pháp:
for (variable in sequence) {
statements
}
Ví dụ:
1.
#Calculate and print the first 6 elements of the Fibonacci series
fib <- numeric(6)
fib[1] <- 1; fib[2] <- 1
cat('The 1st Fibonacci number is:',fib[1],'\n')
cat('The 2nd Fibonacci number is:',fib[2],'\n')
for(i in 3:6){
fib[i] <- fib[i-1] + fib[i-2]
cat('The ',i,'th Fibonacci number is:',fib[i],'\n')
}
2.
#Tinh n!
n = 10; fac <- 1
for(i in 1:n){
fac <- fac*i
}
fac
3.
#stop on condition and print error message
x <- 1:10; z <- NULL
for(i in x) {
if (x[i]<5) { z <- c(z,x[i]-1) } else { stop("values need to be <5") }
}
z
3.2. Vòng lặp While:
Cú pháp:
while (condition) statements
Vòng lặp ngừng khi điều kiện trả về giá trị FALSE.
Ví dụ:
1.
z<- 0
while (z<5) {
z <- z+2
print(z)
}
2.
#Toss a die untill a 6 is obtained
#toss <- ceiling(6*runif(1)) #ceiling function
toss <- sample(1:6,1,rep=T) #sample function
count <- 1
while (toss != 6){
#toss <- ceiling(6*runif(1))
toss <- sample(1:6,1,rep=T)
cat('Toss', count,' was a', toss,'\n')
count <- count + 1
}
cat('There was ',count-2,' tosses before the firs 6\n')
4. Script và hàm:
4.1. Script:
- Tập hợp các dòng lệnh.
- Tạo script: vào File -> New script; lưu file dưới định dạng ‘*.R’.
- Gọi lại script: > source(‘ten_script.R’) hoặc File -> Source R code rồi chọn script cần gọi.
4.2. Hàm:
- R cho phép người dùng tự viết hàm; những hàm này sử dụng tương tự như các hàm có sẵn của R
(sum, mean, var, …)
Cú pháp:
myfct <- function(arg1, arg2, …) { function_body }
myfct: tên hàm, do người dùng đặt, không đặt tên trùng với tên hàm đã có,
arg1, arg2, … : các tham số của hàm,
function_body: thân hàm, gồm các lệnh xử lý.
Giá trị trả về của 1 hàm thường là giá trị của biểu thức lệnh đặt ở cuối thân hàm, hoặc dùng lệnh
return().
Để hàm có hiệu lực, cần biên dịch hàm 1 lần trước khi sử dụng. (chọn toàn bộ hàm, chọn Run line
or selection/Ctrl + R hoặc dùn lệnh source(‘file.name.R’) trong đó file.name.R là file mà chứa hàm
bên trong).
Ví dụ:
1. Viết hàm tính sai số chuẩn,
stderr <- function(x) {# x: vecto du lieu
se <- sd(x)/length(x);
se # hoac return(se)
}
Sử dụng: trong console của R
> x <- round(rnorm(50,20,4),digit=0) #Nhap x bat ky
> stderr(x)
2. Viết hàm chuyển 1 số hệ thập phân sang nhị phân
binary <-function(x){
i<-0
string<-numeric(32)
while(x>0){
string[32-i]<-x%%2
x<-x%/% 2
i<-i+1
}
first<-match(1,string)
string[first:32]
}
Sử dụng:
#Chuyen so 59 sang dang nhi phan, gan cho bien x
> x <- binary(59)
4.3. Hàm với switch: cho phép thực hiện lệnh với nhiều lựa chọn
central<-function(y, measure){
switch(measure,
Mean = mean(y),
Geometric = exp(mean(log(y))),
Harmonic = 1/mean(1/y),
Median = median(y),
stop("Measure not included"))
}
central(rnorm(100,10,2),"Harmonic")
central(rnorm(100,10,2),4)
5. Bài tập:
1. Tạo một vec-tơ X chứa n phần tử (n: tự cho). Viết hàm tính tổng tích lũy đến vị trí thứ i của
X.
2. Thể tích hình cầu với bán kính r là: V = 4r3/3. Hãy viết hàm xây dựng 1 dataframe để tính
thể tích hình cầu với bán kính tương ứng là 3,4,5,…,20. Cột radius lưu bán kính và cột
volume lưu thể tích.
3. Trong file data01.xls, dùng lệnh if và vòng lặp for để tạo biến Index theo yêu cầu sau:
Nếu Age <=60 thì Index = 0; 60 < Age <=70 thì Index = 1; 70< Age<=80 thì Index = 2 và
Age >80 thì Index = 3.
4. File data11.xls chứa số liệu về chiều cao của 1 loại cây trồng theo bảng tần số dạng
khoảng. Thực hiện các bước sau:
a. Đọc số liệu từ data11.xls và gán vào 1 dataframe.
b. Viết một hàm tính tham số là các biến trong dataframe vừa nhập, xuất ra các giá trị sau:
chiều cao bé nhất, lớn nhất của cây, trung bình mẫu, phương sai mẫu hiệu chỉnh.
5. Cho vec-tơ X chứa n giá trị quan sát, phân vị thứ p được xác định như sau
- Sắp xếp dữ liệu theo thứ tự tăng dần (từ nhỏ đến lớn).
- Tính chỉ số i:
p
i n
100
- Nếu i không phải là số nguyên, làm tròn i. Phân vị thứ p chính là giá trị nằm ở vị trí thứ
i đã được làm tròn.
Nếu i nguyên, phân vị thứ i chính là giá trị trung bình của 2 giá trị nằm ở vị trí thứ i và
thứ i + 1.
Hãy viết hàm phanvi(X, P) cho kết quả là phân vị thứ p từ vec-tơ X.
6. Phương pháp Capture-Recapture thường được dùng để ước lượng kích cở cùa quần thể (Ví
dụ: Số cá trong một hồ). Phương pháp này được trình bày ngắn gọn như sau :
c1 R
N c2
Nên ta có thể dùng N* để ước tính kích thước quần thể :
c1c2
N*
R
Để tăng tính chính xác thì ta điều chỉnh công thức trên , để N* trở thành một ước lượng
không chệch của N
(c1 1)(c2 1)
N* 1
R 1
(c1 1)(c2 1)(c1 R)(c2 R)
var( N * )
( R 1)2 ( R 2)
Vậy khoảng tin cậy 95% của kích cở quần thể là
N 1.96
*
var( N * ) , N * 1.96 var( N * )
Hãy viết hàm mô phỏng phương pháp trên, hàm nay có:
Input : Kích cỡ thât sự của quần thê , số cá thể lấy lần 1 , số cá thể lấy lần 2
Output: Kích cở quần thể được ước tính bằng phương pháp C-R, Khoảng tin cậy 95%
Bài 3.
Biến ngẫu nhiên
1. Tính toán
Ví dụ 1
2 2
với và 0 là hai tham số. Viết hàm pdf của X để tính giá trị f(x) tại một điểm bất kỳ.
Giải:
a)
k = 0:8;
p = function(k) choose(8,k) * 0.3^k * 0.7^(8-k);
p(k)
[1] 0.05764801 0.19765032 0.29647548 0.25412184 0.13613670
0.04667544
[7] 0.01000188 0.00122472 0.00006561
Ta có thể kiểm tra lại rằng tổng các xác suất bằng 1 với lệnh
sum(p(k))
[1] 1
b)
f = function(x, mu=0, sigma=1){
1/sqrt(2*pi*sigma^2) * exp(-(x-mu)^2/(2*sigma^2))
}
a) Vẽ đồ thị hàm xác suất trong Ví dụ 1a): P( X k ) C8k 0.3k 0.78k với k 0,1,,8 .
(x )2
1
b) Vẽ hàm mật độ xác suất trong Ví dụ 1b): f (x) e 2 2
, x
22
Giải:
a)
plot(k, p(k), type = "h", ylab = "P(X = x)")
0.30
0.25
0.20
P(X = x)
0.15
0.10
0.05
0.00
0 2 4 6 8
b)
curve(f(x,0,1),from=-3,to=3, ylab = "fX(x)")
0.4
0.3
fX(x)
0.2
0.1
0.0
-3 -2 -1 0 1 2 3
* X liên tục,
x
FX (x)
f X (t)dt
Ví dụ 3
4
a) Xét tiếp Ví dụ 1a). Tính FX (4) P( X 4) P( X k ) .
k 0
2
1.96
1 x2
b) Xét tiếp Ví dụ 1b). Tính FX (1.96) P( X 1.96)
2
e dx .
Giải:
a)
F = function(k) sum(p(0:k))
F = Vectorize(F)
F(4)
[1] 0.9420323
b)
F2 = function(a,mu = 0, sigma = 1){
integrate(function(x) f(x,mu,sigma), lower = -Inf, upper =
a)$value
}
F2 = Vectorize(F2)
F2(1.96)
0.9750021
3.3 Vẽ đồ thị
Ví dụ 4
0.4
0.2
0.0
0 2 4 6 8
b)
curve(F2(x), from = -3, to = 3, ylab = "FX(x)")
1.0
0.8
0.6
FX(x)
0.4
0.2
0.0
-3 -2 -1 0 1 2 3
4. Phân vị
4.1 Định nghĩa
Cho p (0,1) và X là một biến ngẫu nhiên.
* Nếu X rời rạc, thì phân vị mức p của X , ký hiệu là x p , là
x p inf{k ; FX (k) p}
* Nếu X liên tục, thì phân vị mức p của X , ký hiệu là x p , là giá trị thỏa FX (x p ) p .
b)
uniroot(function(x) F2(x)-0.975, c(-3,3))$root
[1] 1.959992
Ta nhận được các kết quả khác nhau; thứ tự của hoán vị thay đổi mỗi lần chạy.
Ta có thể giữ lại kết quả của một phép hoán vị trong một vector để sử dụng sau này:
y = sample (c ("red", "green", "blue", "white", "black"))
y
[1] "black" "white" "green" "red," "blue"
Ví dụ:
sample(1:3, size = 2, replace = TRUE, prob = c(25 / 100, 20 / 100,
55 / 100))
Các tùy chọn được trình bày bên dưới
a) Size (cỡ mẫu): size = "n", với n là một số nguyên, xác định số lần n ta thực hiện rút ra.
Mặc định, số được rút ra bằng chiều dài x.
sample(1:10, size = 3)
[1] 10 7 3
Trong cú pháp sample, tham biến size là thứ hai. Ta có thể viết tắt như sau :
sample(1:10, 3).
b) Replace (hoàn lại): replace = L, với L là TRUE hoặc FALSE, trong đó rút có thay thế
(hoàn lại) nếu L = TRUE và không hoàn lại nếu khác.
Ta làm :
sample(1:5, size = 9, replace = TRUE)
[1] 5 1 4 1 3 1 2 1 3
c) Prob (xác suất : Tham biến prob cho phép ta gán các giá trị xác suất cho từng giá trị trong
vector x.
k
P(X x j ) p j , j {1, , k}, p j [0,1], p j 1.
j1
Do đó, prob = vec, với vec là vector chứa các xác suất ( p1 ,, pk ) .
Nếu prob không được xác định, mặc định p j 1/ k (các giá trị bằng nhau).
Ta làm:
y = c ("red", "green", "blue", "white", "black")
sample(y, 2, prob = c(10 / 100, 30 / 100, 10 / 100, 30 / 100, 20 /
100))
[1] "red" "green"
Bài tập
Bài 1
1. Biến ngẫu nhiên P, nhận các giá trị giữa 0 và 1, có hàm mật độ xác suất f P ( p) 0.07 p 0.93 .
a) Tính xác suất P(P ≤ 0.2) bằng cách sử dụng hàm: 1) f=function(p){.07*p**(-0.93)}, và 2)
integrate(f,lower=0,upper=.2).
b) Kiểm tra f P ( p) là hàm mật độ xác suất bằng cách tính diện tích dưới đường cong từ 0 đến
1.
Bài 2
2. Mật độ
2.1 Định nghĩa
* Với biến ngẫu nhiên X rời rạc, “mật độ” của X tại x là xác suất P( X x) .
* Với biến ngẫu nhiên X có hàm mật độ f X , “mật độ” của X tại x là f X ( x) .
2.2 Lệnh
Nếu phân phối của X phụ thuộc vào một hoặc nhiều tham số, tham1 và tham2, thì mật độ
của X tại x được cho bởi lệnh:
dluật(x, tham1, tham2)
Dưới đây là một số ví dụ:
Ví dụ 1
8
a) Cho biến ngẫu nhiên X ~ B(8,0.3) . Tính P( X 4) 0.34 (1 0.7)84 .
4
b) Cho biến ngẫu nhiên X ~ N (2,0.12 ) . Tính hàm mật độ của X tại x 1.7 :
2
(1.7 2)2
1
f (1.7) e 20.122
, x
2 0.12 2
Giải:
a)
Ta làm:
dbinom(4, 8, 0.3)
[1] 0.1361
Kiểm tra lại bằng lệnh:
choose(8, 4) * 0.3^4 *(1- 0.3)^(8 - 4)
[1] 0.1361
b)
dnorm(1.7, 2, 0.12)
[1] 0.1460692
Kiểm tra lại bằng lệnh:
(1 / sqrt(2 * pi * 0.12^2)) * exp(- (1.7 - 2)^2 / (2 * 0.12^2))
[1] 0.1460692
Để tính toán mật độ tại nhiều giá trị, ta nhập x là vector có các giá trị này. Ta cũng có thể làm
tương tự cho một tập các tham số.
Ví dụ 2
(b) Ta làm :
dexp(2, c(1, 2, 3))
[1] 0.135335283 0.036631278 0.007436257
Ta cũng có thể lưu kết quả vào một vector để sử dụng sau này.
Ta làm :
vec = dexp(2, c(1, 2, 3))
vec
[1] 0.135335283 0.036631278 0.007436257
2.4. Biểu diễn bằng đồ thị
Ta có thể biểu diễn đồ thị của hàm xác suất của biến rời rạc X với lệnh plot và tùy chọn
type=h.
Ví dụ 3
0.15
0.10
0.05
0.00
0 2 4 6 8
0:8
b)
curve(dnorm(x,2,0.12),from=1.5,to=2.5, ylab = "fX(x)")
3.0
2.5
2.0
fX(x)
1.5
1.0
0.5
0.0
* X liên tục,
x
FX (x) f
X (t)dt
3.2 Lệnh
Nếu phân phối của X phụ thuộc vào một hoặc nhiều tham số, tham1 và tham2, thì hàm
phân phối của X tại x được cho bởi lệnh:
pluật(x, tham1, tham2)
Có thể tính: P( X x) 1 FX ( x) , bằng lệnh:
pluật(x, tham1, tham2, lower.tail = FALSE)
Ví dụ 4
4
a) Xét tiếp Ví dụ 1a). Tính FX (4) P( X 4) P( X k ) .
k 0
2.1 ( x 2)2
1
b) Xét tiếp Ví dụ 1b). Tính FX (2.1) P( X 2.1)
2 0.12 2
e 20.122
dx .
c) Tính P( X 2) , X ~ E (3) .
Giải:
a)
pbinom(4, 8, 0.3)
[1] 0.9420324
b)
pnorm(2.1, 2, 0.12)
[1] 0.7976716
c)
pexp(2, 3, lower.tail = FALSE)
[1] 0.002478752
0.4
0.2
0.0
0 2 4 6 8
b)
curve(pnorm(x, 2, 0.12), from = 1.5, to = 2.5, ylab = "FX(x)")
1.0
0.8
0.6
FX(x)
0.4
0.2
0.0
4. Phân vị
4.1 Định nghĩa
Cho p (0,1) và X là một biến ngẫu nhiên.
* Nếu X rời rạc, thì phân vị mức p của X , ký hiệu là x p , là
x p inf{k ; FX (k) p}
* Nếu X liên tục, thì phân vị mức p của X , ký hiệu là x p , là giá trị thỏa FX (x p ) p .
4.2 Lệnh
Nếu phân phối của X phụ thuộc vào một hoặc nhiều tham số, tham1 và tham2, thì phân vị
mức p của X được cho bởi lệnh:
qluật(x, tham1, tham2)
b)
qnorm(0.975, 2, 0.12)
[1] 2.235196
Như vậy, ta đã tính được phân vị mức p 0.975 của biến X ~ N (2,0.12) : là x0.975 sao cho
FX ( x0.975 ) 0.975 .
Kiểm tra lại bằng lệnh
pnorm(2.235196, 2, 0.12)
[1] 0.9750002
a) Mô phỏng một mẫu ngẫu nhiên cỡ 10 của phân phối Poisson P(2) .
80
b) Mô phỏng giá trị ngẫu nhiên của biến X
i 1
i , X1 ,, X 80 là các biến ngẫu nhiên độc lập
b)
sum(rbinom(80, 1, 0.02))
[1] 3
80
Bởi vì X
i 1
i ~ B(80, 0.02) , nên ta có thể dùng lệnh sau để mô phỏng biến Y ~ B(80,0.02) :
c)
x = rnorm(15, 2, 0.12)
x
[1] 2.021767 1.898343 2.072553 1.974686 2.044200 2.050094
[7] 2.063342 2.000698 1.702115 1.958284 1.984903 1.897726
[13] 2.011624 2.074341 1.720218
6. Bài tập
Bài 1
Vẽ một biểu đồ cột của hàm xác suất của phân phối siêu bội với N = 100, M = 25 và cỡ mẫu
n = 15.
Bài 2
Nếu X có phân phối như trên, đầu tiên tính P(5 ≤ X ≤ 12) bằng cách lấy tổng các xác suất
được cho bởi hàm xác suất,và sau đó bằng cách sử dụng hàm phân phối tích lũy.
Bài 3
a) Sử dụng lệnh curve(dexp(x,0.6),0,10) để vẽ hàm mật độ xác suất của phân phối mũ
với tham số λ = 0.6.
b) Đối với đồ thị nhận được bạn vẽ thêm hàm mật độ xác suất của phân phối mũ với tham số
λ = 0.3 (đảm bảo bạn thêm add=T trong lệnh curve).
c) Sử dụng hàm phân phối tích lũy để tính diện tích bên dưới của hai hàm mật độ.
Bài 4
Bài 5
Vẽ đồ thị hàm mật độ xác suất của biến X ~ 2 (3) với x [0,10] .
Bài 6
Chia cửa sổ đồ thị thành hai phần trên và dưới.
- Trong phần trên, vẽ đồ thị của hàm xác suất của biến X ~ B(50,0.08) lấy
ylim=c(0,0.25).
- Trong phần dưới, vẽ đồ thị của hàm xác suất của biến X ~ P(4) với x {0,,50} với cùng
lựa chọn: ylim=c(0,0.25).
(Điều này minh họa kết quả là khi n đủ lớn và np đủ nhỏ ta có thể xấp xỉ phân phối nhị thực
B(n, p) bằng luật Poisson P(np) ).
Bài 7
Vẽ đồ thị của hàm mật độ của biến X ~ B(50,0.4) và thêm vào đồ thị này hàm mật độ của
biến Y ~ N (20,12) (điều này minh họa kết quả rằng khi n lớn, np lớn và n(1-p) lớn, ta có thể
xấp xỉ phân phối nhị thức B(n, p) bằng phân phối chuẩn N (np, np(1 p)) ).
Bài 5.
Phân phối mẫu và định lý giới hạn trung tâm
Đầu tiên ta mô phỏng cho phân phối của trung bình mẫu X :
Đối với mẫu ngẫu nhiên lấy từ phân phối chuẩn, ta thành lập mẫu ngẫu nhiên kích thước n
(xem hàm rnorm(n,mu,sigma)),
mu <- 2
sigma <- 2
Y <- function() rnorm(1,mu,sigma)
Y()
[1] 4.298447
vecY <- function(n) replicate(n,Y())
n=4
vecY(n)
[1] 3.298608 3.804107 3.272638 2.029872
vecY(n)
[1] 0.3444242 1.7142771 2.5943892 3.1046964
và ta có phân phối trung bình mẫu ngẫu nhiên kích thước n như sau
MeanY <- function() mean(vecY(n))
MeanY()
[1] 2.268478
SampleMeanY <- function(m) replicate(m,MeanY())
m=10000
hist(SampleMeanY(m),freq=0,breaks=40)
curve(dnorm(x,mu,sigma/sqrt(n)),col="blue",lty=1,lwd=2,add=TRUE)
n 1S2X
và ta có mô phỏng tương tự cho phân phối của 2
,
mu<-2
sigma<-2
n<-10
Z<-function() {
x<-rnorm(n,mu,sigma)
(n-1)*var(x)/sigma^2
}
Z()
[1] 2.074494
Z()
[1] 23.87044
vecZ<-function(m) replicate(m,Z())
hist(vecZ(1000),freq=0,breaks=40)
curve(dchisq(x,df=n-1),col="blue",lty=1,lwd=2,add=TRUE)
hist(vecZ(10000),freq=0,breaks=40)
curve(dchisq(x,df=n-1),col="blue",lty=1,lwd=2,add=TRUE)
n=10000
hist(Y(m),freq=0,breaks=40)
curve(dnorm(x),col="blue",lty=1,lwd=2,add=TRUE)
n=100000
hist(Y(m),freq=0,breaks=40)
curve(dnorm(x),col="blue",lty=1,lwd=2,add=TRUE)
và mô phỏng cho
Định lý. Xét mẫu ngẫu nhiên X1 , X2 , , Xn lấy từ một phân phối Bernoulli B 1; p . Ta có
các biến ngẫu nhiên f p n
p1 p
và f p n
f 1 f
có phân phối xấp xỉ với phân phối chuẩn N 0;1 .
bằng cách phát sinh m 1.000 mẫu ngẫu nhiên kích thước n 100 lấy từ phân phối
Bernoulli B 1;0,3 . Ứng với mỗi mẫu ngẫu nhiên, tính giá trị Y p 1p để nhận được mẫu
f p n
ngẫu nhiên kích thước m cho Y và so sánh với phân phối chuẩn N 0,1 .
prob=0.3
Y<-function(n) {
x<-rbinom(n,1,prob)
(mean(x)-prob)*sqrt(n)/sqrt(prob*(1-prob))
}
vecY<-function(m) replicate(m,Y(n))
n=100
m=1000
hist(vecY(m),freq=0,breaks=40)
curve(dnorm(x),col="blue",lty=1,lwd=2,add=TRUE)
Tương tự, ứng với mỗi mẫu ngẫu nhiên, tính giá trị Z f 1f để nhận được mẫu ngẫu nhiên
f p n
kích thước m cho Z và ta cũng so sánh histogram của mẫu này so với phân phối chuẩn
N 0,1 .
Z<-function(n) {
x<-rbinom(n,1,prob)
(mean(x)-prob)*sqrt(n)/sqrt(mean(x)*(1-mean(x)))
}
vecZ<-function(m) replicate(m,Z(n))
hist(vecZ(m),freq=0,breaks=40)
curve(dnorm(x),col="blue",lty=1,lwd=2,add=TRUE)
5.3. Bài tập
Bài 1. Cho X1 , X 2 là mẫu ngẫu nhiên kích thước 2 lấy từ phân phối chuẩn N 0;1 . Dùng
hàm rnorm() phát sinh X1 , X 2 và Y X12 X22 . Xây dựng hàm MauY phát sinh mẫu ngẫu nhiên
kích thước n cho Y. Lần lượt phát sinh mẫu ngẫu nhiên kích thước 100, 1000, 10000 cho Y,
vẽ biểu đồ tần suất và đồ thị hàm mật độ xác suất của phân phối Chi-bình phương với 2 bậc
tự do cho từng trường hợp. Liên hệ với lý thuyết mẫu.
Bài 6:
Lý thuyết mẫu
a) Working directory
Trước khi nhập dữ liệu ta nên thiết lập thư mục làm việc. Đây là thư mục chứa những thứ
mà ta muốn tương tác với R (như file dữ liệu, code script R, hình ảnh, đồ thị,
package,…).
- Để thiết lập thư mục làm việc, ví dụ ở ổ D, thư mục Works
> setwd('D:/Works')
hoặc vào File -> Change dir
- Xem thư mục hiện hành
> getwd()
- Liệt kê tất cả file trong thư mục làm việc
> list.files() hoặc > dir()
b) Workspace
Từ khi mở R (cửa sổ R console xuất hiện) cho đến khi tắt R là một phiên làm việc.
Những đối tượng ta tạo ra trong một phiên làm việc được R lưu trong Workspace. Ta có
thể lưu lại mọi thứ trong Workspace này để tiếp tục công việc đang làm của ta ở một thời
điểm khác.
- Lưu Workspace
> save.image('ten_file.rda')
- Tải Workspace đã lưu
> load('ten_file.rda')
- Lưu biến đang làm việc, chẳng hạn biến x
> save(x, file=’ten_file.rda’)
- Khôi phục biến x
> load(‘ten_file.rda’), ten_file.rda là file chứa biến x vừa lưu ở trên.
- Xóa 1 biến ra khỏi Workspace
> rm(x)
- Xóa tất cả
> rm(list=ls())
- Liệt kê tất cả những biến trong Workspace
> ls()
- Xem thông tin của 1 biến
> str(x)
- Xem thông tin của tất cả biến đang làm việc
> ls.str()
c) Nhập dữ liệu
1.2. Xử lý dữ liệu
Lệnh: save()
VD: save(data frame, file= “data.rda”)
- Sao chép 1 vector trong R vào clipboard sau đó dán vào Excel.
writeClipboard(x), trong đó x là 1 vector dạng ký tự (character)
Ví dụ:
writeClipboard(as.character(factor.name))
Ví dụ:
writeClipboard(as.character(numeric.variable))
- Sao chép 1 data frame trong R vào clipboard sau đó dán vào Excel.
write.table(data,"clipboard",sep="\t",col.names=NA)
- Lưu trực tiếp một data frame trong R thành 1 file Excel
Hàm write.xlsx() trong package xlsx có thể được dùng để lưu một data frame R
thành một workbook Excel 2007.
library(xlsx)
write.xlsx(x , outfile , col.Names=TRUE, row.names=TRUE,
sheetName="Sheet 1", append=FALSE)
Ví dụ:
library(xlsx)
write.xlsx(mydata, "mydata.xlsx")
xuất data frame mydata vào một worksheet (Sheet 1 theo mặc định) trong một work-
book Excel được đặt tên là mydata.xlsx trong thư mục làm việc hiện tại. Mặc định, các
tên biến trong dataset được dùng để tạo tiêu đề cột trong spreadsheet (bảng tính) và các
tên hàng được đặt trong cột đầu tiên của bảng tính. Nếu mydata.xlsx đã có, nó sẽ bị
ghi đè. Nếu cần lưu ở một thư mục khác thì cho đường dẫn vào. Ví dụ,
write.xlsx(mydata, "D:/mydata.xlsx") hoặc write.xlsx(mydata,
"D:\\mydata.xlsx")
Hàm write.table() dùng để lưu một đối tượng trong R vào 1 file text
write.table(x, outfile , sep=delimiter, quote=TRUE, na="NA")
trong đó
x là đối tượng cần lưu lại
outfile là file chứa đối tượng.
Ví dụ:
write.table(mydata, "mydata.txt", sep=",")
sẽ lưu dataset mydata vào 1 file được phân cách bởi dấu phẩy đặt tên là mydata.txt trong
thứ mực làm việc hiện tại. Chỉ rõ đường dẫn (ví dụ, “d:/myprojects/mydata.txt”)
để lưu file output ở nơi khác. Thay sep="," bằng sep="\t" sẽ lưu dữ liệu trong một
file được phân cách bởi dấu tab. Mặc định, các chuỗi được đặt trong dấu nháy kép (“”) và
các giá trị khuyết được viết là NA.
3. Vẽ đồ thị một số phân phối thông dụng: (nhị thức, poisson, đều, mũ, chuẩn)
4. Bài tập:
2 Nhập số liệu từ file data01.xls bằng lệnh read.csv( ) (chuyển file .xls -> .csv) gán vào
frame data1. Thực hiện:
a. Tính trung bình, phương sai, trung vị của các biến FPSA và TPSA.
b. Vẽ biểu đồ dạng đường, boxplot cho FPSA và TPSA.
c. Tách những giá trị của biến FPSA có K=0 và K=1.
d. Đọc số liệu từ file data02.csv gán vào frame data2, merge 2 frame này theo biến
K.
e. Tạo biến mới tPSA theo yêu cầu sau: Nếu tuổi <= 30, tPSA=0; nếu 30< tuổi
<=50, tPSA=1; nếu tuổi>50, tPSA =2. Tạo bảng thống kê cho tPSA.
3 Bảng sau là điểm một bài kiểm tra gồm 3 câu hỏi của 10 SV
4
a. Tạo ngẫu nhiên 100 giá trị có phân phối nhị thức, với n = 60 và xác suất thành
công mỗi lần 0.4. Vẽ biểu đồ tổ chức tần số.
b. Tạo ngẫu nhiên 100 giá trị có phân phối Poisson với lambda = 4, vẽ biểu đồ tổ
chức tần số.
c. Tạo ngẫu nhiên 100 giá trị có phân phối chuẩn có trung bình là 50 và độ lệch tiêu
chuẩn 4. Vẽ hàm phân phối, hàm mật độ.
d. Tạo ngẫu nhiên 100 giá trị có phân phối mũ với lambda=1/25. Vẽ hàm phân phối,
hàm mật độ.
5 File diesel_engine.dat và diesel_time.xls chứa số liệu về hoạt động của các động cơ
chạy bằng dầu diesel. Thực hiện:
a. Đọc số liệu từ hai file này, gán và hai dataframe, đặt tên hai dataframe cùng tên với
file.
b. Liệt kê tên các biến có trong hai dataframe vừa nhập.
c. Xác định có bao nhiêu dữ liệu bị khuyết (missing data) trong diesel_engine. Thay
thế các giá trị khuyết trong biến speed bằng 1500, biến load bằng 20.
d. Tính: trung bình, phương sai, độ lệch tiêu chuẩn, giá trị lớn nhất, nhỏ nhất của biến
alcohol trong dataframe diesel_engine.
e. Ghép hai dataframe diesel_engine và diesel_time lại thành một frame có tên là
diesel.
f. Trích giá trị của biến run (số thứ tự các động cơ) mà có thời gian trễ (biến delay)
dưới 1.000.
g. Đếm xem có bao nhiêu động cơ có timing bằng 30.
h. Vẽ biểu đồ boxplot cho các biến speed, timing và delay.
i. Vẽ biểu đồ phân tán cho các cặp biến (timing, speed), (temp, press).
j. Chuyển biến load sang biến nhân tố.
k. Chia phạm vi giá trị của biến delay thành 4 đoạn đều nhau và đếm số giá trị nằm
trong các đoạn đó. Tạo bảng thống kê và vẽ biểu đồ cột.
l. Chia phạm vi giá trị của biến delay thành 4 đoạn như sau: (0.283, 0.7], (0.7, 0.95],
(0.95, 1.2], (1.2, 1.56]. Tạo bảng thống kê và vẽ biểu đồ cột.
8 Thống kê số liệu tỉ lệ lạm phát tại 4 nước trong giai đọan 1960-1980 được thu thập
trong 2 bảng số liệu sau (Đvt: %)
Nam US Anh Nam Nhat Duc
1960 1.5 1 1960 3.6 1.5
1961 1.1 3.4 1961 5.4 2.3
1962 1.1 4.5 1962 6.7 4.5
1963 1.2 2.5 1963 7.7 3
1964 1.4 3.9 1964 3.9 2.3
1965 1.6 4.6 1965 6.5 3.4
1966 2.8 3.7 1966 6 3.5
1967 2.8 2.4 1967 4 1.5
1968 4.2 4.8 1968 5.5 18
1969 5 5.2 1969 5.1 2.6
1970 5.9 6.5 1970 7.6 3.7
1971 4.3 9.5 1971 6.3 5.3
1972 3.6 6.8 1972 4.9 5.4
1973 6.2 8.4 1973 12 7
1974 10.9 16 1974 24.6 7
1975 9.2 24.2 1975 11.7 5.9
1976 5.8 16.5 1976 9.3 4.5
1977 6.4 15.9 1977 8.1 3.7
1978 7.6 8.3 1978 3.8 2.7
1979 11.4 13.4 1979 3.6 4.1
1980 13.6 18 1980 8 5.5
a. Nhập dữ liệu trên vào 2 data.frame lamphat1 và lamphat2 trong R bằng 3 cách.
b. Trộn 2 data.frame trên vào 1 data.frame duy nhất là lamphat theo Nam.
c. Đếm số năm các nước US, Anh, Nhật, Đức có tỉ lệ lạm phát trên 5%.
d. Vẽ đồ thị phân tán về tỉ lệ lạm phát cho mỗi quốc gia theo thời gian. Cho nhận xét
tổng quát về lạm phát của 4 nước?
e. Tính trung bình, trung vị, Max, Min, độ lệch chuẩn, sai số chuẩn của từng nước?
f. Để xác định lạm phát nước nào biến thiên nhiều hơn, ta cần dựa vào tham số
thống kê nào? Kết luận?
g. Tạo một data.frame mới lamphat1 với số biến như trong data.frame lamphat
nhưng không chứa dữ liệu của năm 1980.
h. Ta biết rằng hệ số của phương trình hồi quy tuyến tính ̂ ̂ ̂ ̂ được xác
định như sau:
∑ ̅̅
̂
∑ ̅
̂ ̅ ̂ ̅
Xác định các hệ số này trong mô hình hồi quy: lạm phát theo thời gian cho US
bằng cách sử dụng data.frame lamphat1. Vẽ đồ thị phương trình hồi quy này?
i. Sử dụng phương trình hồi quy trong câu h) hãy xác định tỉ lệ lạm phát trong năm
1980 của US. So sánh với số liệu thực tế?
Bài 7.
Ước lượng tham số thống kê
Trong nội dung bài thực hành, chúng ta chỉ xét bài toán ước lượng khoảng (tìm khoảng tin cậy)
cho tỷ lệ và kỳ vọng.
- Dung sai:
- Công thức tính dung sai: phụ thuộc vào 3 trường hợp
TH1: đã biết, tổng thể có phân phối chuẩn (nếu n 30 thì giả thiết tổng thể có phân phối
chuẩn là không còn cần thiết)
TH2: không biết và n 30 .
TH3: không biết và n 30 kèm theo tổng thể có phân phối chuẩn (khi cỡ mẫu nhỏ hơn 30 thì
cần tới giả thiết tổng thể có phân phối chuẩn)
z1 /2 , TH1
n
s
z1 /2 , TH2
n
n 1
t1 /2 , TH3
n
- Tỷ lệ mẫu: p̂
1
pˆ (1 pˆ )
- Dung sai: z1 /2
n
- Công thức tính khoảng tin cậy:
Khoảng tin cậy = tỷ lệ mẫu dung sai
I.3 Ý nghĩa của khoảng tin cậy 95% cho tham số cần ước lượng (trung bình / tỷ lệ)
Nếu chúng ta lấy mẫu nhiều lần, mỗi mẫu chúng ta tính 1 khoảng tin cậy thì sẽ có xấp xỉ 95%
khoảng tin cậy chứa tham số cần ước lượng.
Ví dụ: đoạn chương trình sau mô phỏng 50 khoảng tin cậy cho tỷ lệ xuất hiện mặt sấp khi tung
một đồng xu cân đối
> m = 50; n=30; p = .5; alpha = 0.05 # Tung 30 đồng xu cân đối 50 lần
> p.hat = rbinom(m,n,p)/n # Tính tỷ lệ mẫu
> epsilon = qnorm(1-alpha/2)*sqrt(p.hat*(1-p.hat)/n)
# Dung sai
> matplot(rbind(p.hat - epsilon, p.hat + epsilon),
rbind(1:m,1:m),type="l",lty=1,
xlab = "Vi tri cac khoang tin cay",
ylab = "50 khoang tin cay")
# Ve 50 khoang tin cay
> abline(v=p) # Ve duong thang p = 0.5
Chú thích: hàm matplot(x,y,…) ở trên cho phép ta vẽ m đoạn thẳng, đoạn thẳng thứ i có 2
hoành độ ( của điểm đầu và điểm cuối) nằm trong cột i của ma trận x; và có 2 tung độ bằng nhau
là i nằm trong cột i của ma trận y.
Kết quả nhận được:
50
40
50 khoang tin cay
30
20
10
0
2
II. Bài tập
1. Tạo ngẫu nhiên 35 giá trị của biến ngẫu nhiên có phân phối chuẩn với trung bình bằng
10 và độ lệch chuẩn 5. Tìm khoảng tin cậy 95% cho kỳ vọng của biến ngẫu nhiên chuẩn
dựa vào số liệu vừa tạo.
2. Số liệu thống kê về doanh số bán hàng của một siêu thị cho ở file data31.xls:
a) Đọc dữ liệu từ file data31.xls vào R.
b) Viết hàm ci.mean(x, alpha) xuất ra khoảng tin cậy cho kỳ vọng, với x là vec-tơ
dữ liệu, (1-alpha) là độ tin cậy. Áp dụng để tìm khoảng tin cậy 95% và 99% cho
doanh số bán hàng trung bình ở siêu thị.
3. File data32.xls chứa số liệu về thời gian tự học của 120 sinh viên trường ĐH Khoa học
Tự nhiên.
a. Hãy ước lượng thời gian học nhóm trung bình của sinh viên trường ĐH KHTN, độ
tin cậy là 95%. (Dùng hàm ci.mean(x, alpha))
b. Viết hàm hàm ci.prop(f, n, alpha) xuất ra khoảng tin cậy cho tỷ lệ, với n là cỡ
mẫu; f: số các phần tử thỏa yêu cầu (với tỷ lệ p cần tìm); (1-alpha) là độ tin cậy.
Áp dụng để tìm khoảng tin cậy 90%; 95% và 99% cho tỷ lệ sinh viên có thời gian
tự học trên 5 giờ mỗi ngày.
4. Bảng sau thống kê chiều cao (Đv: m) của 125 thanh niên 18 tuổi trong một khu vực:
Chiều cao [1.2,1.4) [1.4,1.6) [1.6,1.8) [1.8,2.0) [2.0,2.2)
Số thanh niên 6 34 31 42 12
a. Chuyển bảng tần số dạng khoảng ở trên thành dữ liệu dạng véc-tơ cột. Áp dụng
hàm ci.mean đã ở bài 2 để tìm khoảng tin cậy 95% cho chiều cao trung bình của
thanh niên trong khu vực.
b. Những người có chiều cao từ 1.7 m trở lên được xếp vào sức khỏa loại A. Sử dụng
hàm ci.prop ở bài 3 để tìm khoảng tin cậy 95% cho tỷ lệ thanh niên đạt sức khoẻ
loại A.
5. Viết hàm ktc.tb() để tìm khoảng tin cậy cho trung bình biết:
- Input: là trung bình mẫu ̅ , độ lệch chuẩn của tổng thể (có thể biết trước hoặc không),
trường hợp không biết thì phải nhập độ lệch chuẩn của mẫu s, kích thước mẫu n, và
mức ý nghĩa .
- Output: khoảng tin cậy cho trung bình.
3
6. Từ hàm được viết trong câu 5) hãy viết hàm ktc.tb.mau() để tìm khoảng tin cậy cho
trung bình biết:
- Input: vecto dữ liệu mẫu x, độ lệch chuẩn của tổng thể (có thể biết trước hoặc không),
và mức ý nghĩa .
- Output: khoảng tin cậy cho trung bình.
7. Đo đường kính của một chi tiết máy do một máy tiện tự động sản xuất, ta ghi nhận
được số liệu như sau:
X 12.00 12.05 12.10 12.15 12.20 12.25 12.30 12.35 12.40
n 2 3 7 9 10 8 6 5 3
Bằng cách sử dụng hàm ktc.tb.mau() trong câu 6), hãy ước lượng khoảng tin cậy 95% cho
đường kính trung bình.
4
Bài 8.
I. Giới thiệu
1. Định nghĩa một giả thuyết thống kê (statistical hypothesis) là một phát biểu (tuyên bố) về các
tham số của một hay nhiều tổng thể.
Ví dụ: Giả sử ta cần nghiên cứu về thu nhập của người dân thành phố, gọi μ là thu nhập trung
bình, ta cần xác định xem thu nhập trung bình của một người dân có bằng 7 triệu đồng/tháng hay
không? Giả thuyết được phát biểu như sau
H0: μ = 7 triệu/tháng
H1: μ ≠ 7 triệu/tháng
Phát biểu H0: μ = 7 gọi là giả thuyết không (null hypothesis), phát biểu H1: μ ≠ 7 gọi là đối
thuyết (alternative hypothesis). Bài toán kiểm định giả thuyết như trên gọi là kiểm định giả
thuyết hai phía. Trong một số trường hợp, ta có bài toán kiểm định giả thuyết một phía, chẳng
hạn như
H0 : 7 H0 : 7
hoặc
H1 : 7 H1 : 7
Tổng quát, xét biến ngẫu nhiên X có phân phối F x; , tham số chưa biết. Với một giá trị
0 cho trước, bài toán kiểm định giả thuyết cho tham số gồm các dạng sau
H 0 : 0 H 0 : 0 H 0 : 0
H1 : 0 H1 : 0 H1 : 0
1
3. P – giá trị (P – value) Với một giả thuyết không H0 và mẫu cỡ n cho trước, P – giá trị là mức
ý nghĩa nhỏ nhất dẫn đến việc bác bỏ giả thuyết H0, P – giá trị được tính dựa theo giá trị thống kê
kiểm định.
II. Kiểm định giả thuyết cho kỳ vọng
(Trong thực hành, ta chỉ xét trường hợp không biết phương sai)
Giả thuyết: mẫu ngẫu nhiên X1 , X 2 ,, X n được chọn từ tổng thể có phân phối chuẩn (hoặc xấp
xỉ chuẩn tức phân phối có dạng đối xứng) với kỳ vọng và phương sai 2 .
0
Giả thuyết: H 0 : 0 Đối thuyết: H1 : 0 (Một trong 3 trường hợp)
0
X 0
T0
s n
Miền bác bỏ:
Với H1 : 0 bác bỏ H0 nếu T0 t1n1/2 hoặc T0 t1n1/ 2
Với H1 : 0 bác bỏ H0 nếu T0 t1n1
Với H1 : 0 bác bỏ H0 nếu T0 t1n1
n ( X 0 ) / s
Miền bác bỏ trong trường hợp kiểm định giả thuyết hai phía
2
Trong kết quả do R xuất ra, ta xác định có bác bỏ H 0 hay không thông qua P – giá trị:
Khi cỡ mẫu n lớn, phân phối của thống kê T0 sẽ trở thành phân phối chuẩn hoá N(0,1), khi đó
giá trị tiêu chuẩn dùng để so sánh là z1 / 2 (dùng qnorm(1-alpha/2) ) .
0 0 2P{Tn1 | T0 |}
X 0
0 0 n P{Tn1 T0 }
s
0 0 P{Tn1 T0 }
Trong R, để tính P Tn1 t0 sử dụng hàm pt(t0, n – 1); nếu muốn tính P Tn1 t0 , sử
dụng pt(t0, n – 1, lower.tail = FALSE).
Trong đó:
- x : véc-tơ dữ liệu
- alternative : xác định kiểm định là hai phía (“two.sided”), bên trái (“less”)
hay bên phải (“greater”), mặc định là two.sided.
- mu = mu_0 : giá trị cần kiểm định
- conf.level : xuất ra khoảng tin cậy với độ tin cậy tương ứng
Ví dụ: Biến heights chứa chiều cao của 125 thanh niên trong một khu vực (để mở heights, load
tập tin “heights.rda”). Hãy kiểm định chiều cao của thanh niên trong khu vực có bằng 160 cm
hay không, với mức ý nghĩa 5%? Đồng thời xác định khoảng tin cậy 95% cho chiều cao trung
bình thanh niên trong khu vực này.
> load('heights.rda')
> summary(heights)
Min. 1st Qu. Median Mean 3rd Qu. Max.
129.3 156.2 163.4 162.8 169.6 209.3
> hist(heights)
3
Histogram of heights
40
30
Frequency
20
10
0
120 140 160 180 200
heights
data: heights
t = 2.6175, df = 124, p-value = 0.009959
alternative hypothesis: true mean is not equal to 160
95 percent confidence interval:
160.6941 164.9990
sample estimates:
mean of x
162.8465
Dùng lệnh hist để vẽ đồ thị histogram cho dữ liệu để kiểm tra phân phối của dữ liệu, cho nhận
xét?
Lệnh t.test cho các kết quả sau:
Thống kê kiểm định t = 2.6175, bậc tự do n – 1 = 124, p – value = 0.00996.
Khoảng tin cậy 95%: 160.6941 ≤ μ ≤ 164.9990
Với mức ý nghĩa 5%, ta thấy p – value < 0.05, do đó bác bỏ H0 tức là chiều cao trung bình của
thanh niên trong khu vực khác 160 cm.
Nếu sử dụng giá trị thống kê t = 2.6175, ta so sánh với t1n1/ 2 t0.975
124
z0.975 1.96 (dùng lệnh
qt(0.975,124) hoặc qnorm(0.975)), ta cũng có kết luận tương tự.
Cho nhận xét: có thể sử dụng khoảng tin cậy 95% để xác định có bác bỏ giả thuyết H0 hay không
tại mức ý nghĩa 5%?
Chú ý:
4
Trong ví dụ trên, nếu ta đặt:
> result <- t.test(heights,mu = 162, conf.level=0.95)
thì ta có thể rút ra thống kê kiểm định t bằng lệnh result$statistic (hoặc
result[['statistic']] hoặc unname(result[['statistic']])):
Danh sách đầy đủ tên các đối tượng trả về:
> names(result)
[1] "statistic" "parameter" "p.value" "conf.int" "estimate"
[6] "null.value" "alternative" "method" "data.name"
Y
Pˆ
n
Giả thuyết: cỡ mẫu khảo sát n phải tương đối lớn.
p p0
Giả thuyết: H 0 : p p0 Đối thuyết: H1 : p p0 (Một trong 3 trường hợp)
p p
0
Pˆ p0
Z0
p0 (1 p0 )
n
Miền bác bỏ:
Với H1 : p p0 bác bỏ H0 nếu Z0 z1 /2 hoặc Z0 z1 /2
Với H1 : p p0 bác bỏ H0 nếu Z0 z1
Với H1 : p p0 bác bỏ H0 nếu Z0 z1
5
conf.level = 0.95)
Ví dụ: Trong một cuộc bầu cử thị trưởng tại một thành phố, ứng cử viên A tin rằng có trên 50%
người dân thành phố ủng hộ ông ta. Để kiểm định điều này, các chuyên gia thống kê chọn ngẫu
nhiên 800 người dân trong thành phố, thấy có 448 người dân cho ý kiến ủng hộ ông A. Hãy xét
xem tuyên bố của ông A về tỷ lệ cử tri có đúng không với mức ý nghĩa 1%.
Ta có:
- Cỡ mẫu kháo sát n = 800.
- Số người dân ủng hộ ông A y = 448.
H 0 : p 0.5
- Giả thuyết cần kiểm tra
H1 : p 0.5
Trong đó: p là tỷ lệ người dân thành phố ủng hộ ông A.
- Kết quả cho biết p – giá trị = 0.0003915 < 1% dẫn đến bác bỏ giả thuyết H0, ta kết luận
rằng tỷ lệ người dân ủng hộ ông A trong thành phố trên 50%.
- Khoảng tin cậy 99% cho tỷ lệ p là: 0.5182 ≤ p ≤ 1.0000.
Trong trường hợp kiểm định 1 mẫu, hàm binom.test cũng cho kết quả tương tự
> binom.test(y,n,p=0.5,alternative="greater",conf.level=0.99)
6
Exact binomial test
data: y and n
number of successes = 448, number of trials = 800, p-value = 0.0003864
alternative hypothesis: true probability of success is greater than
0.5
99 percent confidence interval:
0.5183309 1.0000000
sample estimates:
probability of success
0.56
Với Z0 P Z Z0 : hàm Laplace – hàm phân phối của biến ngẫu nhiên chuẩn hoá N(0,1).
Trong R, Z 0 = pnorm(Z0).
Bài tập
1. Số liệu thống kê về doanh số bán hàng của một siêu thị cho ở file profit.csv:
a) Vẽ đồ thị histogram cho dữ liệu, có nhận xét gì về phân phối của dữ liệu.
b) Những ngày có doanh số bán trên 65 triệu đồng là những ngày bán đắt hàng. Hãy ước
lượng doanh số bán trung bình của một ngày “bán đắt hàng” ở siêu thị này với độ tin cậy
99% (giả thuyết doanh số bán của những ngày bán đắt hàng là đại lượng ngẫu nhiên phân
phối theo quy luật chuẩn).
c) Trước đây doanh số bán trung bình của siêu thị là 60 triệu đồng/ngày. Số liệu của bảng
trên được thu thập sau khi siêu thị áp dụng một phương thức bán hàng mới. Hãy cho nhận
xét về phương thức bán hàng mới với mức ý nghĩa là 1%.
2. Sau một đợt bồi dưỡng sư phạm, người ta kiểm tra ngẫu nhiên 70 học viên. Kết quả cho bởi
bảng sau (thang điểm là 10):
Điểm (xi) 5 6 7 8 9 10
Tần số (ni) 5 10 15 20 12 8
7
Giả sử điểm số của các học viên tuân theo phân phối chuẩn. Có ý kiến cho rằng điểm số trung
bình là 8. Hãy kiểm tra ý kiến trên ở mức α = 5%.
a) Chỉ ra cách biến đổi số liệu của X để sử dụng được hàm t.test. Vẽ biểu đồ stem & leaf
cho số liệu đã biến đổi.
b) Viết hàm test.geq.oneside(x, 0 , alpha) để kiểm định giả thuyết H 0 : 0 và đối thuyết
H1 : 0 . Xuất ra kết luận và p - giá trị. Áp dụng để kiểm định H1 : 8 . (Lưu ý:
không gọi hàm t.test)
c) Viết hàm test.leq.oneside(x, 0 , alpha) để kiểm định giả thuyết H 0 : 0 và đối thuyết
H1 : 0 . Xuất ra thông báo và p - giá trị. Áp dụng để kiểm định H1 : 8 . (Lưu ý:
không gọi hàm t.test)
3. Sử dụng số liệu trong file teen-birth-rate-2002.txt để tạo bảng sau (xuất ra màn hình)
Bang: Ty le sinh tre em duoi gia thiet phan phoi chuan
X S n Z p
Black 76.14 15.60 44 4.79 0
Hispanic 88.96 23.66 48 7.05 0
White 32.51 11.71 51 -19.74 0
Trong đó: X , s, n lần lượt là trung bình mẫu, độ lệch tiêu chuẩn của mẫu và cỡ mẫu của các biến
tương ứng; Z X 0 n / s với 0 là trung bình tổng cộng của ba biến Black, Hispanic và
White; p là p - giá trị tương tứng với từng thống kê Z.
4. Hội đồng khoa học Trường ĐH Khoa học Tự nhiên muốn thay đổi đánh giá học lực của sinh
viên từ thang điểm 10 sang thang điểm 4. HĐ Khoa học quyết định khảo sát ý kiến các giảg viên
trong trường trước khi ra quyết định. Nếu như tỷ lệ giảng viên đồng ý với sự thay đổi trên 60%
thì việc thay đổi thang điểm sẽ được thực hiện. Khảo sát ngẫu nhiên 80 giảng viên trong trường,
gọi p là tỷ lệ giảng viên đồng ý với sự thay đổi.
a) Hãy chọn 1 cặp giả thuyết/ đối thuyết thích hợp với yêu cầu kiểm định của bài toán:
(1) H 0 : p 0.6 và H1 : p 0.6
b) Biến survey có trong tập tin data04.rda chứa kết quả khảo sát ý kiến của 80 giảng viên (0:
không đồng ý, 1: đồng ý). Theo kết quả khảo sát, HĐ Khoa học có nên thay đổi thang
điểm hay không? Mức ý nghĩa 5%.
8
5. Tại một đợt khám sức khỏe của trẻ em ở nhà trẻ, người ta khám ngẫu nhiên 100 cháu thấy có
20 cháu có hiện tượng còi xương do suy dinh dưỡng. Gọi p là xác suất để bắt gặp 1 trẻ mắc bệnh
còi xương. Hãy kiểm định giả thuyết H0: p = 0,15 và đối thuyết H1: p ≠ 0,15 ở mức α = 5%.
6. File times.csv chứa thời gian tự học mỗi ngày của sinh viên hai trường Khoa học Tự nhiên và
Kinh tế.
a) Có ý kiến cho rằng tỷ lệ sinh viên có thời gian tự học trên 5 giờ mỗi ngày của sinh viên
trường Khoa học Tự nhiên là 50%. Với mức ý nghĩa 5%, hãy kiểm tra ý kiến này.
b) Viết hàm proptest.geq(f, n, p0, alpha) để kiểm định giả thuyết H 0 : p p0 và đối thuyết
H1 : p p0 trong đó f là số phần tử thoả tính chất quan tâm trong n phần tử khảo sát.
Xuất ra kết quả và giá trị P. Áp dụng cho câu a. với đối thuyết H1: p > 0.5. (Lưu ý: không
gọi hàm prop.test hay binom.test)
c) Viết hàm proptest.leq(f, n, p0, alpha) để kiểm định giả thuyết H 0 : p p0 và đối thuyết
H1 : p p0 . Xuất ra kết quả và giá trị P. Áp dụng cho câu a. với đối thuyết H1: p < 0.5.
(Lưu ý: không gọi hàm prop.test hay binom.test)
7. Hãy viết hàm test.mean( …) với tính năng tương tự hàm t.test trong R: thực hiện
kiểm định hai phía, một phía (bên trái, bên phải) cho kỳ vọng; xuất ra thông báo, giá trị trả về
gồm trung bình mẫu của dữ liệu vào, p – giá trị. (Tham khảo hàm zpfunction(…) sau để làm
mẫu)
9
class(results) <- 'table'
print(results)
}
8. Ký hiệu X ~ N ( , 2 ) chỉ X là biến ngẫu nhiên có phân phối chuẩn với kỳ vọng và
phương sai 2 ; Y ~ B(n, p) chỉ Y là biến ngẫu nhiên có phân phối nhị thức với tham số n và p
(xác suất thành công). Hãy tính p – giá trị trong các trường hợp sau và cho biết chúng có ý nghĩa
hay không?
1) X 1.96, X ~ N (0,1) , kiểm định hai phía.
2) X 1.96, X ~ N (0,1) , kiểm định một phía bên trái.
3) X 1.96, X ~ N (0,1) , kiểm định một phía bên phải.
4) X 1.7, X ~ N (0,1) , kiểm định hai phía.
5) X 1.7, X ~ N (0,1) , kiểm định một phía bên trái.
6) X 1.7, X ~ N (0,1) , kiểm định một phía bên phải.
7) Y 18, Y ~ B(50,0.5) , kiểm định hai phía.
8) Y 18, Y ~ B(50,0.5) , kiểm định một phía bên trái.
9) Y 18, Y ~ B(50,0.5) , kiểm định một phía bên phải.
10
Bài 9.
Kiểm định giả thuyết thống kê
(Trường hợp hai mẫu)
S 2
n 1 S X2 m 1 SY2
(1)
nm2
P
Với X , S X và Y , SY lần lượt là trung bình mẫu và độ lệch tiêu chuẩn mẫu tương tứng với mẫu 1
và mẫu 2.
1
Kết luận:
Giả thuyết H0 Đối thuyết H1 Miền bác bỏ với mức P – giá trị
ý nghĩa 𝛂
X Y X Y T0 t1nm/22 2P{Tn m2 | T0 |}
X Y X Y T0 t1nm2 P{Tn m2 T0 }
X Y X Y T0 t1nm2 P{Tn m2 T0 }
Bảng 1
Trường hợp X2 Y2 : trong một số trường hợp, ta không thể giả sử các phương sai không biết
X2 và Y2 bằng nhau. Khi đó thống kê kiểm định:
X Y
T0* (3)
S X2 SY2
n m
T0 có phân phối Student với bậc tự do df được xác định bởi
2
S X2 SY2
df n m
(4)
S X2 / n SY2 / m
2 2
n 1 m 1
Thay thế T0 trong bảng 1 bởi T0* ta thu được các kết luận tương ứng.
̅ ̅
(5)
√
Thống kê Z ~ N(0,1), khi đó thay thế các giá trị thống kê và phân vị trong bảng 1 bằng thống kê
Z và phân vị z1 / 2 hoặc z1 tương ứng.
Trong đó
x, y : véc-tơ dữ liệu tương ứng với hai mẫu
alternative: đối thuyết (hai phía – “two.sided”, bên trái – “less”, bên phải – “greater”)
2
var.equal: giá trị mặc định là FALSE nghĩa là phương sai khác nhau
conf.level: độ tin cậy của khoảng tin cậy cho X Y , mặc định là 95%
Nếu như hai mẫu x1 ,, xn và ( y1 ,, ym ) được chứa trong cùng 1 biến, chẳng hạn data và
được phân biệt bởi 1 biến chia nhóm, group. Ta sử dụng hàm t.test với cú pháp sau
t.test(data ~ group, alternative = c("two.sided", "less", "greater"),
var.equal = FALSE, conf.level = 0.95)
Ví dụ 1:
File scores.rda chứa điểm thi giữa kỳ và cuối kỳ của môn Thống kê (Thang điểm: 100)
> load('scores.rda')
> scores
$midterm
[1] 66 78 62 99 80 63 82 86 84 70 98 81 66 42 92 74 75 89 87 84 89 87 76 45
84
$final
[1] 79 78 65 75 84 94 79 84 79 66 76 76 79 91 88 78 77 87 86 73 73 84 88 79
Hỏi: điểm trung bình giữa kỳ và cuối kỳ có bằng nhau hay không với α = 0.05?
> alpha <-0.05
> (var.equal <- var.test(scores$midterm, scores$final))
F test to compare two variances
data: scores$midterm and scores$final
F = 3.9807, num df = 24, denom df = 23, p-value = 0.001486
Sử dụng hàm var.test để kiểm tra xem phương sai hai tổng thể có bằng nhau hay không? p giá trị
= 0.001486 suy ra phương sai khác nhau.
> t.test(scores$midterm, scores$final, var.equal=FALSE)
Welch Two Sample t-test
data: scores$midterm and scores$final
t = -0.7354, df = 35.656, p-value = 0.4669
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
-8.858370 4.145037
sample estimates:
mean of x mean of y
77.56000 79.91667
3
p giá trị = 0.4669 > 0.05, ta kết luận rằng điểm thi giữa kỳ không khác với điểm thi cuối kỳ với
mức ý nghĩa 0.05 .
Biểu đồ Boxplot cho midterm và final:
> boxplot(scores)
4
D = E Di E X i Yi E X i E Yi X Y
và phương sai D2 .
Các giả thuyết:
H 0 : D 0 H 0 : D 0 H 0 : D 0
H1 : D 0 H1 : D 0 H1 : D 0
Thống kê kiểm định:
D
T0
SD n
có phân phối Student với n – 1 bậc tự do.
1 n 1 n
Di D
2
Trong đó: D Di và S D2
n i 1 n 1 i 1
Kết luận:
Giả thuyết H0 Đối thuyết H1 Miền bác bỏ với mức P – giá trị
ý nghĩa 𝛂
D 0 D 0 T0 t1n1/ 2 2P{Tn1 | T0 |}
D 0 D 0 T0 t1n1 P{Tn1 T0 }
D 0 D 0 T0 t n 1
1
P{Tn1 T0 }
Bảng 2
Thực hành trong R:
Sử dụng hàm t.test
t.test(x, y, alternative = c("two.sided", "less", "greater"),
paired = TRUE, conf.level=0.95)
hoặc
t.test(x ~ group, alternative = c("two.sided", "less", "greater"),
paired = TRUE, conf.level=0.95)
Tương tự như trường hợp hai mẫu độc lập, sử dụng paired = TRUE.
Ví dụ 2:
File cholesterol.txt chứa hàm lượng cholesterol trong máu đo trên 15 người đàn ông béo
phì từ ở độ tuổi 35 – 50. Những người tham gia thử nghiệm sẽ thực hiện 1 chế độ ăn kiêng và tập
thể dục trong vòng 3 tháng. Bác sĩ sẽ đo hàm lượng cholesterol trong máu mỗi người trước và
5
sau khi thử nghiệm. Với mức ý nghĩa 5%, chế độ ăn kiêng và tập thể dục có hiệu quả trong việc
giảm hàm lượng cholesterol trong máu những người béo phì này không?
> attach(cholesterol)
> v.equal <- var.test(Before,After,data=cholesterol)
F test to compare two variances
data: Before and After
F = 5.6691, num df = 14, denom df = 14, p-value = 0.002529
6
Paired t-test
p giá trị < 0.05 và dựa vào đồ thị boxplot ta kết luận rằng với mức ý nghĩa 5%, chế độ ăn kiêng
và tập thể dục có hiệu quả trong việc giảm hàm lượng cholesterol trong máu của những người
đàn ông béo phì.
III. So sánh 2 tỷ lệ:
Gọi và lần lượt là tỷ lệ của các phần tử thoả một tính chất quan tâm tương ứng với
hai tổng thể. Từ hai tổng thể chọn ra hai mẫu độc lập với cỡ mẫu lần lượt là và (
và lớn).
H 0 : p1 p2 H 0 : p1 p2
Ta cần kiểm định các giả thuyết sau: với mức ý nghĩa
H1 : p1 p2 H1 : p1 p2
Gọi và là số phần tử thoả tính chất quan tâm trong hai mẫu độc lập được chọn từ
hai tổng thể.
Y1 Y Y Y
Các tỷ lệ mẫu: pˆ1 ; pˆ 2 2 ; pˆ 1 2
n1 n2 n1 n2
pˆ1 pˆ 2
Tính thống kê kiểm định: Z 0
1 1
pˆ 1 pˆ
n1 n2
Kết luận:
Giả thuyết H0 Đối thuyết H1 Miền bác bỏ với P – giá trị
mức ý nghĩa 𝛂
p1 p2 p1 p2 Z0 z1 /2 2P{Z Z0 }
7
p1 p2 p1 p2 Z0 z1 P{Z Z0 }
Bảng 3
Trong đó:
: Số phần tử thoả tính chất quan tâm tương ứng với mẫu 1 và 2.
: cỡ mẫu 1 và 2.
Ví dụ 3:
Trong một nhà máy sản xuất linh kiện điện tử, các kỹ sư thử nghiệm một phương pháp
sản mới trong sản xuất vi mạch. Các kỹ sư cho rằng phương pháp mới hiệu quả hơn
phương pháp cũ trong việc làm giảm tỷ lệ vi mạch hỏng. Để kiểm tra, 320 vi mạch được
sản xuất theo phương pháp mới và 360 vi mạch được sản xuất theo phương pháp cũ.
Kết quả cho thấy trong 320 vi mạch có 76 vi mạch hỏng và trong 360 vi mạch sản xuất
theo phương pháp cũ có 94 vi mạch hỏng. Với mức ý nghĩa 5% và dựa vào dữ liệu mẫu,
có thể cho rằng phương pháp mới làm giảm tỷ lệ vi mạch hỏng hay không?
Gọi
: tỷ lệ vi mạch hỏng khi sản xuất theo phương pháp cũ
: tỷ lệ vi mạch hỏng khi sản xuất theo phương pháp mới
H 0 : p1 p2
Ta cần kiểm định giả thuyết
H1 : p1 p2
> y = c(94,76)
> n = c(360,320)
> prop.test(y,n,alternative = 'greater')
2-sample test for equality of proportions with
continuity correction
data: y out of n
X-squared = 0.3856, df = 1, p-value = 0.2673
alternative hypothesis: greater
95 percent confidence interval:
8
-0.03393952 1.00000000
sample estimates:
prop 1 prop 2
0.2611111 0.2375000
P - giá trị = 0.2673 > 0.05 => không có đủ cơ sở để bác bỏ giả thuyết , chưa đủ bằng
chứng để kết luận rằng phương pháp mới có hiệu quả hơn phương pháp cũ
BÀI TẬP
1. Hai máy máy rót sữa tự động được sử dụng để đưa sữa vào hộp giấy có dung tích 1 lít trong
một dây chuyền sản xuất. Lượng sữa thực tế hai máy đưa vào hộp có phân phối chuẩn với độ
lệch tiêu chuẩn lần lượt là 0.002 và 0.0025 lít. Một thành viên trong số các kỹ sư giám sát dây
chuyền cho rằng thể tích tích sữa trung bình được hai máy đưa vào các hộp là như nhau và không
phụ thuộc vào dung tích của các hộp chứa. Một mẫu ngẫu nhiên được lấy từ hai máy này được
cho trong file volume.csv.
a) Bạn có cho rằng phán đoán của kỹ sư trên là đúng hay không? Sử dụng 0.05 .
b) P-giá trị của kiểm định trên là bao nhiêu?
c) Hãy tìm khoảng tin cậy 95% cho sự khác biệt về trung bình lượng sữa hai máy đưa vào
các hộp.
d) Viết hàm test.leq.oneside(x, y, 0 , 1 , 2 , ) để kiểm định giả thiết H 0 : 0 và đối
thuyết H1 : 0 trong đó 1 2 với 1 , 2 lần lượt là thể tích sữa trung bình hai
máy 1 và 2 đưa vào các hộp; x, y là hai vector dữ liệu chứa thể tích sữa do máy số 1 và
máy số 2 đưa vào các hộp giấy; là mức ý nghĩa. Hàm xuất ra kết quả chấp nhận hoặc
bác bỏ và cho biết P-giá trị.
e) Viết hàm test.geq.oneside(x, y, 0 , 1 , 2 ) để kiểm định giả thiết H 0 : 0 và đối
thuyết H1 : 0 với các ký hiệu và yêu cầu như ở câu trên.
2. Đường kính (mm) của các thanh thép được sản xuất bởi hai máy cán thép tại một nhà máy
được đem ra so sánh. Hai mẫu ngẫu nhiên về đường kính của các thanh thép được sản xuất bởi
hai máy này được thu thập và tổng hợp trong file diameter.csv. Giả sử rằng đường kính của các
thanh thép được cán bởi hai máy này có phân phối chuẩn với phương sai bằng nhau.
a) Hỏi có bằng chứng ủng hộ giả thiết hai máy cho ra các thanh thép với đường kính khác
nhau hay không? Hãy kiểm tra và đưa ra kết luận với mức ý nghĩa 0.05 .
b) Hãy tìm P-giát trị cho thống kê bạn tính ở câu vừa rồi.
c) Hãy ước lượng sự sai biệt về đường kính trung bình của các thanh thép do hai máy này
sản xuất với độ tin cậy 95%.
9
d) Viết hàm test.leq.oneside(x, y, 0 , ) để kiểm định giả thiết H 0 : 0 và đối thuyết
H1 : 0 trong đó 1 2 với 1 , 2 lần lượt là đường kính trung bình của các thanh
thép do máy số 1 và máy số 2 sản xuất ra; x, y là hai vector dữ liệu chứa đường kính của
các thanh thép do máy số 1 và máy số 2 sản xuất ra; là mức ý nghĩa. Hàm xuất ra kết
quả chấp nhận hoặc bác bỏ và cho biết P-giá trị.
e) Viết hàm test.geq.oneside(x, y, 0 , ) để kiểm định giả thiết H 0 : 0 và đối thuyết
H1 : 0 với các ký hiệu và yêu cầu như ở câu trên.
3. Một hãng công nghệ (G) sản xuất hệ điều hành (HĐH) cho máy tính công bố rằng tốc độ khởi
động của HĐH mới của họ cho thời gian khởi động nhanh gấp đôi HĐH mới nhất của hãng đối
thủ (M). Một mẫu khảo sát gồm 250 laptop cùng cấu hình, trong đó 100 laptop được cài HĐH
của hãng (G) và 150 laptop còn lại được cài HĐH của hãng đối thủ (M). Kết quả được ghi lại
trong file “tg.khoidong.csv”. Giả sử độ lệch chuẩn về thởi gian khởi động HĐH của hãng (G) và
(M) lần lượt là (s) và (s). Hỏi công bố về thời gian khởi động của hãng (G) có
phù hợp với số liệu thu thập được? Với mức ý nghĩa 5\%.
4. Hai mươi người nam với độ tuổi từ 35 đến 50 tham gia vào một nghiên cứu để đánh giá sự ảnh
hưởng của chế độ ăn uống và luyện tập thể thao lên hàm lượng cholesterol trong máu. Mỗi người
tham gia được đo lượng cholesterol trước khi bắt đầu chương trình tập luyện thể dục và chuyển
sang ăn uống với chế độ ít chất béo. Dữ liệu được cho trong file cholesterol.csv.
a) Hỏi rằng dữ liệu có ủng hộ kết luận rằng chế độ ăn kiêng và luyện tập thể dục đã có tác
dụng trong việc giảm lượng cholesterol trong máu hay không? Hãy tiến hành ở mức ý
nghĩa 0.05.
b) Giả sử hàm lượng cholesterol ở mỗi người tham gia nghiên cứu trước và sau khi bắt đầu
chương trinh luyện tập thể dục thể thao có phân phối chuẩn với phương sai khác nhau.
Viết hàm test.leq.oneside(x, y, 0 , ) để kiểm định giả thiết H1 : 0 và đối thiết
H1 : 0 trong đó 1 2 với 1 , 2 lần lượt là trung bình hàm lượng cholesterol
trước và sau khi tham gia chương trình luyện tập, là mức ý nghĩa. Hàm xuất ra kết quả
chấp nhận hoặc bác bỏ và cho biết P-giá trị.
c) Với cùng giả định như ở câu b, hãy viết hàm test.geq.oneside(x, y, 0 , ) để kiểm định
giả thiết H1 : 0 và đối thuyết H1 : 0 với các ký hiệu và yêu cầu như ở câu trên.
5. Một sản phẩm ăn kiêng dạng lỏng được nhà sản xuất quảng cáo có tác dụng giảm cân ít nhất
1.5 kg khi sử dụng sản phẩm trong 1 tháng. Một mẫu ngẫu nhiên 50 người sử dụng sản phẩm
trong một tháng, kết quả trọng lượng (kg) trước khi sử dụng sản phẩm và sau khi dùng 1 tháng
được ghi lại trong file ‘giamcan.csv’. Hãy sử dụng các thủ tục kiểm định giả thuyết để trả lời các
câu hỏi sau
(a) Dữ liệu có phù hợp với quảng cáo của nhà sản xuất về sản phẩm ăn kiêng hay không với
mức ý nghĩa 0.05?
10
(b) Dữ liệu có phù hợp với quảng cáo của nhà sản xuất về sản phẩm ăn kiêng hay không với
mức ý nghĩa 0.01?
(c) Để cải thiện doanh số bán hàng, nhà sản xuất đang xem xét thay đổi quảng cáo từ “ít nhất
1.5 kg” thành “ít nhất 2.5 kg”. Thực hiện lại câu (a), (b) để kiểm định quảng cáo mới này.
6. Một nhà khoa học máy tính tiến hành kiểm tra sự hữu dụng của hai ngôn ngữ thiết kế khác
nhau trong việc cải thiện các tác vụ lập trình. Hai mươi chuyên gia lập trình thành thạo với cả hai
ngôn ngữ này được yêu cầu lập trình cho cùng một module chức năng trên hai ngôn ngữ thiết kế.
Thời gian hoàn thành công việc (tính theo phút và tuân theo phân phối chuẩn) được ghi lại và
tóm tắt trong file pro.time.csv.
a) Hãy xác định khoảng tin cậy 95% cho sự sai khác giữa thời gian lập trình trung bình
trên hai ngôn ngữ. Có dấu hiệu nào cho thấy một trong hai ngôn ngữ là tốt hơn hay
không?
b) Viết hàm test.leq.oneside(x, y, 0 , ) để kiểm định giả thiết H1 : 0 và đối thuyết
H1 : 0 trong đó 1 2 với 1 , 2 lần lượt là thời gian trung bình của các lập
trình viên viết xong module đối với ngôn ngữ thứ nhất và thứ hai, là mức ý nghĩa.
Hàm xuất ra kết quả chấp nhận hoặc bác bỏ và cho biết P-giá trị.
c) Viết hàm test.geq.oneside(x, y, 0 , ) để kiểm định giả thiết H1 : 0 và đối
thuyết H1 : 0 với các ký hiệu và yêu cầu như ở câu trên..
7. Hai loại máy đúc khác nhau được sử dụng để gia công các chi tiết bằng plastic. Một chi tiết
được xem là phế phẩm nếu nó có sự thay đổi về hình dạng và khối lượng hoặc sai biệt về màu
sắc so với chi tiết mẫu vượt quá mức cho phép. Hai mẫu ngẫu nhiên được thu thập, mỗi mẫu có
cỡ 300. Trong mẫu thu được từ máy số 1 người ta nhận thấy có 15 chi tiết là phế phẩm và đối với
mẫu thu được từ máy thứ 2 có 8 chi tiết là phế phẩm. Liệu có cơ sở để kết luận rằng hai loại máy
có tỉ lệ phế phẩm như nhau hay không (mức ý nghĩa 0.025)? Tìm P-giá trị cho kiểm định vừa rồi.
8. Trong một mẫu ngẫu nhiên gồm 500 người sống tại thành phố Hồ Chí Minh người ta thấy có
385 người ủng hộ việc tăng tốc độ lưu thông trên các tuyến đường quốc lộ lên 65 km/h. Trong
khi đó một mẫu ngẫu nhiên khác gồm 400 người sống tại Hà Nội cho thấy có 267 nguời ủng hộ
việc tăng tốc độ. Liệu số liệu thu thập được có cho ta kết luận rằng có sự khác biệt về tỉ lệ người
ủng hộ việc tăng tốc độ tại hai thành phố hay không ( 0.05 )? P-giá trị cho kiểm định trên là
bao nhiêu?
9. Trong một mẫu ngẫu nhiên 200 tài xế ở Tp.HCM có 165 trường hợp mang đai an toàn thường
xuyên, trong khi một mẫu khác, 250 tài xế ở Hà Nội, cho thấy có 198 trường hợp mang đai an
toàn thường xuyên.
(a) Thực hiện thủ tục kiểm định giả thuyết để xác định xem có sự khác biệt mang ý nghĩa
thống kê giữa việc sử dụng đai an toàn ở Tp.HCM và Hà Nội hay không? Với mức ý
nghĩa 0.05
(b) Tương tự câu (a) với mức ý nghĩa 0.1
11
(c) Giả sử các số liệu ở trên được nhân đôi. Nghĩa là, trong một mẫu ngẫu nhiên 400 tài xế ở
Tp.HCM có 330 trường hợp mang đai an toàn thường xuyên, trong khi một mẫu khác,
500 tài xế ở Hà Nội cho thấy có 396 trường hợp mang đai an toàn thường xuyên. Thực
hiện lại câu (a), (b) và cho nhận xét về ảnh hưởng của việc tăng kích thước mẫu mà
không thay đổi các tỉ lệ lên kết quả kiểm định.
10. Doanh số bán hàng (triệu đồng) của hai chi nhánh trong hệ thống siêu thị Co-op Mart đặt tại
quận 1 và quận 3 trong 200 ngày được cho trong file Profit.csv.
a) Hãy xác định khoảng tin cậy 95% cho sự sai khác về doanh số bán hàng trung bình của
hai chi nhánh này.
b) Một ngày được gọi là có doanh số cao nếu doanh số bán hàng trong ngày đó trên 600
triệu đồng. Có nhận xét rằng tỉ lệ các ngày có doanh số cao tại chi nhánh quận 1 cao hơn
tỉ lệ các ngày có doanh số bán hàng cao tại chi nhánh quân 3. Hãy kiểm chứng nhận xét
này với 0.05 . Hãy cho biết P-giá trị của kiểm định vừa rồi.
c) Viết hàm prop.test.leq(x, y, ) để kiểm định giả thiết và đối thuyết
H1 : px p y trong đó px , p y lần lượt là tỉ lệ ngày có doanh số bán cao (trên 600 triệu) tại
chi nhánh quận 1 và quận 3; x, y lần lượt là hai vector chứa doanh số bán hàng tại hai chi
nhánh của Co-op Mart đặt tại quận 1 và quận 3 trong một số ngày nào đó; là mức ý
nghĩa. Hàm xuất ra kết quả chấp nhận hoặc bác bỏ và cho biết P-giá trị.
11. Thu nhập của các nhân viên trong ngành công nghệ thông tin tại hai thành phố Hà Nội và
thành phố Hồ Chí Minh được cho trong file Inf.Sal.csv.
a) Hãy xác định khoảng tin cậy 95% cho sự sai khác về mức lương trung bình của nhân viên
trong ngành công nghệ thông tin tại hai thành phố.
b) Một người được gọi là có thu nhập cao nếu thu nhập của người đó trên 11,5 triệu đồng.
Có nhận xét rằng tỉ lệ nhân viên công nghệ thông tin có thu nhập cao tại thành phố Hồ
Chí Minh cao hơn so với tỷ lệ này tại Hà Nội. Hãy kiểm chứng nhận xét này với
0.025 . Hãy cho biết P-giá trị của kiểm định vừa rồi.
c) Viết hàm prop.test.geq(x, y, ) để kiểm định giả thiết và đối thuyết
trong đó px , p y lần lượt là tỉ lệ người có thu nhập cao (trên 11,5 triệu đồng)
tại thành phố Hồ Chí Minh và Hà Nội; x, y là hai vector chứa giá trị thu nhập của một số
nhân viên ngành công nghệ thông tin tại Hà Nội và thành phố Hồ Chí Minh; là mức ý
nghĩa. Hàm xuất ra kết quả chấp nhận hoặc bác bỏ và cho biết P-giá trị.
d) Tìm khoảng tin cậy 95% cho hiệu hai tỉ lệ trên.
12
Tuần 1
#Bai01
x <- c(4, 2, 6)
y <- c(1, 0, -1)
length(x)
sum(x)
sum(x ^ 2)
x + y
x * y
x - 2
x ^ 2
#Bai 02
7:11
seq(2, 9)
seq(4, 10, by = 2)
seq(3, 10, length = 10)
seq(6, -4, by = -2)
#Bai 03
rep(2, 4)
rep(c(1, 2), 4)
rep(c(1, 2), c(4, 4))
rep(1:4, 4)
rep(1:4, rep(3, 4))
#Bai 04
rep(6, 6)
rep(c(5, 8), 4)
rep(c(5, 8), c(4, 4))
#Bai 05
1
x <- c(5, 9, 2, 3, 4, 6, 7, 0, 8, 12, 2, 9)
x[2]
x[2:4]
x[c(2, 3, 6)]
x[c(1:5, 10:12)]
x[-(10:12)]
#Bai 06
y <- c(33, 44, 29, 16, 25, 45, 33, 19, 54, 22, 21,
49, 11, 24, 56)
for (i in 1:5) {
v <- c()
for (j in 1:3)
v <- c(v, (i - 1) * 3 + j)
print(summary(y[v]))
}
for (i in 1:3) {
v <- c()
for (j in 1:5)
v <- c(v, i + (j - 1) * 3)
print(summary(y[v]))
}
#Bai 07
x <- matrix(data = c(3, -1, 2, 1), nrow = 2, ncol
= 2)
y <- matrix(data = c(1, 0, 4, 1, 0, -1), nrow = 2,
ncol = 3)
z <- matrix(data = c(1, 2), nrow = 1, ncol = 2)
2 * x
x * x
x %*% x
x %*% y
t(y)
solve(x)
2
#Bai 08
x[1,]
x[2,]
x[,2]
y[1, 2]
y[, 2:3]
#Bai 09
x <- data.frame(quakes)
summary(x$depth)
summary(x$mag)
y <- data.frame(mtcars)
mean(y$wt)
mean(y$mpg)
Tuần 2
#Bai01
tong <- function(x, n) {
ans = 0
for (i in 1:n)
ans = ans + x[i]
return (ans)
}
#Bai 02
df <- function(radius) {
volume = (4 / 3 * pi * (r ^ 3))
return (data.frame(radius, volume))
}
r = c(3:20)
df(r)
#Bai 03
3
data = read.csv("Data/data01.csv", header
= TRUE)
age = data[,1]
id = rep(0, length(age))
for (i in 1:length(age)) {
x = age[i]
if (x <= 60)
{id[i] = 0}
else {
if (x <= 70)
{id[i] = 1}
else {
if (x <= 80)
{id[i] = 2}
else
{id[i] = 3}
}
}
}
id
#Bai 04
df = read.csv("Data/data11.csv", header =
TRUE)
h = df$Height;
f = df$Freq;
4
var = sum(f * (h - mh) ^ 2) /
(sum(f) - 1); print(sqrt(var));
print(df)
# chuyen thanh vector khong co tan
so
# dung min max mean sd
}
information(df)
print(df)
#Bai 05
phanvi <- function(x, p) {
y = sort(x)
n = length(x)
i = round(p * n / 100, 0);
if (p * n %% 100 == 0) {
return (y[i])
} else {
return ((y[i] + y[i + 1]) / 2)
}
}
#Bai 06
CRMethod <- function(R, c1, c2) {
n_mean = (c1 + 1) * (c2 + 1) / (R
+ 1) - 1;
n_var = (c1 + 1) * (c2 + 1) * (c1
- R) * (c2 - R) / ((R + 1) ^ 2 * (R + 2))
cat(n_mean - 1.96 * sqrt(n_var),
n_mean + 1.96 * sqrt(n_var))
}
CRMethod(4, 12, 15)
Tuần 3
5
#Bai01
f <- function(p) { 0.07 * (p **
(-0.93)) };
F <- function(p) integrate(f,
lower = 0, upper = p)
F(0.2)
#Bai 02
n = 100
x = sample(1:5, 100, TRUE,
c(0.1, 0.2, 0.4, 0.2, 0.1))
plot(1:5, table(x) / n, type =
"h", xlab = "x", ylab = "P(X =
x)")
Tuần 4
#Bai01
x = 0:15
plot(x, dhyper(x, 25, 100 - 25, 15), type = "h")
#Bai 02
sum(dhyper(5:15, 25, 75, 15))
phyper(12, 25, 75, 15) - phyper(4, 25, 75, 15)
#Bai 03
curve(dexp(x, 0.6), 0, 10)
curve(dexp(x, 0.3), 0, 10, add = T)
pexp(10, 0.6) - pexp(0, 0.6)
pexp(10, 0.3) - pexp(0, 0.3)
#Bai 04
x = 0:8
plot(x, dpois(x, 1), type = "h")
6
#Bai 05
x = 0:10
plot(x, dchisq(x, 3), type = "h")
#Bai 06
layout(matrix(c(1, 2), nrow = 1))
x = 0:50
plot(x, ylim = c(0, 0.25), dbinom(x, 50, 0.08),
type = "h")
plot(x, ylim = c(0, 0.25), dpois(x, 50 * 0.08),
type = "l")
#Bai 07
x = 0:50
plot(x, dbinom(x, 50, 0.4))
curve(dnorm(x, 20, 12), 0, 50, add = T)
Tuần 5
#Bai01
Y <- function() rnorm(1, 0, 1) ** 2 + rnorm(1,
0, 1) ** 2;
VecY <- function(n) replicate(n, Y())
n = 10000
hist(VecY(n), freq = 0, breaks = 40)
curve(dchisq(x, 2), from = 0, to = 8, add = T)
Tuần 6
#Bai01
x = c(1,2,5,7,-3,0,5,1,5,6)
y = c(2,2,0,-5,7,8,11,9,3,2)
x + y
7
x - y
x * y
z = x[x %% 2 == 0]
z
t = y[y %% 2 == 1]
t
sort(x, decreasing = FALSE)
sort(y, decreasing = TRUE)
#Bai 02
data = read.csv("Data/data01.csv")
boxplot(FPSA, horizontal = T)
K = data[,4]
k0 = FPSA[K == 0]
k1 = FPSA[K == 1]
data2 =
read.csv("Data/data02.csv")
data3 = merge(data, data2, by =
'K')
8
Age = data[,1]
tPSA = Age
tPSA[Age <= 30] = 0
tPSA[30 < Age & Age <= 50] = 1
tPSA[50 < Age] = 2
Tuần 7
#Bai01
a = rnorm(35, 10, 5)
alpha = 0.05
epsilon = qnorm(1 - alpha / 2) * 5 / sqrt(35)
cat(10 - epsilon)
cat(10 + epsilon)
#Bai 02
data = read.csv("Data/data31.csv")
ci.mean = function(x, alpha) {
trung_binh = mean(x)
do_lech_chuan = sd(x)
so_luong = length(x)
dung_sai = qnorm(1 - alpha / 2) *
do_lech_chuan / sqrt(so_luong);
cat(trung_binh - dung_sai, trung_binh +
dung_sai)
}
profit = data[,2]
ci.mean(profit, 1 - 0.95)
#Bai 03
data = read.csv("Data/data32.csv", header = T);
time = data[,1]
ci.mean(time, 1 - 0.95)
9
ci.prop <- function(f, n, alpha) {
ti_le = f / n;
dung_sai = qnorm(1 - alpha / 2) *
sqrt(ti_le * (1 - ti_le) / length(x));
cat(ti_le - dung_sai, ti_le + dung_sai);
}
#Bai 04
x <- rep(1.3, 6)
x <- c(x, rep(1.5, 34));
x <- c(x, rep(1.7, 31));
x <- c(x, rep(1.9, 42));
x <- c(x, rep(2.1, 12));
ci.mean(x, 1 - 0.95)
#Bai 05
ktc.tb <- function(mean, adj, s, n, alpha) {
if (adj == T) { #Da biet DLC cua tong the
epsilon = qnorm(1 - alpha / 2) * s
/ sqrt(n)
} else {
if (n >= 30) {
epsilon = qnorm(1 - alpha
/ 2) * s / sqrt(n)
} else {
epsilon = qt(1 - alpha /
2, df = n - 1) * s / sqrt(n)
}
}
cat(mean - epsilon, mean + epsilon)
}
10
#Bai 06
ktc.tb.mau <- function(x, adj, s, alpha) {
n = length(x)
mean = mean(x)
if (adj == F) # Chua biet DLC tong the
s = sd(x)
ktc.tb(mean, adj, s, n, alpha)
}
#Bai 07
x <- rep(12, 2)
x <- c(x, rep(12.05, 3))
x <- c(x, rep(12.10, 7))
x <- c(x, rep(12.15, 9))
x <- c(x, rep(12.20, 10))
x <- c(x, rep(12.25, 8))
x <- c(x, rep(12.30, 6))
x <- c(x, rep(12.35, 5))
x <- c(x, rep(12.40, 3))
ktc.tb.mau(x, F, 0, 1 - 0.95)
Tuần 8
#Bai01
data1 = read.csv("Data/profit.csv", header = T)
#data1 = read.csv(file.choose(), header = T)
x1 = data1[,1]
hist(x1)
11
#Khi n >= 30 thi qt xap xi qnorm
c(x.mean - epsilon, x.mean + epsilon)
}
ci.mean(x2, 0.01)
Tuần 9
#Caua
#H0: m1 = m2
#H1: m1 # m2
data = read.csv("Data/volume.csv", header = T)
attach(data)
t.test(x = machine1, y = machine2, alternative =
"two.sided", conf.level = 1 - 0.05)
#p-value lon hon alpha khong co can cu bac bo H0
#Cau b
#Dua vao cau a
#Cau c
#Dua vao cau a
#Cau d
test.leq.oneside = function(x, y, mu0, sig1, sig2,
alpha) {
z0 = (mean(x) - mean(y)) / sqrt( sig1 ^ 2 /
length(x) + sig2 ^ 2 / length(y))
12
p.value = dnorm(z0)
res = ifelse(p.value < alpha, "Bac bo H0",
"Khong co can cu Bac bo H0")
cat(res)
}
test.leq.oneside(machine1, machine2, 1,0.002,
0.0025, 0.05)
#Cau e
test.geq.oneside = function(x, y, mu0, sig1, sig2,
alpha) {
z0 = (mean(x) - mean(y)) / sqrt( sig1 ^ 2 /
length(x) + sig2 ^ 2 / length(y))
p.value = 1 - dnorm(z0)
res = ifelse(p.value < alpha, "Bac bo H0",
"Khong co can cu Bac bo H0")
cat(res)
}
test.geq.oneside(machine1, machine2, 1,0.002,
0.0025, 0.05)
13