Ta sẽ gọi các pakage làm việc cần thiết cho việc trực quan hóa dữ liệu.Sau đó gán dữ liệu có tên a
library(tidyverse)
library(DT)
library(AER)
library(ggplot2)
library(scales)
library(utf8)
data("Medicaid1986")
medi <- Medicaid1986
datatable(medi,options = list(scrollX = TRUE))
Tiếp theo ta gán tên các biến và thêm một cột biến mới vào dữ liệu bằng cách, phân tổ biến tuổi của chủ hộ gia đình 3 tổ (độ tuổi [19-30] gọi là trẻ tuổi, độ tuổi (30-50] gọi là trung niên, độ tuổi (50-60] gọi là cao tuổi).
names(medi) <- c("vi","ex","ch","ag","in","he1","he2","ac","ma","ge","et","sc","en","pr")
medi$tage <- cut(medi$ag,breaks=c(15,30,60,110),labels=c('trẻ tuổi','trung niên','cao tuổi'))
datatable(medi,options = list(scrollX = TRUE, pageLength = 5))
Ta sẽ vẽ đồ thị phân có đường hồi quy để thể hiện mối tương quan giữa hai biến số lần bác sĩ đến khám và số tuổi của bệnh nhân
medi %>% ggplot(aes(x = vi, y = ag )) +
geom_point(color="purple") +
geom_smooth(formula = y ~ x, method = "lm", color= "red") +
xlab("Tuổi bệnh nhân") +
ylab("Số lần bác sĩ đến khám") +
ggtitle("ĐỒ THỊ SỐ LẦN BÁC SĨ ĐẾN KHÁM VÀ SỐ TUỔI BỆNH NHÂN")
cor(medi$vi,medi$ag)
## [1] 0.09516099
Nhận xét: Qua đồ thị ta thấy rằng số tuổi càng tăng thì số lần bác sĩ tới khám tăng theo. Tuy nhiên hệ số tương quan rất thấp (0.0952) nên các điểm tập trung dày đặt ở đầu hồi quy ## Biểu đồ cột
Biểu đồ đếm tỉ lệ của các nhóm tuổi
table(medi$tage)
##
## trẻ tuổi trung niên cao tuổi
## 270 214 512
medi |> group_by(tage) |>
summarise(n = n()) |>
mutate(pG = percent(n/sum(n), accuracy = ,01)) |>
ggplot(aes(x = tage, y = pG)) +
geom_col(fill = 'lightblue') +
theme_classic() +
labs(x = 'Nhóm tuổi', y = 'Tỷ lệ %')
Qua biểu đồ ta thấy rằng số lượng người cao tuổi chiếm tỉ lệ nhiều nhất
medi_summary <- medi %>%
group_by(tage) %>%
summarise(n = n()) %>%
mutate(percentage = n/sum(n))
ggplot(medi_summary, aes(x = "", y = percentage, fill = tage)) +
geom_bar(stat = "identity", width = 1) +
geom_text(aes(label = paste0(round(percentage*100), "%")), position = position_stack(vjust = 0.5))+
coord_polar("y", start = 0) +
scale_fill_manual(values = c("blue", "red", "green"), name = "Nhóm tuổi") +
labs(title = "BIỂU ĐỒ PHÂN BỐ NHÓM TUỔI") +
theme_minimal() +
theme(legend.position = "bottom")
Package: Ecdat - dataset: Budget food.
GIẢI THÍCH Dữ liệu: Dữ liệu BudgetFood là dữ liệu về việc chi tiêu ngân sách cho đồ ăn của các gia đình tây ban nha. Dữ liệu bao gồm 23972 quan sát và 6 biến.
wfood: tỉ lệ phần trăm mà gia đình chi tiêu cho thức ăn trong tổng chi tiêu gia đình
totalexp: tổng chi tiêu gia đình
age: tuổi
size: số người trong gia đình
town: quy mô thị trấn mà gia đình ở được chia thành 5 nhóm (từ 1: thị trấn nhỏ đến 5: thị trấn lớn)
sex: giới tính
Ta thực hiện việc gọi các package cần thiết cho việc phân tích như tidyverse, DT, Ecdat và gọi dataset BudgetFood. Sau đó gán dataset vào biến bf
library(tidyverse)
library(DT)
library(Ecdat)
data(BudgetFood)
bf <- BudgetFood
datatable(bf)
Bảng tổng hơp tỉ lệ chi tiêu thức ăn của từng độ tuổi theo giới tính
food <- bf %>% select(sex,age,wfood,town)%>%pivot_wider(names_from = age,values_from = wfood) %>% arrange(town)
## Warning: Values from `wfood` are not uniquely identified; output will contain list-cols.
## • Use `values_fn = list` to suppress this warning.
## • Use `values_fn = {summary_fun}` to summarise duplicates.
## • Use the following dplyr code to identify duplicates.
## {data} %>%
## dplyr::group_by(sex, town, age) %>%
## dplyr::summarise(n = dplyr::n(), .groups = "drop") %>%
## dplyr::filter(n > 1L)
datatable(food, options= list(scollX= TRUE, pagelength=5))
Bảng tổng hợp tổng chi tiêu của từng độ tuổi theo giới tính
expa <- bf %>% select(sex,age,totexp,town)%>%pivot_wider(names_from = age,values_from = totexp) %>% arrange(town)
## Warning: Values from `totexp` are not uniquely identified; output will contain
## list-cols.
## • Use `values_fn = list` to suppress this warning.
## • Use `values_fn = {summary_fun}` to summarise duplicates.
## • Use the following dplyr code to identify duplicates.
## {data} %>%
## dplyr::group_by(sex, town, age) %>%
## dplyr::summarise(n = dplyr::n(), .groups = "drop") %>%
## dplyr::filter(n > 1L)
datatable(expa, options= list(scollX= TRUE, pagelength=5))
Bảng tổng hợp số lượng thành viên gia đình của từng độ tuổi theo giới tính
siz <- bf %>% select(sex,age,size,town)%>%pivot_wider(names_from = age,values_from = size) %>% arrange(town)
## Warning: Values from `size` are not uniquely identified; output will contain list-cols.
## • Use `values_fn = list` to suppress this warning.
## • Use `values_fn = {summary_fun}` to summarise duplicates.
## • Use the following dplyr code to identify duplicates.
## {data} %>%
## dplyr::group_by(sex, town, age) %>%
## dplyr::summarise(n = dplyr::n(), .groups = "drop") %>%
## dplyr::filter(n > 1L)
datatable(siz, options= list(scollX= TRUE, pagelength=5))
ở bước này ta chuyển đổ dữ liệu thành rộng Bảng tổng hơp tỉ lệ chi tiêu thức ăn của từng độ tuổi theo giới tính
food1 <- food%>% pivot_longer(cols= names(food)[-c(1, 2)], names_to = "age",values_to = "wfood")
datatable(food1)
Bảng tổng hợp tổng chi tiêu của từng độ tuổi theo giới tính
expa1 <- expa%>% pivot_longer(cols= names(expa)[-c(1, 2)], names_to = "age",values_to = "totexp")
datatable(expa1)
Bảng tổng hợp số lượng thành viên gia đình của từng độ tuổi theo giới tính
siz1 <- siz%>% pivot_longer(cols= names(siz)[-c(1, 2)], names_to = "age",values_to = "size")
datatable(siz1)
GIẢI THÍCH Dữ liệu: Dữ liệu lấy từ cuộc khảo sát người được cứu thương. Dữ liệu bao gồm những người được cứu thương ở quận Santa Barbara và Ventura của bang California. Dữ liệu chứa 996 quan sát và chứa 14 biến:
visits: Số bác sĩ đến Khám
exposure: Thời gian quan sát đối với dịch vụ chăm sóc ngoại trú.
children: số đứ trẻ có trong gia đình
age: số tuổi.
income Annual household: thu nhập thường niên trong gia đình.
health1: Thành phần chính đầu tiên của ba biến tình trạng sức khỏe: chức năng hạn chế, tình trạng cấp tính và tình trạng mãn tính.
health2: Thành phần chính thứ 2 của ba biến tình trạng sức khỏe: chức năng hạn chế, tình trạng cấp tính và tình trạng mãn tính.
access: Sự sẵn có của các dịch vụ y tế (0 = khả năng tiếp cận thấp, 1 = khả năng tiếp cận cao). married: có kết hôn hay không
gender: giới tính
ethnicity: dân tộc
school: số năm học ở trường
enroll; có phải cá nhân đăng ký nhập viện
program: chương trình chăm sóc
Ta lấy dữ liệu Medicaid 1986 từ package AER
Sau đó gán dataset Medicaid 1986 vào a và sử sụng lệnh na.omit để loại bỏ các dữ liệu na.
Sử dụng lệnh names để đặt tên cho 14 biến
Chúng ta lập bảng về tình trạng kết hôn bằng lệnh table và chọn biến married (đặt tên là ma)
Kết quả cho thấy:
Số người chưa kết hôn chiếm cao nhất là 780 người trong tổng số 996 người chiếm khoảng 78%
Số người kết hôn là 216 người chiếm khoảng 22%
##
## no yes
## 780 216
##
## no yes
## 78.31325 21.68675
##
## (-1,18] (18,65] (65,95]
## 10 481 501
##
## (-1,18] (18,65] (65,95]
## 0.01004016 0.48293173 0.50301205
##
## (0,60] (60,90] (90,150]
## 3 48 945
vậy số ngày người bị thương dưới 60 ngày là 3 người thấp nhất chiếm 0,3% số người bị thương ở viện từ 60 đến 90 ngày là 48 người chiếm khoảng 4,8% Số người bị thương ở viện từ 90 ngày trở lên chiếm cao nhất 94,87% với 945 người.
##
## (-1,3] (3,6] (6,9]
## 902 88 6
vậy gia đình có dưới 3 con chiếm nhiều nhất v́ơi 902 người chiếm khoảng 90,56% gia đình có từ 4 đến 6 con chiếm 8,83% với 88 người. gia đình có 7 con trở lên chiếm thấp nhất với 6 người chiếm khoảng 0,6% ##Phân tích biến gender
##
## male female
## 153 843
Nam chiếm ít nhất với 153 người chiếm khoảng 15,35% Nữ chiếm nhiều nhất với 843 người chiếm khoảng 84,65%
Phân tích biến Program
## afdc ssi
## 485 511
##
## afdc ssi
## 0.4869478 0.5130522
vâỵ afdc chiếm 48,69% còn ssi chiếm 51,31%
Phân tích biến income
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.500 6.000 7.990 8.191 8.500 17.500
Min: thu nhập thấp nhất là 5
Max: thu nhập cao nhất là 17.5
Median: thu nhập trug bình là 8.191
1st Qu.: là tứ phân vị nhất nghĩa là 25% thu nhập dưới 6
3rd Qu.: là tứ phân vị thứ ba nghĩa là 75% thu nhập dưới 8.5
## (-1,6] (6,12] (12,18]
## 465 425 106
##
## (-1,6] (6,12] (12,18]
## 0.4668675 0.4267068 0.1064257
summary(a$et)
## cauc other
## 691 305
prop.table(table(a$et))
##
## cauc other
## 0.6937751 0.3062249
vậy người tây chiếm 69,38%, khác chiếm 30,62%
## (-1,5] (5,10] (10,15] (15,20]
## 215 305 445 31
##
## (-1,5] (5,10] (10,15] (15,20]
## 21.58635 30.62249 44.67871 3.11245
Những người học dưới 5 năm chiếm 21,59%
Những người học từ 6 năm đến 10 năm chiếm 30,62%
Những người học từ 11 năm đến 15 năm chiếm nhiều nhất với 44,68%
Những người học từ 16 năm đến 20 năm chiếm ít nhất với 3,11%
## no yes
## 506 490
##
## no yes
## 50.80321 49.19679
Số người tự đăng ký là 49,2%, còn lại là 50,8%
## (-3,0] (0,3] (3,6] (6,9]
## 567 400 28 1
##
## (-3,0] (0,3] (3,6] (6,9]
## 0.569277108 0.401606426 0.028112450 0.001004016
Mức độ tổng quát sức khỏe của biến health1 từ khoảng -3 đến 0 chiếm tỉ lệ nhiều nhất khoảng 56.93% với 567 người
Mức độ tổng quát sức khỏe của biến health 1 từ khoảng 0 đến 3 chiếm tỉ lệ khoảng 40,16% với 400 người
Mức độ tổng quát sức khỏe của biến health 1 từ khoảng 3 đến 6 chiếm khoảng 2.81% với 28 người
Mức độ tổng quát sức khỏe của biến health 1 từ khoảng 6 đến 9 chiếm tỉ lệ ít nhất khoảng 0,1% với 1 người
## (-3,-1] (-1,1] (1,4]
## 74 835 87
##
## (-3,-1] (-1,1] (1,4]
## 0.07429719 0.83835341 0.08734940
Mức độ tổng quan sức khỏe của biến health 2 từ khoảng -3 đ́ến -1 chiếm tỉ lệ ít nhất với 74 người chiếm khoảng 7,43%
Mức độ tổng quát sức khỏe của biến health 2 từ khoảng -1 đến 1 chiếm tỉ lệ nhiều nhất với 835 người chiếm khoảng 83,84%
Mức độ tổng quát sức khỏe của biến health 2 từ khoảng 1 đến 4 chiếm tỉ lệ khoảng 8,73% với 87 người
GIẢI THÍCH Dữ liệu: Dữ liệu lấy từ cuộc khảo sát người được cứu thương. Dữ liệu bao gồm những người được cứu thương ở quận Santa Barbara và Ventura của bang California. Dữ liệu chứa 996 quan sát và chứa 14 biến:
visits: Số bác sĩ đến Khám
exposure: Thời gian quan sát đối với dịch vụ chăm sóc ngoại trú.
children: số đứ trẻ có trong gia đình
age: số tuổi.
income Annual household: thu nhập thường niên trong gia đình.
health1: Thành phần chính đầu tiên của ba biến tình trạng sức khỏe: chức năng hạn chế, tình trạng cấp tính và tình trạng mãn tính.
health2: Thành phần chính thứ 2 của ba biến tình trạng sức khỏe: chức năng hạn chế, tình trạng cấp tính và tình trạng mãn tính.
access: Sự sẵn có của các dịch vụ y tế (0 = khả năng tiếp cận thấp, 1 = khả năng tiếp cận cao). married: có kết hôn hay không
gender: giới tính
ethnicity: dân tộc
school: số năm học ở trường
enroll; có phải cá nhân đăng ký nhập viện
program: chương trình chăm sóc
Tải và kích hoạt package AER
library(AER)
Lấy dữ liệu của Medicaid1986 và gán vào biến a
data("Medicaid1986")
a <- Medicaid1986
Mô tả cấu trúc dữ liệu
str(a)
## 'data.frame': 996 obs. of 14 variables:
## $ visits : int 0 1 0 0 11 3 0 6 1 0 ...
## $ exposure : int 100 90 106 114 115 102 92 92 117 101 ...
## $ children : int 1 3 4 2 1 1 2 1 1 1 ...
## $ age : int 24 19 17 29 26 22 24 21 21 24 ...
## $ income : num 14.5 6 8.38 6 8.5 ...
## $ health1 : num 0.495 0.52 -1.227 -1.524 0.173 ...
## $ health2 : num -0.854 -0.969 0.317 0.457 -0.599 0.062 0.202 -0.981 0.317 -0.562 ...
## $ access : num 0.5 0.17 0.42 0.33 0.67 0.25 0.5 0.67 0.25 0.67 ...
## $ married : Factor w/ 2 levels "no","yes": 1 1 1 1 1 1 1 2 1 2 ...
## $ gender : Factor w/ 2 levels "male","female": 2 2 2 2 2 2 2 2 2 2 ...
## ..- attr(*, "contrasts")= num [1:2, 1] 1 0
## .. ..- attr(*, "dimnames")=List of 2
## .. .. ..$ : chr [1:2] "male" "female"
## .. .. ..$ : chr "male"
## $ ethnicity: Factor w/ 2 levels "cauc","other": 1 1 1 1 1 2 1 1 1 1 ...
## ..- attr(*, "contrasts")= num [1:2, 1] 1 0
## .. ..- attr(*, "dimnames")=List of 2
## .. .. ..$ : chr [1:2] "caucasian" "other"
## .. .. ..$ : chr "caucasian"
## $ school : int 13 11 12 12 16 12 11 11 12 15 ...
## $ enroll : Factor w/ 2 levels "no","yes": 2 2 2 2 2 2 2 2 2 2 ...
## $ program : Factor w/ 2 levels "afdc","ssi": 1 1 1 1 1 1 1 1 1 1 ...
Lấy 3 dòng đầu tiên
## visits exposure children age income health1 health2 access married gender
## 1 0 100 1 24 14.500 0.495 -0.854 0.50 no female
## 2 1 90 3 19 6.000 0.520 -0.969 0.17 no female
## 3 0 106 4 17 8.377 -1.227 0.317 0.42 no female
## ethnicity school enroll program
## 1 cauc 13 yes afdc
## 2 cauc 11 yes afdc
## 3 cauc 12 yes afdc
Gán tên các biến mới
#Gán tên viết tắt cho các biến thuộc dữ liệu "g" cho tiện thao tác
names(a) <- c("vi","ex","ch","ag","in","he1","he2","ac","ma","ge","et","sc","en","pr")
Tóm tắt thống kê biến age
summary(a$ag)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 16.00 29.00 66.00 55.21 78.00 105.00
phân tổ biến age và lập bảng tần số biến age
age4 <- cut(a$ag,4)
table(cut(a$ag,4))
##
## (15.9,38.2] (38.2,60.5] (60.5,82.8] (82.8,105]
## 398 86 365 147
Lập bảng tần số biến age với biến visit
table(cut(a$vi,4),age4)
## age4
## (15.9,38.2] (38.2,60.5] (60.5,82.8] (82.8,105]
## (-0.05,12.5] 394 86 361 146
## (12.5,25] 3 0 3 1
## (25,37.5] 0 0 0 0
## (37.5,50] 1 0 1 0
Tần suất biến age4
x=table(cut(a$vi,4),age4)
prop.table(x)
## age4
## (15.9,38.2] (38.2,60.5] (60.5,82.8] (82.8,105]
## (-0.05,12.5] 0.395582329 0.086345382 0.362449799 0.146586345
## (12.5,25] 0.003012048 0.000000000 0.003012048 0.001004016
## (25,37.5] 0.000000000 0.000000000 0.000000000 0.000000000
## (37.5,50] 0.001004016 0.000000000 0.001004016 0.000000000
Lấy các biến có age= 30 và gán vào biến age30
age30 <- a[a$ag==25,]
head(age30)
## vi ex ch ag in he1 he2 ac ma ge et sc en pr
## 38 2 106 1 25 8.500 -0.608 -0.078 0.67 no female other 14 yes afdc
## 42 0 103 2 25 6.000 -0.583 -0.193 0.50 no female cauc 6 yes afdc
## 48 0 101 1 25 6.000 0.173 -0.599 0.17 no female cauc 12 yes afdc
## 68 2 101 1 25 6.000 1.251 0.485 0.00 no female other 10 yes afdc
## 133 0 94 1 25 8.377 0.309 -0.612 0.17 no female cauc 13 yes afdc
## 162 10 106 2 25 8.500 2.082 1.479 0.67 no female cauc 15 yes afdc
Lấy các biến có age>85 và school=10
age85sch10 <- a[a$ag>85&a$sc==10,]
số lượng biến và quan sát của biến age85sch10
dim(age85sch10)
## [1] 1 14
lấy ngẫu nhiên 2 dòng
aa <- a[sample(nrow(a),2),]
aa
## vi ex ch ag in he1 he2 ac ma ge et sc en pr
## 145 0 101 2 31 8.5 0.792 -0.994 0.33 no female cauc 10 yes afdc
## 448 0 110 5 22 8.5 -1.363 0.329 0.35 no female cauc 9 no afdc
vẽ đồ thị
summary(a$en)
## no yes
## 506 490
prop.table(table(a$en))*100
##
## no yes
## 50.80321 49.19679
plot(a$en)