https://drive.google.com/file/d/1y5vkcU-kqIgG09DxSgc3ndULLXGFqYXe/view?usp=drive_link

library(readxl)
library(parttime)
## Warning: package 'parttime' was built under R version 4.3.1
## Initializing default timezone offset, which is assumed when timezone
## parts are missing.
## 
##     options("parttime.assume_tz_offset" = 0L)
## 
## Attaching package: 'parttime'
## The following objects are masked from 'package:stats':
## 
##     end, start
## The following objects are masked from 'package:base':
## 
##     pmax, pmin

Trích xuất dữ liệu theo hàng và cột

Trong một số trường hợp chúng ta chỉquan tâm đến một số biến chứ không phải toàn bộ các biến. Để trích xuất dữ liệu theo cột ta thực hiện lệnh sau:

CPS1988<-read.csv(“crab.csv”, header =TRUE): đọc file có tên CPS1988.csv trong thư mục D:/PhanmemR và đặt tên CPS1988.

CPS3<-CPS1988[c(2:4)]:lấy cột từ2 đến cột 4 của đối tượng CPS1988 và đặt tên CPS3

head(CPS3):xem 6 quan sát đầu tiên của đối tượng CPS3.7.3.

CPS1988<-read_excel("C:/crab.xlsx")
CPS3<-CPS1988[c(2:4)]
head(CPS3)
## # A tibble: 6 × 3
##   spine width satell
##   <dbl> <dbl>  <dbl>
## 1     3  28.3      8
## 2     3  22.5      0
## 3     1  26        9
## 4     3  24.8      0
## 5     3  26        4
## 6     3  23.8      0

Trích xuất dữ liệu theo hàng và cột

Để trích xuất dữ liệu theo hàng và cột ta thực hiện câu lệnh:

CPS1988<-read.csv(“crab.csv”, header =TRUE): câu lệnh đọc file có tên CPS1988.csv trong thư mụcD:/PhanmemR và đặt tên CPS1988.

CPS4 <-CPS1988[c(1, 3, 5, 7), c(2:4)]:câu lệnh trích xuất dữ liệu từ cột 2 đến cột 4, dòng 2 đến dòng 4 của đối tượng CPS1988 và đặt tên CPS4.

head(CPS4):câu lệnh xem 6 quan sát đầu tiên của CPS4.

CPS4 <-CPS1988[c(1, 3, 5, 7), c(2:4)]
head(CPS4)
## # A tibble: 4 × 3
##   spine width satell
##   <dbl> <dbl>  <dbl>
## 1     3  28.3      8
## 2     1  26        9
## 3     3  26        4
## 4     1  26.5      0

Kết quả câu lệnh trên tạo ra một dataframe gồm các dòng 1, 3, 5, 7 và chỉlấy các biến ở cột 2, 3, 4 từ dataframe gốc ban đầu.7.4.

Trích xuất dữ liệu từ một dataframe có sẵn bằng lệnh subset

Trong nhiều tình huống, chúng ta cần trích xuất dữliệu cho các quan sát theo một tiêu chí nào đó. Chẳng hạn, từ tập dữ liệu CPS1988.csv chúng ta muốn trích xuất tất cả các quan sát ứng với parttime=yes mà thôi với tên gọi CPS5 chẳng hạn, ta thực hiện câu lệnh sau:

CPS1988<-read.csv(“crab.csv”, header =TRUE): đọc file có tênCPS1988.csv trong thư mục D:/PhanmemR và đặt tên CPS1988. CPS5 <-subset(CPS1988, parttime == “yes”):trích xuất các quan sát của biến parttime = yes trong đối tượng CPS1988 và đặt tên CPS5.

CPS5 <-subset(CPS1988, parttime = "yes")
## Warning: In subset.data.frame(CPS1988, parttime = "yes") :
##  extra argument 'parttime' will be disregarded
dim(CPS5)
## [1] 173   6
head(CPS5)
## # A tibble: 6 × 6
##   color spine width satell weight     y
##   <dbl> <dbl> <dbl>  <dbl>  <dbl> <dbl>
## 1     3     3  28.3      8   3050     1
## 2     4     3  22.5      0   1550     0
## 3     2     1  26        9   2300     1
## 4     4     3  24.8      0   2100     0
## 5     4     3  26        4   2600     1
## 6     3     3  23.8      0   2100     0

