Trong một số trường hợp chúng ta có thể không sử dụng hết các biến số hoặc tất cả các quan sát trong 1 file dữ liệu, chúng ta có thể trích dữ liệu từ 1 dataframe có sẵn bằng những câu lệnh đơn giản, trong nội dung này chúng ta sử dụng bộ số liệu CPS1988.csv để làm ví dụ minh họa. Trước hết chúng ta sơ bộ file dữ liệu có tên CPS1988.csv bằng câu 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
CPS1988:câu lệnh cho biết chi tiết các biến của đối tượng CPS1988.
library(AER)
## Warning: package 'AER' was built under R version 4.3.1
## Loading required package: car
## Warning: package 'car' was built under R version 4.3.1
## Loading required package: carData
## Warning: package 'carData' was built under R version 4.3.1
## Loading required package: lmtest
## Warning: package 'lmtest' was built under R version 4.3.1
## Loading required package: zoo
## Warning: package 'zoo' was built under R version 4.3.1
##
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
## Loading required package: sandwich
## Warning: package 'sandwich' was built under R version 4.3.1
## Loading required package: survival
library(DT)
## Warning: package 'DT' was built under R version 4.3.1
data(CPS1988)
CPS1988
Có thể trích xuất ra một dataframe con bằng cách chỉ định cụ thể quan sát nào muốn lấy theo vị trí của hàng. Câu lệnh 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.
CPS1<-CPS1988[c(1, 3, 100),]:trích xuất các quan sát dòng 1, 3, 100 của đối tượng CPS1988 và đặt tên CPS1.
CPS2<-CPS1988[c(1: 3, 10, 100),]:trích xuất các quan sát dòng từ 1 đến dòng 3, dòng 10, dòng 100 của đối tượng CPS1988 và đặt tên CPS2.
Kết quả của hai câu lệnh trên:
CPS1 <- CPS1988[c(1,3,10),]
CPS1
CPS2 <- CPS1988[c(1,3,10,100),]
CPS2
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.
CPS3 <- CPS1988[c(2:4)]
head(CPS3)
Để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)
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")
dim(CPS5)
## [1] 2524 7
head(CPS5)
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)
head(CPS6)
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)
head(CPS7)
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.
library(readxl)
af <- read_excel("C:/Users/ASUS/Downloads/afterlife.xlsx")
af
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, 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.
Dữ liệu bị khuyết.
Không thể chọn.
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:
afmahoa<-subset(af, Believe <5)
dim(afmahoa)
## [1] 1260 2
afmahoa$Believe[afmahoa$Believe <=2] <-1
afmahoa$Believe[afmahoa$Believe >2] <-0
head(afmahoa)
Sau khi thực hiện các câu lệnh trên, kết quả cho thấy đối tượng afmahoa chỉ còn 1260 quan sát, biến Believe chỉ nhận một trong hai giá trị: 0, 1.
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:
head(afmahoa)
table(afmahoa$Sex)
##
## 1 2
## 519 741
#lập bảng tần suất
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ả.
table(afmahoa$Believe)
##
## 0 1
## 428 832
#lập bảng tần suất
table(afmahoa$Believe)/sum(table(afmahoa$Believe))
##
## 0 1
## 0.3396825 0.6603175
Để tạo bảng hai chiều chúng ta sử dụng câu lệnh sau:
table(afmahoa$Sex,afmahoa$Believe)
##
## 0 1
## 1 188 331
## 2 240 501
Để 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:
library(DescTools)
## Warning: package 'DescTools' was built under R version 4.3.1
##
## Attaching package: 'DescTools'
## The following object is masked from 'package:car':
##
## Recode
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.
Chúng ta lấy dữliệu từ file có tên afterlife.xlsx để 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:
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
Ta được khoảng ước lượng tỷ lệ những người tin “Tồn tại thế gới khác sau khi chết” với độ tin cậy 95% là: 0.6341672≤𝑝≤0.6864677
Để thực hiện ước lượng sự khác biệt tỷ lệ hai tổng thể bằng R, ta thực hiện các câu lệnh sau:
af1 <- subset(af, Believe <5)
table(af1)
## Believe
## Sex 1 2 3 4
## 1 79 252 118 70
## 2 79 422 160 80
n1<-table(af1$Sex)[1]
n2<-table(af1$Sex)[2]
k1<-table(af1$Sex,af1$Believe)[1,1]+table(af1$Sex,af1$Believe)[1,2]
k2<-table(af1$Sex,af1$Believe)[2,1]+table(af1$Sex,af1$Believe)[2,2]
BinomDiffCI(k2, n2, k1, n1, conf.level =0.95, method = "wald")
## est.2 lwr.ci upr.ci
## [1,] 0.03834843 -0.01499184 0.09168869
Kết quả khoảng ước lượng sự khác biệt tỷ lệ Nam và Nữ tin “Tồn tại thế gới khác sau khi chết” với độ tin cậy 95% là: −0,01499184 ≤ p1−p2 ≤ 0,09168869
Đểthực hiện kiểm định tính độc lập cho hai biến định danh bằng R ta làm như sau.B1. Nhập dữliệu (bảng ngẫu nhiên) cho đềbài.B2. Thực hiện kiểm định tính độc lập 2biến định danh bởicâu lệnh: chisq.test( ).Chúng ta minh họa kiểm định trên thông qua ví dụsau:
ungho <- c(182,213,203)
phandoi <- c(154,138,110)
data1 <- as.data.frame(rbind(ungho, phandoi))
names(data1) <- c( "Thap", "Trung bình", "Cao")
data1
chisq.test(data1)
##
## Pearson's Chi-squared test
##
## data: data1
## X-squared = 7.8782, df = 2, p-value = 0.01947
Từ bảng kết quảtrên, ta có p-value=0,01947<0,05: Bác bỏ H0
Kết luận, sự ủng hộ của người dân trong nước về một sắc thuế mới có phụ thuộc vào mức thu nhập của họ,với mức ý nghĩa 5%.
Để thực hiện kiểm định tính độc lập cho biến định tính có thang đo thứ bậc ta thực hiện các bước sau:
cadem <- c(81,15,9)
cangay <- c(118,28,10)
data2 <- as.matrix(rbind(cadem, cangay))
data2
## [,1] [,2] [,3]
## cadem 81 15 9
## cangay 118 28 10
Ta cần kiểm định về tính độc lập của X (ca sản xuất) và Y (chất lượng sản phẩm), giảthuyết H0: X và Y độc lập nhau.
Đối với X, ta gán 0 cho ca đêm, 1 cho ca ngày.
Đối với Y ta sửdụng điểm midrank: Loại 3 được gán số 5,5; loại 2 được gán số 24,5;loại 1 được gán số 97,5.
Các bước kiểm định tính độc lập cho 𝑋và 𝑌được thực hiện như sau:
library(vcdExtra)
## Warning: package 'vcdExtra' was built under R version 4.3.1
## Loading required package: vcd
## Warning: package 'vcd' was built under R version 4.3.1
## Loading required package: grid
## Loading required package: gnm
## Warning: package 'gnm' was built under R version 4.3.1
##
## Attaching package: 'vcdExtra'
## The following object is masked from 'package:carData':
##
## Burt
data <- as.matrix(rbind(cadem,cangay))
data
## [,1] [,2] [,3]
## cadem 81 15 9
## cangay 118 28 10
CMHtest(data, rscores=c(0,1), cscore = c(97.5,24.5,5.5))
## Cochran-Mantel-Haenszel Statistics
##
## AltHypothesis Chisq Df Prob
## cor Nonzero correlation 0.025707 1 0.87262
## rmeans Row mean scores differ 0.025707 1 0.87262
## cmeans Col mean scores differ 0.928770 2 0.62852
## general General association 0.928770 2 0.62852
Từ bảng kết quả trên ta có p-value=0,87260>0,05: Chấp nhận H0
Kết luận, chất lượng sản phẩm không phụ thuộc vào ca sản xuất, với mức ý nghĩa 5%.