Kết quả câu lệnh cho thấy, có 2524 quan sát có làm bán thời gian được trích xuất.Tương tự, chúng ta cũng có thể trích xuất dữ liệu theo một số tiêu chí nào đó. Ví dụ, cũng từ dữliệu CPS1988 ta trích xuất dữliệu cho các quan sát các tiêu chí mà: (1) ứng với parttime =yes, và (2) có education ≥ 3 với đặt tên CPS6,ta thực hiện câu lệnh sau:

CPS6 <-subset(CPS1988, parttime = “yes” & education == 5):trích xuất các quan sát của biến parttime = yes và các quan sát của biến education = 5 trong đối tượng CPS1988 với tên CPS6. head(CPS6):câu lệnh xem 6 quan sát đầu tiên của CPS6.

CPS6 <-subset(CPS1988, parttime = "yes" & education == 5)
## Warning: In subset.data.frame(CPS1988, parttime = "yes" & education == 5) :
##  extra argument 'parttime' will be disregarded
head(CPS6)
## # A tibble: 6 × 6
##   color spine width satell weight     y
##   <dbl> <dbl> <dbl>  <dbl>  <dbl> <dbl>
## 1     3     3  28.3      8   3050     1
## 2     4     3  22.5      0   1550     0
## 3     2     1  26        9   2300     1
## 4     4     3  24.8      0   2100     0
## 5     4     3  26        4   2600     1
## 6     3     3  23.8      0   2100     0

Hoặc chúng ta cũng có thể trích xuất dữ liệu cho các quan sát trong CPS1988 theo các tiêu chí (1) ứng với education <2 hoặc (2) experience >50 và đặt tên CPS7, ta thực hiện câu lệnh:

CPS7 <-subset(CPS1988, parttime = “yes” | experience > 50):câu lệnh trích xuất các quan sát của biến parttime = yes hoặc các quan sát của biến experience > 50 trong đối tượng CPS1988 và đặt tên CPS7. head(CPS7):câu lệnh xem 6 quan sát đầu tiên của CPS7.

CPS7 <-subset(CPS1988, parttime = "yes" | experience > 50)
## Warning: In subset.data.frame(CPS1988, parttime = "yes" | experience > 50) :
##  extra argument 'parttime' will be disregarded
head(CPS7)
## # A tibble: 6 × 6
##   color spine width satell weight     y
##   <dbl> <dbl> <dbl>  <dbl>  <dbl> <dbl>
## 1     3     3  28.3      8   3050     1
## 2     4     3  22.5      0   1550     0
## 3     2     1  26        9   2300     1
## 4     4     3  24.8      0   2100     0
## 5     4     3  26        4   2600     1
## 6     3     3  23.8      0   2100     0

Mã hóa dữ liệu

Trong mục này chúng ta sử dụng dữ liệu của file afterlife.xlsx trong thư mục D:/PhanmemRđể làm ví dụ minh họa. Trước tiên chúng ta mô tả sơ bộ về file dữliệu afterlife.xlsx bằng câu lệnh sau:

af<-read.xlsx(“afterlife.xlsx”, sheetIndex =1, header =TRUE):đọc file afterlife.xlsx và đặt tên af. af: câu lệnh cho biết chi tiết đối tượng af.

af<-read_excel("C:/afterlife.xlsx")
head(af)
## # A tibble: 6 × 2
##     Sex Believe
##   <dbl>   <dbl>
## 1     2       2
## 2     2       4
## 3     1       4
## 4     2       4
## 5     2       6
## 6     1       6

Dữ liệu file afterlife.xlsx có hai biến định tính.

Biến thứ nhất: Sex (giới tính) được mã hóa như sau:1 là nam và 2 là nữ. Biến thứ 2: Believe (niềm tin) của người được khảo sát “Sau khi chết có tồn tại một thế giới khác” được mã hóa như sau: 1: Tin là có, khẳng định chắc chắn. 2: Tin là có,nhưng không chắc chắn. 3: Tin là không có, nhưng không chắc chắn. 4: Tin là không có, khẳng định chắc chắn. 5. Dữliệu bị khuyết. 6. Không thể chọn. 7. Không trả lời. Trong dữliệu này chúng ta chỉ giữ lại những quan sát mà biến Believe < 5, sau đó thay những quan sát có giá trị 1 và 2 của biến Believe thành giá trị 1 (những quan sát Tin là có), đồng thời những quan sát có giá trị3 và 4 của biến Believe thành giá trị 0 (những quan sát Tin là không có).

Để thực hiện công việc trên ta thực hiện các lệnh sau:

af<-read.xlsx(“afterlife.xlsx”, sheetIndex =1, header =TRUE):đọc file tên afterlife.xlsx và đặt tên af.

  • afmahoa<-subset(af, Believe <5):câu lệnh trích xuất những quan sát mà giá trị của biến Believe <5 và đặt tên afmahoa.
  • afmahoa\(Believe[afmahoa\)Believe <=2] <-1: câu lệnh thay những giá trịquan sát ≤2 trong cột Believe của afmahoa bằng 1.
  • afmahoa\(Believe[afmahoa\)Believe >2] <-0:câu lệnh thay những giá trịquan sát >2 trong cột Believe của afmahoa bằng 0.
afmahoa<-subset(af, Believe <5)
afmahoa$Believe[afmahoa$Believe <=2] <-1
afmahoa$Believe[afmahoa$Believe >2] <-0
head(afmahoa)
## # A tibble: 6 × 2
##     Sex Believe
##   <dbl>   <dbl>
## 1     2       1
## 2     2       0
## 3     1       0
## 4     2       0
## 5     2       1
## 6     2       1

Thực hành bảng ngẫu nhiên và suy diễn thống kê trên R

Bảng ngẫu nhiên

Cấu trúc xác suất cho các bảng ngẫu nhiên

Dữ liệu định tính là tần số xuất hiện các biểu hiện của các biến. Cho X và Y là hai biến định tính, X có k biểu hiện: $𝐴_1, 𝐴_2,…, 𝐴_k $ và Y có m biểu hiện: B1,B2,…,Bm. Chúng ta có thể sử dụng một bảng gồm hàng và m cột để thể hiện kết quảcó thể xảy ra từ việc khảo sát:

Bảng này được gọi là bảng ngẫu nhiên hai chiều 𝑘×𝑚, trong đó nj là số lần quan sát được cặp thuộc tính (Ai,Bj), còn gọi là tần số của \((𝐴_i, 𝐵_j)\). Một bảng ngẫu nhiên hai biến được gọi là bảng hai chiều; một bảng ngẫu nhiên 3 biến gọi là bảng ngẫu nhiên 3 chiều. Trong mục này, chúng ta sửdụng bộ dữliệu afmahoa (bộ dữliệu đã xửlý được mã hóa từ file dữliệu afterlife.xlsx) để làm ví dụ.

Bảng tần số và tần suất

Lập bảng tần số và tần suất cho biến Sex

Để lập bảng tần số và tần suất cho biến Sex, ta thực hiện câu lệnh sau:

af<-read.xlsx(“afterlife.xlsx”, sheetIndex =1, header =TRUE):đọc file afterlife.xlsx và đặt tên af.

afmahoa<-subset(af, Believe <5):câu lệnh trích xuất những quan sát mà giá trịcủa biến Believe <5 và đặt tên afmahoa.

table(afmahoa$Sex):câu lệnh lập bảng tần sốcho biến Sex.

table(afmahoaSex/(sum(afmahoaSex)): câu lệnh lập bảng tần suất cho biến Sex.

head(afmahoa)
## # A tibble: 6 × 2
##     Sex Believe
##   <dbl>   <dbl>
## 1     2       1
## 2     2       0
## 3     1       0
## 4     2       0
## 5     2       1
## 6     2       1
table(afmahoa$Sex)
## 
##   1   2 
## 519 741
table(afmahoa$Sex)/sum(table(afmahoa$Sex))
## 
##         1         2 
## 0.4119048 0.5880952

Bằng các câu lệnh tương tự chúng ta có thể lập bảng tần số và tần suất cho biến Believe và ta được kết quả.

head(afmahoa)
## # A tibble: 6 × 2
##     Sex Believe
##   <dbl>   <dbl>
## 1     2       1
## 2     2       0
## 3     1       0
## 4     2       0
## 5     2       1
## 6     2       1
table(afmahoa$Believe)
## 
##   0   1 
## 428 832
table(afmahoa$Believe)/sum(table(afmahoa$Believe))
## 
##         0         1 
## 0.3396825 0.6603175

Bảng hai chiều

Để tạo bảng hai chiều chúng ta sử dụng câu lệnh sau:

table(afmahoaSex,afmahoa$Believe):câu lệnh tạo bảng hai chiều cho 2 biến Sex và Believe.

table(afmahoa$Sex, afmahoa$Believe)
##    
##       0   1
##   1 188 331
##   2 240 501

Tính OddsRatio

Đểtính OddsRatio của hàng 1 và hàng 2 trong bảng hai chiều, ta thực hiện câu lệnh sau:

B1. install.packages(“DescTools”):cài đặt gói DescTools.

B2. library(DecsTools):gọi gói DescTools.

B3. OddsRatio(data, conf.level =NULL, y =NULL, method = “wald”): câu lệnh tính giá trịOddsRatio; trong đó: data là bảng hai chiều; conf.level: độtin cậy mặc nhiên 95%; y là véc tơ các giá trịcần tính giá trịOddsRatio; method =“wald”: phương pháp wald

B1. library(DecsTools):gọi packages DescTools.

B2. v<-c(189, 104, 10845, 10933): câu lệnh tạo véc tơ v.

B3.data<-matrix(v, 2):câu lệnh tạo ma trận cấp 2 (bảng 2 chiều) và đặt tên data.data: câu lệnh xem data.

B4. y<-c(189, 104):câu lệnh tạo véc tơ y.

B5. OddsRatio(data, conf.level =NULL, y =NULL, method = “wald”): câu lệnh tính OddsRatio.

library(DescTools)
## Warning: package 'DescTools' was built under R version 4.3.1
v <- c(189, 104, 10845, 10933)
x <- matrix(v, 2, 2)
y <- c(189, 104)
OddsRatio(x, conf.level = 0.95, y = NULL, method = "wald")
## odds ratio     lwr.ci     upr.ci 
##   1.832054   1.440042   2.330780

Kết quả tỷ lệ chênh (OddsRatio) là 1,832054. Giá trị này cho chúng ta biết tỷ lệ người bị bệnh nhồi máu cơ tim đối với nhóm người dùng Placebo(giảdược) cao hơn 83,2% so với nhóm người sửdụng thuốc Aspirin.

Một số bài toán ước lượng

Ước lượng tỷl ệ một tổng thể

Để làm bài toán ước lượng tỷlệbằng R, ta thực hiện câu lệnh sau:

B1. install.packages(“DescTools”): cài đặt gói DescTools.

B2. library(DecsTools): gọi gói DescTools.

B3. BinomCI(k, n, conf.level =NULL, method = “wald”):câu lệnh ước lượng tỷlệmột tổng thể; trong đó, k: sốphần tửcó tính chấtA, n: sốphần tử mẫu, conf.level =NULL: độtin cậy mặc định là 95%, method =wald: phương pháp wald.

Chúng ta lấy dữ liệu từ file có tên afterlife.xlsx dểminh họa cho các câu lệnh trên.

Để ước lượng tỷ lệ những người tin rằng “Tồn tại một thế giới khác sau khi chết” ta làm như sau:

library(DescTools)
af <- read_excel("C:/Users/pc/Downloads/afterlife.xlsx")
af1 <- af$Believe
af2 <- af1[af1 < 5]
k <- length(af2[af2 < 3])
n <- length(af2)
BinomCI(k, n, conf.level = 0.95, method = "wald")
##            est    lwr.ci    upr.ci
## [1,] 0.6603175 0.6341672 0.6864677