1 Bài tập tuần 6

1.1 Scrape dữ liệu từ trang web CoinMarket

library(jsonlite)
library(rvest) 
library(tidyverse)
library(DT)
  • Gọi các package cần thiết phục vụ cho việc cào dữ liệu
links <- "https://coinmarketcap.com/"
data <- read_html(links)

Name <- data %>% html_nodes(".cmc-link .kKpPOn") %>% html_text()
Price <- data %>% html_nodes(".iVdfNf span") %>% html_text()
ohours <- data %>% html_nodes("td:nth-child(5) .sc-97d6d2ca-0") %>% html_text()
thours <- data %>% html_nodes("td:nth-child(6) .sc-97d6d2ca-0") %>% html_text()
sdays <- data %>% html_nodes("td:nth-child(7) .sc-97d6d2ca-0") %>% html_text()
marketcap <- data %>% html_nodes(".bOsKfy") %>% html_text()
Cirsup <- data %>% html_nodes("td:nth-child(10)") %>% html_text()
acroname <- data %>% html_nodes(".coin-item-symbol") %>% html_text()

Coinmarket <- data.frame(Name, acroname, Price, ohours, thours, sdays, marketcap, Cirsup)
datatable(Coinmarket)

Tạo một data frame gồm 8 biến, dữ liệu của các biến này được lấy từ trang web Coinmarketcap.com. CoinMarketCap là một trang web được sử dụng để theo dõi, phân tích và cung cấp thông tin về thị trường tiền điện tử. Trang web này chứa thông tin về hàng trăm loại tiền điện tử khác nhau, bao gồm cả các đồng tiền điện tử nổi tiếng như Bitcoin, Ethereum, Ripple và Litecoin.

  • Name: Tên của các đồng tiền điện tử

  • acroname: Ký hiệu của các đồng tiền điện tử

  • Price: Giá hiện tại của đồng tiền điện tử

  • ohours: tỷ lệ tăng/ giảm của đồng tiền trong 1h qua

  • thours: tỷ lệ tăng/ giảm của đồng tiền trong 24h qua

  • sdays: tỷ lệ tăng giảm của đồng tiền trong 7 ngày qua

  • marketcap: Vốn hoá thị trường của đồng tiền đó

  • Cirsup: Số lượng đồng tiền đang lưu thông trên thị trường

1.2 Tạo một function để xử lý dữ liệu lặp lại

library(tidyverse)
library(stringr)
library(AER)
library(DT)
data("TravelMode")
d <- TravelMode

1.2.1 Function để tính toán thống kê

summarisee <- function(data, var) {
  data %>% summarise( min = min({{var}}, na.rm = T), max = max({{var}}, na.rm=T), mean = mean({{var}}, na.rm=T), sum = sum({{var}},na.rm=T),median = median({{var}},na.rm=T), numeric = is.numeric({{var}}), vector= is.vector({{var}}), sd = sd({{var}}, na.rm=T),var = var({{var}}, na.rm=T), quantile = quantile({{var}}, na.rm = T), n= n())

}
  • Tạo một function để tính toán thống kê cho giá trị của các biến. Function tên là Summarisee, dùng để tính giá trị nhỏ nhất, giá trị lớn nhất, giá trị trung bình, tổng giá trị, trung vị, kiểm tra bộ giá trị của biến có phải dạng số hay không, kiểm tra các giá trị của biến có phải dạng vector hay không , tính độ lệch chuẩn và phương sai của các giá trị của biến.

Thực hành function này với bộ dữ liệu TravelMode (Phần mô tả dữ liệu ở mục 5.1.1)

summarisee(d, d$vcost)
##   min max     mean   sum median numeric vector     sd      var quantile   n
## 1   2 180 47.76071 40119     39    TRUE   TRUE 32.371 1047.882     2.00 840
## 2   2 180 47.76071 40119     39    TRUE   TRUE 32.371 1047.882    23.00 840
## 3   2 180 47.76071 40119     39    TRUE   TRUE 32.371 1047.882    39.00 840
## 4   2 180 47.76071 40119     39    TRUE   TRUE 32.371 1047.882    66.25 840
## 5   2 180 47.76071 40119     39    TRUE   TRUE 32.371 1047.882   180.00 840
  • Các giá trị thống kê của biến vcost(chi phí phương tiện)
summarisee(d,d$gcost)
##   min max     mean   sum median numeric vector       sd      var quantile   n
## 1  30 269 110.8798 93139  101.5    TRUE   TRUE 47.97835 2301.922     30.0 840
## 2  30 269 110.8798 93139  101.5    TRUE   TRUE 47.97835 2301.922     71.0 840
## 3  30 269 110.8798 93139  101.5    TRUE   TRUE 47.97835 2301.922    101.5 840
## 4  30 269 110.8798 93139  101.5    TRUE   TRUE 47.97835 2301.922    144.0 840
## 5  30 269 110.8798 93139  101.5    TRUE   TRUE 47.97835 2301.922    269.0 840
  • Các giá trị thống kê của biến gcost(chi phí chung)
summarisee(d,d$travel)
##   min  max     mean    sum median numeric vector       sd      var quantile   n
## 1  63 1440 486.1655 408379    397    TRUE   TRUE 301.4391 90865.54     63.0 840
## 2  63 1440 486.1655 408379    397    TRUE   TRUE 301.4391 90865.54    234.0 840
## 3  63 1440 486.1655 408379    397    TRUE   TRUE 301.4391 90865.54    397.0 840
## 4  63 1440 486.1655 408379    397    TRUE   TRUE 301.4391 90865.54    795.5 840
## 5  63 1440 486.1655 408379    397    TRUE   TRUE 301.4391 90865.54   1440.0 840
  • Các giá trị thống kê của biến travel (thời gian di chuyển trên phương tiện)
summarisee(d,d$wait)
##   min max     mean   sum median numeric vector       sd     var quantile   n
## 1   0  99 34.58929 29055     35    TRUE   TRUE 24.94861 622.433     0.00 840
## 2   0  99 34.58929 29055     35    TRUE   TRUE 24.94861 622.433     0.75 840
## 3   0  99 34.58929 29055     35    TRUE   TRUE 24.94861 622.433    35.00 840
## 4   0  99 34.58929 29055     35    TRUE   TRUE 24.94861 622.433    53.00 840
## 5   0  99 34.58929 29055     35    TRUE   TRUE 24.94861 622.433    99.00 840
  • Các giá trị thống kê của biến wait(thời gian chờ đợi trước khi phương tiện di chuyển)
summarisee(d,d$income)
##   min max     mean   sum median numeric vector       sd      var quantile   n
## 1   2  72 34.54762 29020   34.5    TRUE   TRUE 19.67604 387.1467      2.0 840
## 2   2  72 34.54762 29020   34.5    TRUE   TRUE 19.67604 387.1467     20.0 840
## 3   2  72 34.54762 29020   34.5    TRUE   TRUE 19.67604 387.1467     34.5 840
## 4   2  72 34.54762 29020   34.5    TRUE   TRUE 19.67604 387.1467     50.0 840
## 5   2  72 34.54762 29020   34.5    TRUE   TRUE 19.67604 387.1467     72.0 840
  • Các giá trị thống kê của biến income (thu nhập hộ gia đình)

1.2.2 Function để group dữ liệu

groupby <- function(a,b,c,d) {
  a %>% group_by({{b}}) %>% arrange({{b}}, {{c}}) %>% slice_head(n =5) %>% arrange({{b}}) %>% select({{b}},{{c}},{{d}})
}
  • Tạo một function mới để group dữ liệu theo 2 biến b và c, bộ dữ liệu đầu vào là a. Sau đó sắp xếp trình tự xuất hiện của dữ liệu theo thứ tự đầu tiên là biến b sau đó là biến c và cuối cùng là biến d, lấy 5 dòng đầu tiên của kết quả theo từng biến.
groupby(d,mode, individual,size)
## # A tibble: 20 × 3
## # Groups:   mode [4]
##    mode  individual  size
##    <fct> <fct>      <int>
##  1 air   1              1
##  2 air   2              2
##  3 air   3              1
##  4 air   4              3
##  5 air   5              2
##  6 train 1              1
##  7 train 2              2
##  8 train 3              1
##  9 train 4              3
## 10 train 5              2
## 11 bus   1              1
## 12 bus   2              2
## 13 bus   3              1
## 14 bus   4              3
## 15 bus   5              2
## 16 car   1              1
## 17 car   2              2
## 18 car   3              1
## 19 car   4              3
## 20 car   5              2
  • Dùng function vừa tạo để group dữ liệu theo mode(phương tiện di chuyển) và individual(nhóm người).
groupby(d, choice, mode, wait)
## # A tibble: 10 × 3
## # Groups:   choice [2]
##    choice mode   wait
##    <fct>  <fct> <int>
##  1 no     air      69
##  2 no     air      64
##  3 no     air      69
##  4 no     air      64
##  5 no     air      64
##  6 yes    air      45
##  7 yes    air      90
##  8 yes    air      50
##  9 yes    air      15
## 10 yes    air      30
  • Dùng function groupby vừa tạo. Ứng với từng lựa chọn không và có, ta xem 5 kết quả khảo sát đầu tiên về mode(phương tiện di chuyển) và thời gian chờ đợi trước khi phương tiện di chuyển.
map <- function(a,b,c,d) {
  a %>% filter({{c}}>100) %>% ggplot(map = aes(x = {{b}}, y ={{c}}, color = {{d}})) + geom_point() + geom_smooth(formula = y~ x, method = "lm", color = "black")
}

1.3 Function để vẽ biểu đồ

  • Tạo function mới để vẽ biểu đồ, function map bao gồm 4 thành phần, a là bộ dữ liệu đầu vào, b ứng với giá trị biểu hiện trên trục hoành, c ứng với giá trị cần biểu hiện trên trục tung, d dùng để tô màu cho các giá trị cần thể hiện trên biểu đồ. Đầu tiên câu lệnh dùng hàm filter để lọc những giá trị lớn hơn 100 của biến c, sau đó câu lệnh tiến hành vẽ biểu đồ scatter và đường thẳng hồi quy 2 biến
map(d,income,vcost,mode)

  • Vẽ biểu đồ sự tương quan giữa thu nhập và vcost bằng function vừa tạo, income ứng với biến b, vcost ứng với biến c và mode ứng với biến d.
map(d, vcost, gcost, choice)

  • Vẽ biểu đồ sự tương quan giữa chi phí phương tiện và chi phí chung cho chuyến đi, dùng function vừa tạo ở trên, b ứng với biến vcost, c ứng với biến gcost và d ứng với biến choice.
map(d, travel,vcost,mode)

  • Vẽ biểu đồ sự tương quan giữa thời gian di chuyển trên phương tiện và chi phí phương tiện, b ứng với biến travel, c ứng với biến vcost và d ứng với biến mode. Chỉ lọc những kết quả của vcost có giá trị lớn hơn 100, đọc biểu đồ ta thấy giữa hai biến này có sự tương quan nghịch, nếu thời gian di chuyển trên phương tiện càng cao thì chi phí phương tiện càng thấp.

1.4 Lấy dữ liệu từ Worlbank và tìm hiểu các indicator

install.packages("WDI", repos="http://cran.us.r-project.org")
## package 'WDI' successfully unpacked and MD5 sums checked
## 
## The downloaded binary packages are in
##  C:\Users\PHUONG UYEN\AppData\Local\Temp\RtmpyIP6eP\downloaded_packages
library(WDI)
library(janitor)
GRGDP <- WDI(country = "all", indicator = "6.0.GDP_growth", start = 2010, end = 2022)
GRGDP <- na.omit(GRGDP)
GRGDP <- clean_names(GRGDP)
indicator <- "6.0.GDP_growth"
indicator_info <- WDIsearch(field = "indicator")
invisible(indicator)
  • Indicator code: 6.0.GDP_growth
  • Indicator name: GDP growth (annual %)
  • Mô tả: Tỉ lệ tăng trưởng hàng năm của GDP (Gross Domestic Product), đo lường sự thay đổi theo phần trăm của GDP so với năm trước đó.
  • Đơn vị : Phần trăm (%)
  • Tần suất cập nhật (Frequency): Hàng năm (Annual)
  • Nguồn dữ liệu (Source): World Bank national accounts data, and OECD National Accounts data files.
  • Phạm vi địa lý (Geographic coverage): Các quốc gia và vùng lãnh thổ trên toàn thế giới. Chỉ số này đo lường tốc độ tăng trưởng của GDP trong mỗi năm, cho phép theo dõi sự phát triển kinh tế của một quốc gia hoặc khu vực. Tỉ lệ tăng trưởng GDP thường được xem là một chỉ số quan trọng để đánh giá hiệu suất kinh tế và sự phát triển của một quốc gia.
TTER <- WDI(country = "all", indicator = "1.2.PSev.2.5usd", start = 2010, end = 2022)
TTER <- na.omit(TTER)
TTER <- clean_names(TTER)
indicator <- "1.2.PSev.2.5usd"
indicator_info <- WDIsearch(field = "indicator")
invisible(indicator)
  • Indicator code: 1.2.PSev.2.5usd
  • Tên chỉ số (Indicator name): Poverty headcount ratio at $2.50 a day (PPP) (% of population)
  • Mô tả (Description): Tỉ lệ dân số sống dưới mức nghèo $2.50 một ngày (PPP) (% dân số).
  • Đơn vị (Unit): Phần trăm (%)
  • Nguồn dữ liệu (Source): World Bank PovcalNet database.
  • Phạm vi địa lý (Geographic coverage): Các quốc gia và vùng lãnh thổ trên toàn thế giới.

Chỉ số này đo lường tỉ lệ dân số sống dưới mức nghèo $2.50 một ngày (PPP) theo tỷ lệ phần trăm của dân số toàn bộ. Dữ liệu được tính dựa trên các dữ liệu về thu nhập và thông tin về mức sống tại các quốc gia khác nhau. Chỉ số này được sử dụng để đánh giá mức độ nghèo đói và sự phân bố thu nhập trong một quốc gia hoặc khu vực.

TTTO <- WDI(country = "all", indicator = "5.1.1_MDA.TOTA.AID.UNICEF", start = 2010, end = 2022)
TTTO <- na.omit(TTTO)
TTTO <- clean_names(TTTO)
indicator <- "5.1.1_MDA.TOTA.AID.UNICEF"
indicator_info <- WDIsearch(field = "indicator")
invisible(indicator)
  • Indicator code: 5.1.1_MDA.TOTA.AID.UNICEF
  • Tên chỉ số (Indicator name): Total official development assistance (gross disbursement) for maternal, newborn, and child health (MNCH) from UNICEF (current US$)
  • Mô tả (Description): Tổng số tiền viện trợ phát triển chính thức (sự chi trả toàn diện) cho sức khỏe mẹ, trẻ sơ sinh và trẻ em từ UNICEF (US$ hiện tại).
  • Đơn vị (Unit): Đô la Mỹ (USD)
  • Nguồn dữ liệu (Source): World Bank World Development Indicators database.
  • Phạm vi địa lý (Geographic coverage): Các quốc gia và vùng lãnh thổ trên toàn thế giới.

Chỉ số này đo lường tổng số tiền viện trợ phát triển chính thức (chi trả toàn diện) từ UNICEF dành cho sức khỏe mẹ, trẻ sơ sinh và trẻ em. Đơn vị đo lường là đô la Mỹ (USD). Dữ liệu này cung cấp thông tin về quỹ viện trợ từ UNICEF để hỗ trợ các chương trình và dự án liên quan đến sức khỏe mẹ, trẻ sơ sinh và trẻ em trên toàn thế giới.

TTIR1 <- WDI(country = "all", indicator = "5.1.5_CIV.TOTA.AID.FSD", start = 2010, end = 2022)
TTIR1 <- na.omit(TTIR1)
TTIR1 <- clean_names(TTIR1)
indicator <- "5.1.5_CIV.TOTA.AID.FSD"
indicator_info <- WDIsearch(field = "indicator")
invisible(indicator)
  • Indicator code: 5.1.5_CIV.TOTA.AID.FSD
  • Tên chỉ số (Indicator name): Total official development assistance (gross disbursement) for financial sector development (current US$)
  • Mô tả (Description): Tổng số tiền viện trợ phát triển chính thức (sự chi trả toàn diện) dành cho phát triển ngành tài chính (US$ hiện tại).
  • Đơn vị (Unit): Đô la Mỹ (USD)
  • Tần suất cập nhật (Frequency): Không có thông tin cụ thể về tần suất cập nhật.
  • Nguồn dữ liệu (Source): World Bank World Development Indicators database.
  • Phạm vi địa lý (Geographic coverage): Các quốc gia và vùng lãnh thổ trên toàn thế giới.

Chỉ số này đo lường tổng số tiền viện trợ phát triển chính thức (chi trả toàn diện) dành cho phát triển ngành tài chính. Đơn vị đo lường là đô la Mỹ (USD). Dữ liệu này cung cấp thông tin về quỹ viện trợ để hỗ trợ phát triển và cải thiện ngành tài chính trong các quốc gia và vùng lãnh thổ trên toàn thế giới.

TTIR2 <- WDI(country = "all", indicator = "3.0.IncShr.q1", start = 2010, end = 2022)
TTIR2 <- na.omit(TTIR2)
TTIR2 <- clean_names(TTIR2)
indicator <- "3.0.IncShr.q1"
indicator_info <- WDIsearch(field = "indicator")
invisible(indicator)
  • Indicator code: 3.0.IncShr.q1
  • Tên chỉ số (Indicator name): Income share held by lowest 20% - Quarterly data (Phần trăm thu nhập thuộc sở hữu của 20% người có thu nhập thấp nhất - Dữ liệu theo quý)
  • Mô tả (Description): Phần trăm thu nhập được sở hữu bởi 20% người có thu nhập thấp nhất, được tính dựa trên dữ liệu theo quý.
  • Đơn vị (Unit): Phần trăm (%)
  • Tần suất cập nhật (Frequency): Dữ liệu theo quý (Quarterly data)
  • Nguồn dữ liệu (Source): World Bank World Development Indicators database.
  • Phạm vi địa lý (Geographic coverage): Các quốc gia và vùng lãnh thổ trên toàn thế giới.

Chỉ số này đo lường phần trăm thu nhập thuộc sở hữu của 20% người có thu nhập thấp nhất trong một quốc gia hoặc vùng lãnh thổ. Dữ liệu được tính dựa trên dữ liệu theo quý, cho phép theo dõi sự thay đổi của phân phối thu nhập cho nhóm người có thu nhập thấp nhất theo thời gian. Chỉ số này giúp đánh giá mức độ bình đẳng thu nhập và phân phối kinh tế trong một quốc gia hoặc khu vực.

TTINF1 <- WDI(country = "all", indicator = "BN.KLT.OTHR.CD", start = 2010, end = 2022)
TTINF1 <- na.omit(TTINF1)
TTINF1 <- clean_names(TTINF1)
indicator <- "BN.KLT.OTHR.CD"
indicator_info <- WDIsearch(field = "indicator")
invisible(indicator)
  • Indicator code: BN.KLT.OTHR.CD
  • Tên chỉ số (Indicator name): Other nonperforming loans, amount (current US$)
  • Mô tả (Description): Số dư các khoản vay không thực hiện được khác, tính bằng đơn vị đô la Mỹ (USD) hiện tại.
  • Đơn vị (Unit): Đô la Mỹ (USD)
  • Tần suất cập nhật (Frequency): Không có thông tin cụ thể về tần suất cập nhật.
  • Nguồn dữ liệu (Source): World Bank Global Development Finance database.
  • Phạm vi địa lý (Geographic coverage): Các quốc gia và vùng lãnh thổ trên toàn thế giới.

Chỉ số này đo lường số dư các khoản vay không thực hiện được khác trong một quốc gia hoặc vùng lãnh thổ. Đơn vị đo lường là đô la Mỹ (USD). Chỉ số này cung cấp thông tin về các khoản vay không được trả trong thời gian quy định hoặc không đáp ứng đủ yêu cầu của ngân hàng hoặc tổ chức tín dụng. Nó thường được sử dụng để đánh giá mức độ rủi ro trong hệ thống tài chính và tình hình tín dụng của một quốc gia.

TTINF2 <- WDI(country = "all", indicator = "DT.ODA.DACD.SOCI.CD", start = 2010, end = 2022)
TTINF2 <- na.omit(TTINF2)
TTINF2 <- clean_names(TTINF2)
indicator <- "DT.ODA.DACD.SOCI.CD"
indicator_info <- WDIsearch(field = "indicator")
invisible(indicator)
  • Indicator code: BX.KLT.DINV.CD.DT
  • Tên chỉ số (Indicator name): Foreign direct investment, net inflows (BoP, current US$)
  • Mô tả (Description): Luồng vốn đầu tư trực tiếp nước ngoài, ròng (Balance of Payments, đơn vị đô la Mỹ hiện tại).
  • Đơn vị (Unit): Đô la Mỹ (USD)
  • Tần suất cập nhật (Frequency): Không có thông tin cụ thể về tần suất cập nhật.
  • Nguồn dữ liệu (Source): World Bank World Development Indicators database.
  • Phạm vi địa lý (Geographic coverage): Các quốc gia và vùng lãnh thổ trên toàn thế giới.

Chỉ số này đo lường luồng vốn đầu tư trực tiếp từ nước ngoài, ròng, trong một quốc gia hoặc vùng lãnh thổ. Đơn vị đo lường là đô la Mỹ (USD). Chỉ số này cung cấp thông tin về số tiền ròng mà một quốc gia nhận được từ vốn đầu tư trực tiếp từ các nhà đầu tư nước ngoài sau khi trừ đi các luồng vốn ra đi. Điều này giúp đánh giá mức độ thu hút và dòng vốn đầu tư trực tiếp vào một quốc gia hoặc khu vực.Ư

TTGDP2 <- WDI(country = "all", indicator = "BX.TRF.PWKR.GD.ZS", start = 2010, end = 2022)
TTGDP2 <- na.omit(TTGDP2)
TTGDP2 <- clean_names(TTGDP2)
indicator <- "BX.TRF.PWKR.GD.ZS"
indicator_info <- WDIsearch(field = "indicator")
invisible(indicator)
  • Indicator code: BX.TRF.PWKR.GD.ZS
  • Tên chỉ số (Indicator name): Personal transfers and compensation of employees, received (% of GDP)
  • Mô tả (Description): Chuyển tiền cá nhân và bồi thường cho nhân viên, nhận được (% tỷ lệ GDP).
  • Đơn vị (Unit): Phần trăm (%)
  • Tần suất cập nhật (Frequency): Không có thông tin cụ thể về tần suất cập nhật.
  • Nguồn dữ liệu (Source): World Bank World Development Indicators database.
  • Phạm vi địa lý (Geographic coverage): Các quốc gia và vùng lãnh thổ trên toàn thế giới.

Chỉ số này đo lường tỷ lệ chuyển tiền cá nhân và bồi thường cho nhân viên nhận được so với GDP trong một quốc gia hoặc vùng lãnh thổ. Đơn vị đo lường là phần trăm (%). Chỉ số này cung cấp thông tin về mức độ chuyển tiền cá nhân và bồi thường cho nhân viên đóng góp vào GDP của một quốc gia. Điều này giúp đánh giá vai trò của chuyển tiền cá nhân và bồi thường cho nhân viên trong nền kinh tế và tình hình tài chính của một quốc gia.

TTGDP3 <- WDI(country = "all", indicator = "CC.SP.EXP.ZS", start = 2010, end = 2022)
TTGDP3 <- na.omit(TTGDP3)
TTGDP3 <- clean_names(TTGDP3)
indicator <- "CC.SP.EXP.ZS"
indicator_info <- WDIsearch(field = "indicator")
invisible(indicator)
  • Indicator code: CC.SP.EXP.ZS
  • Tên chỉ số (Indicator name): Central government expenditure as a share of total government expenditure (%)
  • Mô tả (Description): Chi tiêu của chính phủ trung ương chiếm tỷ lệ phần trăm trong tổng chi tiêu của chính phủ (%).
  • Đơn vị (Unit): Phần trăm (%)
  • Tần suất cập nhật (Frequency): Không có thông tin cụ thể về tần suất cập nhật.
  • Nguồn dữ liệu (Source): World Bank World Development Indicators database.
  • Phạm vi địa lý (Geographic coverage): Các quốc gia và vùng lãnh thổ trên toàn thế giới.

Chỉ số này đo lường tỷ lệ chi tiêu của chính phủ trung ương so với tổng chi tiêu của chính phủ trong một quốc gia hoặc vùng lãnh thổ. Đơn vị đo lường là phần trăm (%). Chỉ số này cung cấp thông tin về mức độ chi tiêu của chính phủ trung ương so với tổng chi tiêu của chính phủ. Điều này giúp đánh giá vai trò và trọng tâm của chính phủ trung ương trong việc quản lý và phân bổ nguồn lực tài chính của một quốc gia.

TTIR3 <- WDI(country = "all", indicator = "AG.LND.IRIG.PO.HA", start = 2010, end = 2022)
TTIR3 <- na.omit(TTIR3)
TTIR3 <- clean_names(TTIR3)
indicator <- "AG.LND.IRIG.PO.HA"
indicator_info <- WDIsearch(field = "indicator")
invisible(indicator)
  • Indicator code: AG.LND.IRIG.PO.HA
  • Tên chỉ số (Indicator name): Agricultural land equipped for irrigation (% of total agricultural land area)
  • Mô tả (Description): Diện tích đất nông nghiệp được trang bị hệ thống tưới tiêu (% của tổng diện tích đất nông nghiệp)
  • Đơn vị (Unit): Phần trăm (%)
  • Tần suất cập nhật (Frequency): Không có thông tin cụ thể về tần suất cập nhật.
  • Nguồn dữ liệu (Source): World Bank World Development Indicators database.
  • Phạm vi địa lý (Geographic coverage): Các quốc gia và vùng lãnh thổ trên toàn thế giới.

Chỉ số này đo lường tỷ lệ diện tích đất nông nghiệp được trang bị hệ thống tưới tiêu so với tổng diện tích đất nông nghiệp trong một quốc gia hoặc vùng lãnh thổ. Đơn vị đo lường là phần trăm (%). Chỉ số này cung cấp thông tin về mức độ sử dụng hệ thống tưới tiêu trong nông nghiệp, cho thấy khả năng cung cấp nước cho cây trồng trong sản xuất nông nghiệp. Điều này giúp đánh giá khả năng phát triển và hiệu suất của ngành nông nghiệp trong một quốc gia hoặc khu vực.

2 Bài tập tuần 5

2.1 Mô tả bộ dữ liệu: TravelMode - Package:AER

  • Mô tả: Dữ liệu về lựa chọn phương thức di chuyển cho hành trình giữa Sydney, Melbourne và Úc. Một data frame chứa 840 quan sát trên 4 chế độ cho 210 mẫu, gồm có 9 biến
  • individual: Nhóm người (có 210 nhóm người từ 1 đến 210)
  • mode: Phương thức di chuyển với những lựa chọn là “ô tô”, “máy bay”, “tàu hỏa” hoặc “xe buýt”
  • choice: Yếu tố thể hiện sự lựa chọn với mức độ “không” và “có”.(với những chi phí như hiện tại thì họ có sẵn sàng đi thêm một lần khác không)
  • wait: Thời gian chờ đợi trước khi phương tiện hành khách chọn xuất phát, số 0 thể hiện cho ô tô
  • vcost: Chi phí phương tiện
  • travel: Thời gian di chuyển trên xe.
  • gcost: Đo lường chi phí chung.
  • income: Thu nhập hộ gia đình.
  • size: Quy mô bữa tiệc (Biến định tính có các cấp độ từ 1 đến 6 biểu hiện sự biến động từ “nhỏ nhất, nhỏ, trung bình, vừa, lớn và rất lớn”)

2.2 Phân tích dữ liệu

2.2.1 Làm sạch số liệu

  • Dưới đây em sẽ tiến hành làm sạch dữ liệu với các function trong package tidyverse
library(tidyverse)
library(AER)
library(DT)
data("TravelMode")
d <- TravelMode

Lọc dữ liệu với filter()

d %>% filter(mode == "air") %>% 
  datatable()
  • Lọc ra dữ liệu của những hành khách chọn máy bay là phương tiện di chuyển.
d %>% filter(mode == "train", wait > 50) %>% datatable()
  • Lọc ra những hành khách chọn tàu lửa làm phương tiện di chuyển và có thời gian chờ đợi trước khi tàu di chuyển lớn hơn 50 phút.
d %>% filter(mode == "air", size == 6) %>% datatable()
  • Lọc ra những hành khách chọn máy bay là phương tiện di chuyển và xu hướng tổ chức bữa tiệc của họ có quy mô rất lớn. Kết quả cho thấy chỉ có một hành khách thứ 669 trả lời khảo sát khớp với kết quả cần tìm.

2.2.2 Mã hoá số liệu với case_match() và case_when()

d$nsize <-  case_match(d$size, 1 ~ "Nhỏ nhất", 2 ~ "Nhỏ", 3 ~ "Trung bình", 4 ~ "Vừa", 5 ~ "Lớn", 6 ~ "Rất lớn") 
  • Thêm một cột mới là nsize và mã hoá số liệu của cột size thành biến định tính.
d <- d %>% mutate(choice = case_when(choice == "yes" ~ 1, choice == "no" ~ 0))
  • Mã hoá số liệu bằng case_when, và gán các số liệu mới trong biến choice.
d <- d %>% mutate(classify = case_when(vcost > 100 | gcost > 200 ~ "Rich", mode == "car" ~ "Poor", TRUE ~ "Normal"))
  • Dùng mutate để tạo một biến mới gọi là classify(phân loại), dùng case_when() để mã hoá dữ liệu theo điều kiện, ở dấu phẩy đầu tiên ta đặt điều kiện nếu vcost > 100 hoặc gcost > 200 thì hành khách được phân loại ở nhóm Rich, ở dấu phẩy thứ 2 ta đặt điều kiện nếu hành khách chọn car là phương tiện di chuyển thì được phân loại ở nhóm Poor, các giá trị còn lại được phân loại ở nhóm Normal.
d <- d %>% mutate(cost = case_when(vcost + gcost > 300 ~ "Big", vcost + gcost > 200 ~ "Medimum", TRUE ~ "Small" ))
d <- d %>% mutate( cost = fct_relevel(cost, c("Small", "Medimum", "Big")))
  • Dùng mutate để tạo một biến mới tên là Cost (Mức chi phí), dùng case_when() để mã hoá dữ liệu theo điều kiện, nếu vcost + gcost >300 thì được xếp vào mức chi phí lớn, nếu vcost + gcost >200 thì được xếp vào mức chi phí trung bình và các giá trị còn lại đượcc xếp vào mức chi phí nhỏ.
d <- d %>% mutate(groupic = case_when(income < 10 ~ "<10 trieu" ,income >10 & income <50 ~ "10-50 trieu", income > 50 ~ ">50 trieu", TRUE ~ "other" ))
  • Dùng mutate để tạo một biến mới tên là groupic (Phân loại mức thu nhập theo nhóm), dùng case_when() để mã hoá dữ liệu theo điều kiện, nếu income < 10 thì được xếp vào mức thu nhập dưới 10 triệu , nếu income >10 & income <50 thì được xếp vào mức thu nhập từ 10 đến 50 triệu, nếu income > 50 thì được xếp vào mức thu nhập trên 50 triệu.
d <- d %>% mutate(groupic = fct_relevel(groupic, c("<10 trieu", "10-50 trieu", ">50 trieu", "other")))
  • Chuyển các giá trị của biến groupic từ dạng ký tự sang dạng factor và sắp xếp giá trị các nhóm theo yêu cầu.

2.2.3 Nhóm dữ liệu

d %>% group_by(mode) %>% tally()
## # A tibble: 4 × 2
##   mode      n
##   <fct> <int>
## 1 air     210
## 2 train   210
## 3 bus     210
## 4 car     210
  • Câu lệnh trên để xem các biểu hiện trong biến mode và số quan sát của từng biểu hiện đó.
d %>% group_by(mode, classify) %>% tally()
## # A tibble: 8 × 3
## # Groups:   mode [4]
##   mode  classify     n
##   <fct> <chr>    <int>
## 1 air   Normal     136
## 2 air   Rich        74
## 3 train Normal     179
## 4 train Rich        31
## 5 bus   Normal     206
## 6 bus   Rich         4
## 7 car   Poor       207
## 8 car   Rich         3
  • Câu lệnh trên để nhóm dữ liệu theo biến mode và classify. Đọc kết quả trên ta thấy đa số những người di chuyển bằng máy bay, tàu và xe bus được xếp vào nhón Normal, những người di chuyển bằng xe ô tô được xếp vào nhóm Poor.
d %>% summarise( n = n(), min = min(wait), max = max(wait), mean = mean(wait), Qua = quantile(wait,0.3), var = var(wait), sd = sd(wait))
##     n min max     mean  Qua     var       sd
## 1 840   0  99 34.58929 15.7 622.433 24.94861
  • Dùng câu lệnh summarise để tổng hợp các giá trị thống kê của biến wait theo yêu cầu. Đọc kết quả, giá trị nhỏ nhất của biến wait(thời gian chờ đợi trước khi phương tiện di chuyển) = 0, giá trị lớn nhất là 99, giá trị trung bình là 34.6, phương sai là 622.43 và độ lệch chuẩn bằng 25.
d %>% group_by(mode) %>% summarise(n = n(), min = min(wait), max = max(wait), mean = mean(wait), Qua = quantile(wait,0.3), var = var(wait), sd = sd(wait))
## # A tibble: 4 × 8
##   mode      n   min   max  mean   Qua   var    sd
##   <fct> <int> <int> <int> <dbl> <dbl> <dbl> <dbl>
## 1 air     210     5    99  61.0    64  247.  15.7
## 2 train   210     1    99  35.7    34  151.  12.3
## 3 bus     210     5    60  41.7    35  146.  12.1
## 4 car     210     0     0   0       0    0    0
  • Hoặc chúng ta cũng có thể dùng summarise cho dữ liệu được nhóm, các số liệu thống kê được tính toán theo từng nhóm kết quả. Tính những thống kê mô tả với biến wait như câu lệnh ở trước những ở câu lệnh này sẽ tính toán với từng nhóm phương tiện di chuyển. Đọc kết quả trả về ta thấy được thời gian trung bình chờ đợi của máy bay là dài nhất, thời gian chờ đợi trung bình của ô tô bằng 0 và thời gian chờ đợi của tàu là ngắn nhất.

2.2.4 Cắt hàng theo nhóm

d %>% group_by(mode) %>% arrange(mode, individual) %>% slice_head( n = 5) %>% arrange(mode) %>% select(mode, individual, groupic)
## # A tibble: 20 × 3
## # Groups:   mode [4]
##    mode  individual groupic    
##    <fct> <fct>      <fct>      
##  1 air   1          10-50 trieu
##  2 air   2          10-50 trieu
##  3 air   3          10-50 trieu
##  4 air   4          >50 trieu  
##  5 air   5          10-50 trieu
##  6 train 1          10-50 trieu
##  7 train 2          10-50 trieu
##  8 train 3          10-50 trieu
##  9 train 4          >50 trieu  
## 10 train 5          10-50 trieu
## 11 bus   1          10-50 trieu
## 12 bus   2          10-50 trieu
## 13 bus   3          10-50 trieu
## 14 bus   4          >50 trieu  
## 15 bus   5          10-50 trieu
## 16 car   1          10-50 trieu
## 17 car   2          10-50 trieu
## 18 car   3          10-50 trieu
## 19 car   4          >50 trieu  
## 20 car   5          10-50 trieu
  • Câu lệnh trên để lọc kết quả trên dữ liệu đã nhóm. Ứng với từng phương tiện, hàm slide_head() chỉ lấy kết quả của 5 hành khách khảo sát đầu tiên, lọc theo nhóm người và mức thu nhập của họ.
d %>% group_by(mode) %>% arrange(mode, individual) %>% slice_sample( n = 5) %>% arrange(mode) %>% select(mode, individual, groupic)
## # A tibble: 20 × 3
## # Groups:   mode [4]
##    mode  individual groupic    
##    <fct> <fct>      <fct>      
##  1 air   161        >50 trieu  
##  2 air   137        10-50 trieu
##  3 air   116        10-50 trieu
##  4 air   109        >50 trieu  
##  5 air   205        10-50 trieu
##  6 train 20         >50 trieu  
##  7 train 71         10-50 trieu
##  8 train 152        other      
##  9 train 175        10-50 trieu
## 10 train 123        10-50 trieu
## 11 bus   181        10-50 trieu
## 12 bus   52         10-50 trieu
## 13 bus   143        10-50 trieu
## 14 bus   10         >50 trieu  
## 15 bus   76         <10 trieu  
## 16 car   46         >50 trieu  
## 17 car   89         10-50 trieu
## 18 car   64         <10 trieu  
## 19 car   96         >50 trieu  
## 20 car   172        10-50 trieu
  • Hàm slice_sample() cũng giống như slice_head() nhưng ở đây chúng lấy 5 hành khách bất kỳ tham gia khảo sát.
d %>% as_tibble() %>% add_count(groupic) %>% select(groupic, n,  gcost) %>% head(n =5)
## # A tibble: 5 × 3
##   groupic         n gcost
##   <fct>       <int> <int>
## 1 10-50 trieu   488    70
## 2 10-50 trieu   488    71
## 3 10-50 trieu   488    70
## 4 10-50 trieu   488    30
## 5 10-50 trieu   488    68
d %>% add_count(groupic) %>% filter(n <300) %>% select(groupic, n, mode, wait, vcost) %>% head(n =10)
##      groupic   n  mode wait vcost
## 1  >50 trieu 156   air   64    49
## 2  >50 trieu 156 train   44    26
## 3  >50 trieu 156   bus   53    21
## 4  >50 trieu 156   car    0     5
## 5  >50 trieu 156   air   69    58
## 6  >50 trieu 156 train   34    31
## 7  >50 trieu 156   bus   35    25
## 8  >50 trieu 156   car    0     7
## 9      other  92   air   64    45
## 10     other  92 train   44    24
  • Hàm add_count() dùng để thêm một cột n để đếm giá trị của từng nhóm trong biến groupic, lọc ra dữ liệu cũng những nhóm có số người tham gia khảo sát dưới 300.
d %>% group_by( mode) %>% mutate(mean_wait = mean(wait), difference = mean_wait - wait) %>% select(mode, wait, mean_wait, difference)
## # A tibble: 840 × 4
## # Groups:   mode [4]
##    mode   wait mean_wait difference
##    <fct> <int>     <dbl>      <dbl>
##  1 air      69      61.0      -7.99
##  2 train    34      35.7       1.69
##  3 bus      35      41.7       6.66
##  4 car       0       0         0   
##  5 air      64      61.0      -2.99
##  6 train    44      35.7      -8.31
##  7 bus      53      41.7     -11.3 
##  8 car       0       0         0   
##  9 air      69      61.0      -7.99
## 10 train    34      35.7       1.69
## # ℹ 830 more rows
  • Ở đây ta tiến hành nhóm dữ liệu theo phương tiện di chuyển để so sánh thời gian di chuyển và thời gian di chuyển trung bình của từng phương tiện. Tạo một biến mới là mean_wait để tính trung bình thời gian di chuyển và diffrence để tính sự chênh lệch giữa thời gian trung bình và thời gian riêng của từng phương tiện.
d <- d %>% mutate(ncost = vcost + gcost)
d %>% group_by(groupic) %>% mutate( mean_cost = mean(ncost), diff_cost = ncost - mean_cost ) %>% select(individual ,groupic, ncost, mean_cost, diff_cost)
## # A tibble: 840 × 5
## # Groups:   groupic [4]
##    individual groupic     ncost mean_cost diff_cost
##    <fct>      <fct>       <int>     <dbl>     <dbl>
##  1 1          10-50 trieu   129      157.     -28.0
##  2 1          10-50 trieu   102      157.     -55.0
##  3 1          10-50 trieu    95      157.     -62.0
##  4 1          10-50 trieu    40      157.    -117. 
##  5 2          10-50 trieu   126      157.     -31.0
##  6 2          10-50 trieu   115      157.     -42.0
##  7 2          10-50 trieu   110      157.     -47.0
##  8 2          10-50 trieu    61      157.     -96.0
##  9 3          10-50 trieu   244      157.      87.0
## 10 3          10-50 trieu   293      157.     136. 
## # ℹ 830 more rows
  • Cũng giống như câu lệnh trước, ở đây chúng ta so sánh sự chênh lệch giữa giá trị riêng của chi phí cho chuyến đi và trung bình chi phí cho chuyến đi theo từng mức thu nhập chúng ta đã phân nhóm trước đó.
d %>% group_by(mode) %>% mutate(mean_vcost = mean(vcost), diff_vcost = vcost - mean_vcost) %>% select(mode, vcost, mean_vcost, diff_vcost)
## # A tibble: 840 × 4
## # Groups:   mode [4]
##    mode  vcost mean_vcost diff_vcost
##    <fct> <int>      <dbl>      <dbl>
##  1 air      59       85.3     -26.3 
##  2 train    31       51.3     -20.3 
##  3 bus      25       33.5      -8.46
##  4 car      10       21.0     -11.0 
##  5 air      58       85.3     -27.3 
##  6 train    31       51.3     -20.3 
##  7 bus      25       33.5      -8.46
##  8 car      11       21.0     -10.0 
##  9 air     115       85.3      29.7 
## 10 train    98       51.3      46.7 
## # ℹ 830 more rows
  • Hoặc chúng ta so sánh giá trị trung bình của chi phí phương tiện và giá trị riêng của chi phí phương tiện theo từng loại phương tiện.

2.2.5 Thống kê mô tả

d  %>% group_by(mode) %>% summarise(n = n())
## # A tibble: 4 × 2
##   mode      n
##   <fct> <int>
## 1 air     210
## 2 train   210
## 3 bus     210
## 4 car     210
  • Đếm số liệu theo nhóm bằng lệnh summarise
d %>% count(mode, cost)
##     mode    cost   n
## 1    air   Small 123
## 2    air Medimum  78
## 3    air     Big   9
## 4  train   Small 112
## 5  train Medimum  81
## 6  train     Big  17
## 7    bus   Small 165
## 8    bus Medimum  45
## 9    car   Small 198
## 10   car Medimum  11
## 11   car     Big   1
  • Hoặc ta cũng có thể thống kê biến cost theo biến mode bằng lệnh count. Ở đây chúng ta xem thử từng phương tiện ứng với từng mức chi phí họ bỏ ra thì có bao nhiêu người. Với phương tiện là máy bay: mức chi phí nhỏ thì có 123 người, mức chi phí trung bình có 78 người và mức chi phí lớn thì có 9 người. Với phương tiện là tàu: mức chi phí nhỏ thi có 112 người, mức chi phí trung bình thì có 81 người và mức chi phí lớn có 9 người,… Tương tự với những phương tiện khác, ta có thể kết luận rằng đối với tất cả các phương tiện, hành khách ưu tiên bỏ ra một mức chi phí thấp cho chuyến đi của họ.
table(d$mode, d$cost)
##        
##         Small Medimum Big
##   air     123      78   9
##   train   112      81  17
##   bus     165      45   0
##   car     198      11   1
  • Hoặc chúng ta cũng có thể thống kê theo dạng bảng bằng lệnh table.
d <- d %>% mutate(nchoice = case_match(d$choice ,0 ~ "khong", 1 ~ "co"), nchoice= fct_relevel(nchoice, c("khong","co")))

d %>% count(cost, nchoice)
##      cost nchoice   n
## 1   Small   khong 438
## 2   Small      co 160
## 3 Medimum   khong 173
## 4 Medimum      co  42
## 5     Big   khong  19
## 6     Big      co   8
table(d$cost, d$nchoice)
##          
##           khong  co
##   Small     438 160
##   Medimum   173  42
##   Big        19   8
  • Thống kê để xem thử ứng từng mức chi phí thì có bao nhiêu người trả lời không và có bao nhiêu người trả lời có cho chuyến đi tiếp theo. Đọc kết quả, với mức chi phí nhỏ thì có 438 người trả lời không và có 160 người trả lời có cho chuyến đi tiếp theo, với mức chi phí trung bình thì có 173 người trả lời không và có 42 người trả lời có cho chuyến đi tiếp theo và với mức chi phí lớn thì có 19 người trả lời không và có 8 người trả lời có cho chuyến đi tiếp theo. Vậy ta có thể kết luận rằng, ứng với bất kỳ mức chi phí nào thì số người trả lời không vẫn nhiều hơn số người trả lời có cho chuyến đi tiếp theo.
d %>% count(groupic) %>% mutate(percent = scales::percent(n/sum(n)))
##       groupic   n percent
## 1   <10 trieu 104   12.4%
## 2 10-50 trieu 488   58.1%
## 3   >50 trieu 156   18.6%
## 4       other  92   11.0%
  • Tính tỷ lệ phần trăm của từng mức thu nhập. Đọc kết quả ta thấy mức thu nhập chiếm tỷ lệ cao nhất là 10 đến 50 triệu, mức thu nhập chiếm tỷ lệ thấp nhất là dưới 10 triệu.
d %>% group_by(mode) %>% count(cost) %>% mutate(percent = scales::percent(n/sum(n)))
## # A tibble: 11 × 4
## # Groups:   mode [4]
##    mode  cost        n percent
##    <fct> <fct>   <int> <chr>  
##  1 air   Small     123 59%    
##  2 air   Medimum    78 37%    
##  3 air   Big         9 4%     
##  4 train Small     112 53%    
##  5 train Medimum    81 39%    
##  6 train Big        17 8%     
##  7 bus   Small     165 79%    
##  8 bus   Medimum    45 21%    
##  9 car   Small     198 94.3%  
## 10 car   Medimum    11 5.2%   
## 11 car   Big         1 0.5%
  • Đầu tiên, nhóm dữ liệu theo phương tiện di chuyển (mode), sau đó đếm giá trị theo từng nhóm chi phí (cost) và tính phần trăm của từng mức chi phí theo phương tiện di chuyển.
d %>% mutate(ncost = vcost + gcost) %>% group_by(mode) %>% summarise(mean = mean(ncost), var = var(ncost),median = median(ncost), sum = sum(ncost)) 
## # A tibble: 4 × 5
##   mode   mean   var median   sum
##   <fct> <dbl> <dbl>  <dbl> <int>
## 1 air    188. 3321.   178. 39459
## 2 train  182. 6948.   176. 38123
## 3 bus    149. 3136.   138  31230
## 4 car    116. 3304.   111  24446
  • Lập bảng thống kê giá trị chi phí theo từng phương tiện di chuyển.

2.2.6 Thống kê có điều kiện

d %>% group_by(mode) %>% summarise(max_ic= max(income[nchoice == "co"]),
                                   min_ic= min(income[nchoice == "khong"]))
## # A tibble: 4 × 3
##   mode  max_ic min_ic
##   <fct>  <int>  <int>
## 1 air       70      2
## 2 train     72      2
## 3 bus       60      4
## 4 car       70      2
  • Thống kê mức thu nhập tối đa với điều kiện là những người chọn có của biến nchoice (câu trả lời có hoặc không cho chuyên đi tiếp theo), mức thu nhập tối thiểu của những người chọn không.
d %>% group_by(mode) %>% summarise(max_size = max(size[classify = "Poor"]), min_size = min(size[classify = "Rich"]))
## # A tibble: 4 × 3
##   mode  max_size min_size
##   <fct>    <int>    <int>
## 1 air         NA       NA
## 2 train       NA       NA
## 3 bus         NA       NA
## 4 car         NA       NA
  • Thống kê xem quy mô bữa tiệc tối đa mà hành khách có mức thu nhập nhỏ tổ chức, quy mô bữa tiệc tối thiểu mà hành khách có mức thu nhập lớn tổ chức.
d %>% group_by(groupic) %>% summarise(max= max(income[cost == "Small"]))
## # A tibble: 4 × 2
##   groupic       max
##   <fct>       <int>
## 1 <10 trieu       8
## 2 10-50 trieu    45
## 3 >50 trieu      72
## 4 other          50

2.2.7 Xoay trục ngang bằng Pivot wider

d <- d %>% mutate(groupic = fct_relevel(groupic, c("<10 trieu", "10-50 trieu", ">50 trieu", "other")))
pivot <- d %>% select(mode, groupic, income) %>% pivot_wider(values_from = income, names_from = groupic, values_fn = list)
  • Câu lệnh trên để tách các biểu hiện của biến groupic thành các nhóm và tổng hợp từng mức thu nhập theo các nhóm của biến mode.
pivot_size <- d %>% select(mode, groupic, size) %>% pivot_wider(names_from = groupic, values_from = size, values_fn = list)
  • Tách các biểu hiện của biến groupic thành các cột và tổng hợp quy mô tổ chức bữa tiệc theo biến mode. Tức là ta đang thống kê xem thử với những người chọn phương tiện di chuyển là máy bay (hoặc tàu, xe bus, ô tô) và có mức thu nhập từ 10 - 50 triệu (hoặc <10 triệu, >50 triệu, other) thì sẽ có xu hướng tổ chức bữa tiệc với quy mô nào.

2.3 Trực quan hoá dữ liệu

2.3.1 Biểu đồ phân tán (scatter)

d %>% ggplot(aes(x = income, y = vcost )) + 
  geom_point(color = "pink") + 
  geom_smooth(formula = y ~ x, method = "lm", color = "black") + labs(title = " Sự tương quan giữa thu nhập và chi phí phương tiện", x = "Thu nhập", y =" Chi phí phương tiện")

  • Nhìn vào biểu đồ, ta thấy đường thẳng hồi quy có xu hướng hơi thoải nên Thu nhập và chi phí phương tiện chỉ có sự tương quan yếu với nhau (vì có sự ảnh hưởng của nhiều yếu tố khác nữa).
d %>% filter( ncost >250) %>% ggplot(map = aes(x = income, y = ncost), color = mode) + geom_point() + 
  geom_smooth(formula = y ~ x, method = "lm", color = "black") + 
  labs(title = " Sự tương quan giữa thu nhập và chi phí cho chuyến đi", x = "Thu nhập", y =" Chi phí cho chuyến đi")

  • Đầu tiên ta tiến hàng lọc mức chi phí trên 250 triệu đồng và vẽ đồ thị để xem sự tương quan giữa thu nhập và chi phí cho chuyến đi. Nhìn vào biểu đồ ta thấy có sự tương quan thuận giữa thu nhập và chi phí cho chuyến đi, biểu hiện rõ nhất ở mức thu nhập từ 10 - 60 triệu. Thu nhập càng cao thì chi phí hành khách bỏ ra cho chuyến đi càng lớn.
d %>% ggplot(aes(x = vcost, y = wait)) +
  geom_point(aes(color = mode), na.rm = T) +
  geom_smooth(formula = y ~ x, method = "lm", aes(color = mode)) + 
  labs(title = " Sự tương quan giữa chi phí phương tiện và thời gian chờ đợi trước khi phương tiện di chuyển", x = "Chi phí phương tiện", y ="Thời gian chờ đợi")

  • Nhìn vào biểu đồ ta có thể thấy, nếu phương tiện di chuyển là xe ô tô và xe bus thì không có sự tương quan giữa chi phí phương tiện và thời gian chờ đợi trước khi phương tiện đó di chuyển, nếu phương tiện di chuyển là máy bay thì có sự tương quan nghịch giữa chi phí và thời gian chờ đợi (nếu chi phí tăng thì thời gian chờ đợi giảm). Đối với phương tiện di chuyển là tàu thì có sự tương quan thuận giữa hai biến này, khi chi phí càng tăng thì thời gian chờ đợi càng tăng.
d %>% ggplot(aes(x = income, y = size)) +
  geom_point(na.rm = T, aes(shape = mode), size =3, color = "purple" )+ 
  geom_smooth( formula = y ~ x, method = "lm", color = "black") +
  labs(title = " Sự tương quan giữa thu nhập và quy mô tổ chức bữa tiệc", x = "thu nhập", y ="quy mô bữa tiệc")

- Nhìn vào biểu đồ trên, ta thấy các điểm phân tán khá đều nhau, tuy nhiên đường thẳng hồi quy dốc lên cho thấy hai biến này có sự tương quan thuận với nhau, thu nhập càng cao thì hành khách có xu hướng tổ chức bữa tiệc với quy mô lớn.

2.3.2 Biểu đồ cột

d %>% group_by(mode) %>% summarise(n = n()) %>%
  mutate(percent_mode = scales::percent(n/sum(n))) %>% 
  ggplot(aes(x = mode, y = percent_mode)) +
  geom_col(fill ="pink") 

  • Nhìn vào biểu đồ ta thấy, tỷ lệ người chọn mỗi loại phương tiện di chuyển đều bằng nhau = 25%
d %>% group_by(groupic) %>% summarise(n = n()) %>%
  mutate( percent_ic = scales::percent(n/sum(n))) %>% 
  ggplot(aes(x = groupic, y = percent_ic)) + geom_col(fill = "pink") +
  labs(x ="mức thu nhập", y ="tỷ lệ phần trăm")

  • Đọc kết quả biểu đồ ta thấy mức thu nhập từ 10-50 triệu chiếm 58,1%, mức thu nhập dưới 10 triệu chiếm 12,4%, mức thu nhập trên 50 triệu chiếm 18,6% và các mức thu nhập khác chiếm 11%.
d %>% group_by(cost) %>% filter(mode == "air") %>% 
  summarise(n = n()) %>% mutate(percent_cost = scales::percent(n/sum(n))) %>% 
  ggplot(aes(x= cost, y = percent_cost)) + 
  geom_col(fill = "purple") + labs(x = 'mức chi phí', y =' tỷ lệ')

  • Lọc ra những hành khách chọn máy bay là phương tiện di chuyển và xem thử ở những hành khách này, có bao nhiêu người bỏ ra mức chi phí nhỏ, bao nhiêu người bỏ ra mức chi phí lớn và bao nhiêu người bỏ ra mức chi phí trung bình. Đọc biểu đồ ta thấy, có 59% hành khách bỏ ra mức chi phí nhỏ cho chuyến đi, có 37% hành khách bỏ ra mức chi phí trung bình và có 4% hành khách bỏ ra mức chi phí lớn cho chuyến đi.
d %>% group_by(groupic) %>% filter(classify == "Rich") %>% summarise(n = n()) %>% mutate(percent_gr = scales::percent(n/sum(n))) %>% ggplot(aes(x= groupic, y = percent_gr)) + geom_col(fill="pink") + labs(x = 'mức thu nhập', y =' Số người')

  • Lọc ra những hành khách giàu, vẽ biểu đồ để xem thử tỷ lệ của từng mức thu nhập. Nhìn biểu đồ ta thấy mức thu nhập từ 10 đến 50 triệu chiếm tỷ lệ cao nhất và bằng 58%, tiếp theo là mức thu nhập trên 50 triệu với tỷ lệ là 20.5%, mức thu nhập dưới 10 triệu chiếm tỷ lệ thấp nhất và bằng 9.8%, các mức thu nhập khác chiếm 11.6%.
d %>% group_by(cost) %>% summarise(mean_nc = mean(ncost)) %>% ggplot(aes(x = cost, y= mean_nc )) + geom_col(fill = "pink") + geom_text(aes(label = round(mean_nc,2)), vjust = 2, color = "black", size = 5) + labs(x = " mức chi phí", y = "Chi phí trung bình")

  • Vẽ biểu đồ trên để xem thử số chi phí trung bình của từng mức chi phí. Trung bình chi phí nhỏ = 122.06 triệu, trung bình chi phí trung bình = 239.79 triệu, trung bình chi phí lớn = 322.78 triệu.
d %>% group_by(groupic) %>% add_count(groupic) %>% ggplot(aes(x = groupic, y = n)) + geom_col(aes(fill = mode)) + geom_text(aes(label = scales::percent(n/ sum(n)))) + labs(x = " nhóm thu nhập", y = "số người")

  • Ta thấy mức thu nhập ở các phương tiện nó bằng nhau nên không có sự chênh lệnh nhiều ít giữa các màu.

3 Bài tập tuần 4( bài tập về nhà)

3.1 Mô tả bộ dữ liệu: TravelMode - Package:AER

  • Mô tả: Dữ liệu về lựa chọn phương thức di chuyển cho hành trình giữa Sydney, Melbourne và Úc. Một data frame chứa 840 quan sát trên 4 chế độ cho 210 mẫu, gồm có 9 biến
  • individual: Nhóm người (có 210 nhóm người từ 1 đến 210)
  • mode: Phương thức di chuyển với những lựa chọn là “ô tô”, “máy bay”, “tàu hỏa” hoặc “xe buýt”
  • choice: Yếu tố thể hiện sự lựa chọn với mức độ “không” và “có”.(với những chi phí như hiện tại thì họ có sẵn sàng đi thêm một lần khác không)
  • wait: Thời gian chờ đợi trước khi phương tiện hành khách chọn xuất phát, số 0 thể hiện cho ô tô
  • vcost: Chi phí phương tiện
  • travel: Thời gian di chuyển trên xe.
  • gcost: Đo lường chi phí chung.
  • income: Thu nhập hộ gia đình.
  • size: Quy mô bữa tiệc (Biến định tính có các cấp độ từ 1 đến 6 biểu hiện sự biến động từ “nhỏ nhất, nhỏ, trung bình, vừa, lớn và rất lớn”)
library(tidyverse)
library(AER)
data("TravelMode")
d <- TravelMode
  • Gọi các package và bộ dữ liệu TravelMode
d %>% ggplot(map = aes(x = travel, y = vcost)) +
  geom_point() 

  • Đọc biểu đồ phân tán trên ta thấy được các điểm phân bố gần nhau nên 2 biến này có sự tương quan với nhau. Tuy nhiên các điểm phân bố có xu hướng giảm dần nên 2 biến này có mối tương quan nghịch. Vậy khi thời gian di chuyển trên phương tiện càng cao thì chi phí cho nó càng giảm
d %>% ggplot(map = aes(x = income, y = vcost)) +
  geom_point() 

  • Nhìn vào biểu đồ trên, ta thấy các điểm có sự phân bố đều nhau giữa các giá trị, nên chúng ta có thể nói rằng hai biến này có mối tương quan yếu hoặc không có quan hệ tuyến tính với nhau. Vậy thu nhập thay đổi không ảnh hưởng hay chỉ ảnh hưởng một ít tới chi phí phương tiện họ chọn.

3.2 Thêm tiêu đề và đổi màu thành phần cho biểu đồ đã vẽ

d %>% ggplot(map = aes(x = travel, y = vcost)) +
  geom_point(color= 'pink') + labs(title = "Sự tương quan giữa thời gian di chuyển và chi phí phương tiện", x='Thời gian di chuyển', y='Chi phí phương tiện') 

  • Như đã nhận xét ở trên, thời gian di chuyển trên xe và chi phí phương tiện có mối tương quan nghịch.

3.3 Dùng đường thẳng hồi quy tuyến tính để biễu diễn

d %>% ggplot(map = aes(x = income, y = vcost)) +
  geom_point() + geom_smooth(formula = y ~ x, method = "lm", color = 'purple') + labs(title = "Sự tương quan giữa thu nhập và chi phí phương tiện", x= 'Thu nhập', y= 'Chi phí phương tiện')

  • Đường thẳng màu tím chính là đường thẳng hồi quy giữa hai biến income và vcost, nhìn vào biểu đồ ta thấy đường thẳng rất thoải, thể hiện hai biến này chỉ có sự tương quan yếu hoặc không ảnh hưởng tới nhau. Vậy chúng ta có thể kết luận rằng, thu nhập không ảnh hưởng đến chi phí phương tiện.
TravelMode %>% ggplot(aes(x = income, y = size)) +
  geom_smooth(formula = y ~ x, method = 'lm', color = 'purple') +
  geom_point(color = 'black') +
  labs(title = 'Sự phụ thuộc giữa thu nhập và quy mô bữa tiệc', x = 'Income', y = 'Size')

  • Trên đồ thị trên, ta có thể thấy đường hồi quy tuyến tính là đường thẳng dốc lên, thể hiện 2 biến này tỷ lệ thuận với nhau. Tuy nhiên, biểu đồ phân tán cho ta thấy các điểm bao quanh đường tuyến tính ở mức độ rải rác, vậy 2 biến này chỉ phụ thuộc lẫn nhau ở mức độ yếu vì yếu tố “xu hướng quy mô tổ chức bữa tiệc - Size” còn có thể bị ảnh hưởng bởi các yếu tố khác.

3.4 Nối các điểm bằng đoạn thẳng

d %>% ggplot(map= aes(x=wait, y=vcost))+ geom_point(color ='red')+ geom_line(color='black')+ labs(title = 'Sự tương quan giữa thời gian chờ đợi và chi phí phương tiện', x = 'Thời gian chờ đợi phương tiện di chuyển', y= 'Chi phí phương tiện')+ geom_smooth(formula = y ~ x, method = 'lm', color = 'green')

  • Nhìn vào đồ thị, đường hồi quy tuyến tính cho ta thấy hai biến này có mối quan hệ tương quan thuận với nhau, khi x tăng thì y tăng. Vậy ta có thể kết luận rằng, nếu thời gian chờ đợi trước khi phương tiện di chuyển càng cao thì chi phí phải trả cho phương tiện này càng lớn.
d %>% ggplot(map=aes(x= income, y= vcost, color= mode))+ geom_point() + labs(title = 'Sự tương quan giữa thu nhập và chi phí phương tiện', x='thu nhập', y='chi phí phương tiện') + geom_smooth(formula = y~x, method = 'lm', color= 'black')

  • Biểu đồ này cho ra từng mức thu nhập ứng với chi phí phương tiện hành khách đó sẽ bỏ ra bao nhiêu và phân loại từng điểm tương ứng với từng màu theo phương tiện mà hành khách đó chọn. Ở trên ta đã nhận xét rằng hai biến này nó không ảnh hưởng lớn tới nhau, tuy nhiên nhìn vào đồ thị này chúng ta có thể nhận xét thêm rằng, đối với hành khách chọn máy bay làm phương tiện di chuyển thì chi phí hành khách đó bỏ ra sẽ cao hơn hẳn so với những hành khách chọn phương tiện khác, đối với hành khách chọn ô tô là phương tiện di chuyển thì số tiền họ bỏ ra sẽ ít nhất so với các phương tiện khác.
d<- d %>% mutate(ncost = vcost + gcost)
d %>% ggplot(map = aes(x= income, y= ncost)) + geom_point(aes(shape = mode ), na.rm = T, color = 'red', size = 3) + geom_smooth(formula = y ~ x,method= 'lm', color='black')+labs(x= 'thu nhập', y= ' tổng chi phí cho chuyến đi')

  • Đầu tiên, ta tạo thêm một biến có tên là ncost (chi phí cho chuyến đi) và biến này có được bằng cách tổng chi phí chung và chi phí phương tiên.Sau đó, ta tiến hành vẽ biểu đồ phân tích sự ảnh hưởng của mức thu nhập và chi phí cho chuyến đi và phân loại nó theo hình dáng của từng phương tiện. Đọc kết quả của đồ thị, đường thẳng tuyến tính cho ta thấy rằng 2 biến này có tương quan thuận, tức là khi thu nhập tăng thêm thì tổng chi phí hành khách bỏ ra cho chuyến đi cũng tăng thêm.
d %>% ggplot(aes(x = income, y =ncost)) + geom_point(aes(shape = mode), color = 'black', size =3) + geom_point(data = d %>% filter(choice =='yes'), aes(shape = mode), color ='red',size=4)

  • Lọc ra những người với lựa chọn là yes chèn vào biểu đồ đã vẽ trước đó (vẫn phân loại theo từng loại phương tiện di chuyển).
d %>% filter(mode =='air') %>% ggplot(map = aes(x= income, y= vcost, shape= 'mode', color='pink'))+ geom_point()+ geom_smooth( formula = y ~ x, method = 'lm', color ='red')

  • Câu lệnh trên phân tích sự ảnh hưởng của thu nhập và chi phí cho phương tiện đối với những hành khách chọn máy bay là phương tiện di chuyển. Nhìn kết quả trên, ta thấy đường hồi quy là một đường thẳng, vậy hai biến này không ảnh hưởng đến nhau, giữa chúng không có sự tương quan.
d %>% ggplot(map=aes(x=travel,y=vcost))+ geom_point(aes(color=mode))+ geom_smooth(aes(color=mode), formula= y~x, method= 'lm')

  • Ta vẽ đồ thị của từng mức chi phí theo từng phương tiện. Đọc kết quả đồ thị, ta thấy được với tất cả phương tiện di chuyển thì thời gian di chuyển trên xe đều có mối tương quan thuận với chi phí cho phương tiện đó. Nếu phương tiện là máy bay thì hai biến này có xu hướng tương quan mạnh hơn, thời gian di chuyển càng cao thì chi phí cho nó biến đổi nhiều(thời gian di chuyển lâu hơn thì quãng đường dài hơn nên chi phí chắc chắn sẽ cao hơn). Đối với các phương tiện khác thì nó cũng tương quan thuận với chi phí tuy nhiên nó không tác động mạnh mẽ như đối với phương tiện máy bay.
d %>% ggplot(map=aes(x=travel,y=vcost))+ geom_point(aes(color=mode))+ geom_smooth(aes(color=mode), formula= y~x, method= 'lm') + facet_grid(.~mode)

  • Hoặc ta có thể vẽ nhiều đồ thị theo từng phương tiện.
d %>% ggplot(map=aes(x=travel,y=vcost))+ geom_point(aes(color=mode))+ geom_smooth(aes(color=mode), formula= y~x, method= 'lm') + facet_grid(mode~.)

  • Sắp xếp các đồ thị theo hàng ngang.

3.5 Đồ thị dạng cột

d %>% ggplot(map=aes(x=mode)) + geom_bar(fill= 'pink')

  • Dòng lệnh trên dùng để đếm số người lựa chọn phương tiện di chuyển nào. Đọc kết quả đồ thị, ta thấy rằng số người chọn mỗi phương tiện di chuyển là bằng nhau
d %>% ggplot(aes(x = mode, y = after_stat(count))) +geom_bar(fill = 'yellow') +
  geom_text(aes(label = scales::percent(after_stat(count/sum(count)))), stat = 'count', color = 'black', vjust =5) +theme_classic() + labs(x = 'phương tiện', y = 'Số người')

  • Câu lệnh trên để biểu thị phần trăm số người chọn cái nào làm phương tiện di chuyển
d$nincome <- cut(d$income, breaks = c(1,30,50,72), labels = c('ít','vừa','nhiều'))
 d %>% ggplot(aes(x = mode, y = after_stat(count))) +geom_bar(fill = 'purple') +
  geom_text(aes(label = scales::percent(after_stat(count/sum(count)))), stat = 'count', color = 'black', vjust =-0.5) +theme_classic() + facet_grid(. ~ nincome) + labs(x = 'phương tiện', y = 'Số người') 

  • Đầu tiên, ta thêm một biến mới là nincome và đó phân chia biến này (thu nhập) theo 3 nhóm ít, vừanhiều. Sau đó ta phân chia đồ thị theo các nhóm thu nhập này ứng với các phương tiện di chuyển.
d %>% ggplot(aes(x = size, y = after_stat(count))) +geom_bar(fill = 'yellow') +
  geom_text(aes(label = scales::percent(after_stat(count/sum(count)))), stat = 'count', color = 'black', vjust =3) +theme_classic() + labs(x = 'Quy mô tổ chức bữa tiệc', y = 'Số người')

  • Câu lệnh trên để vẽ biểu đồ thể hiện Quy mô bữa tiệc mà hành khách có xu hướng tổ chức. Đọc biểu đồ, ta thấy rằng có hơn 50% hành khách có xu hướng tổ chức bữa tiệc với quy mô nhỏ nhất,tiếp theo đó là hơn 1/4 hàng khách chọn tổ chức bữa tiệc với quy mô nhỏ. Ta thấy với quy mô càng lớn thì số hành khách càng giảm đi.
d %>% ggplot(aes(x = size, y = after_stat(count))) +geom_bar(fill = 'yellow') +
  geom_text(aes(label = scales::percent(after_stat(count/sum(count)))), stat = 'count', color = 'black', hjust =0.5) +theme_classic() + labs(x = 'Quy mô tổ chức bữa tiệc', y = 'Số người') +  coord_flip()

  • Ta có thể chuyển biều đồ trên từ biểu đồ dọc thành biểu đồ ngang.
d$ngcost <- cut(d$gcost, breaks = c(25,125,225,300),labels = c('tiết kiệm','vừa đủ','thoải mái'))
d %>% ggplot(aes(x = ngcost, y = after_stat(count),fill = mode)) +
  geom_bar(position = 'dodge') + labs(x = 'Mức chi phí chi ra cho chuyến đi', y = 'Số người')

  • Đầu tiên, ta tiến hành phân tổ dữ liệu cho biến gcost (mức chi phí chi ra cho chuyến đi - trừ chi phí di chuyển) thành 3 nhóm tiết kiệm, vừa đủ và thoải mái. Sau đó, vẽ đồ thị biểu diễn số người tương ứng với từng mức chi phí trên và được phân loại màu sắc theo biến mode(các phương tiện di chuyển). Đọc đồ thị, ta thấy được đa số số chi phí mọi người chi ra chỉ ở mức tiết kiệm.Ở mức tiết kiệm, đa số hành khách chọn máy bay làm phương tiện di chuyển (có lẽ vì mức chi phí chi ra cho phương tiện máy bay cao nên mọi người sẽ có xu hướng thắt chặt chi tiêu hơn cho chuyến đi). Ở mức vừa đủ, đa số hành khách chọn tàu là phương tiện di chuyển (vì di chuyển bằng tàu ít tốn kém hơn, nên mọi người sẽ có xu hướng chi tiêu thoải mái hơn cho chuyến đi). Còn ở mức thoải mái, không có người nào chọn máy bay là phương tiện di chuyển mà họ chỉ chọn tàu và xe ô tô (cũng vì chỉ tốn ít tiền cho phương tiện di chuyển nên hành khách cũng có xu hướng chi tiêu thoải mái hơn cho chuyến đi).
d %>% ggplot(aes(x = gcost, y = after_stat(count),fill = mode)) + geom_bar(position = 'dodge') + geom_text(aes(label = scales::percent(after_stat(count/sum(count)))),stat = 'count', color = 'black', vjust =2) + labs(x = 'Mức chi phí chi ra cho chuyến đi', y = 'Số người') 

  • Thể hiện biểu đồ trên bằng số phần trăm
d$nincome <- cut(d$income, breaks = c(1,30,50,72), labels = c('ít','vừa','nhiều'))
d %>% ggplot(aes(x= nincome )) + geom_bar(aes(y= after_stat(count), fill = mode), stat = 'count') + labs(x = 'Mức thu nhập', y = 'Số người')

  • Ta có thể vẽ dưới dạng biểu đồ cột chồng. Từ những phân tích ở các biểu đồ trên, vì thu nhập không ảnh hưởng đến sự lựa chọn phương thức di chuyển của hành khách nên ta có thể thấy ở trong biểu đồ này, ở cả mức thu nhập đều được chia thành 4 phần bằng nhau, mỗi phần đại diện cho một phương thức di chuyển mà hành khách lựa chọn.
d %>% ggplot(aes(x= nincome )) + geom_bar(aes(y= after_stat(count), fill = mode), stat = 'count') + labs(x = 'Mức thu nhập', y = 'Số người') + geom_text(aes(label = scales::percent(after_stat(count/sum(count)))), position = position_stack(vjust = 0.5), stat = 'count', color = 'black', vjust =2) 

  • Ta có thể thêm số phần trăm để dễ đọc biểu đồ hơn
d$ncost <- d$vcost+d$gcost
d %>% group_by(mode) %>% summarise(a = mean(ncost, na.rm = T)) %>% ggplot(aes(x = mode, y = a)) + geom_col(fill = 'pink') + geom_text(aes(label = round(a,2)), vjust = 2, color = 'black', size = 5) + xlab('Phương tiện di chuyển') + ylab('Chi phí trung bình chung cho chuyến đi')

  • Biểu đồ trên thể hiện chi phí trung bình chung cho chuyến đi theo các phương tiện di chuyển. Đọc kết quả biểu đồ ta thấy rằng, chi phí trung bình với những hàng khách chọn máy bay là phương tiện di chuyển cao nhất và bằng 187.9 đơn vị, chi phí trung bình của những hành khách chọn tàu là phương tiện di chuyển =181.54 đơn vị, chi phí trung bình của những hành khách chọn xe bus là phương tiện di chuyển =148.71 đơn vị và chi phí trung bình của những hành khách chọn xe ô tô là phương tiện di chuyển ở mức nhỏ nhất và bằng 116.41 đơn vị.

3.6 Bài tập tuần 4( bài tập trên lớp)

library(tidyverse)
library(AER)
data("TravelMode")
d <- TravelMode
d %>% group_by(mode) %>% summarise(n= mean(wait))
## # A tibble: 4 × 2
##   mode      n
##   <fct> <dbl>
## 1 air    61.0
## 2 train  35.7
## 3 bus    41.7
## 4 car     0
  • Kết quả trên cho thấy rằng thời gian chờ đợi trung bình trước khi di chuyển của từng loại phương tiện. Máy bay là phương tiện có thời gian chờ đợi trung bình cao nhất = 61 phút , tiếp theo là xe bus có thời gian chờ đợi trung bình = 42 phút, thời gian chờ đợi trung bình của tàu lửa = 36 phút và xe ô tô không có thời gian chờ đợi trước khi di chuyển.
d %>% group_by(mode) %>% summarise_at(c('vcost','gcost'),list(n=mean))
## # A tibble: 4 × 3
##   mode  vcost_n gcost_n
##   <fct>   <dbl>   <dbl>
## 1 air      85.3   103. 
## 2 train    51.3   130. 
## 3 bus      33.5   115. 
## 4 car      21.0    95.4
  • Kết quả trên cho ra chi phí trung bình hàng khách đã chi ra ứng với từng loại phương tiện (chi phí di chuyển) và chi phí chung trung bình cho chuyến đi. Ta thấy rằng máy bay là phương tiện tốn nhiều chi phí di chuyển nhất và xe ô tô là phương tiện tốn ít chi phí di chuyển nhất. Đối với chi phí chung thì những hành khách chọn tàu là phương tiện di chuyển sẵn sàng bỏ ra nhiều tiền nhất cho chuyến đi của họ và những hành khách chọn ô tô là phương tiện di chuyển sẽ bỏ ra ít tiền nhất cho chuyến đi của họ.
table(d$mode, d$choice)
##        
##          no yes
##   air   152  58
##   train 147  63
##   bus   180  30
##   car   151  59
  • Thống kê xem thử hành khách có sẵn sàng bỏ số tiền như vậy để đi du lịch vào lần sau hay không theo từng phương tiện di chuyển mà hành khách chọn. Đối với cả 4 phương tiện thì số người trả lời không nhiều hơn số người trả lời .
aggregate(d$income,list(d$size),FUN='mean')
##   Group.1        x
## 1       1 31.82456
## 2       2 35.67241
## 3       3 40.45000
## 4       4 38.93333
## 5       5 60.00000
## 6       6 45.00000
  • Tính trung bình thu nhập của hành khách theo quy mô bữa tiệc mà họ có xu hướng tổ chức. Trung bình thu nhập cao nhất bằng 60 triệu rơi vào những hành khách có xu hướng tổ chức với quy mô =5 (lớn) và trung bình thu nhập thấp nhất bằng 31.8 triệu rơi vào những hành khách có xu hướng tổ chức bữa tiệc với quy mô bằng 1 (nhỏ nhất).
aggregate(d$income,list(d$mode),FUN='mean')
##   Group.1        x
## 1     air 34.54762
## 2   train 34.54762
## 3     bus 34.54762
## 4     car 34.54762

-Tính trung bình thu nhập của hàng khách theo từng loại phương tiện di chuyển. Ta thấy rằng trung bình thu nhập của hành khách chọn máy bay, tàu, xe bus và xe ô tô đều bằng nhau nên ta kết luận rằng thu nhập không ảnh hưởng đến sự lựa chọn phương thức di chuyển của họ.

aggregate(d$size,list(d$mode),FUN='mean')
##   Group.1        x
## 1     air 1.742857
## 2   train 1.742857
## 3     bus 1.742857
## 4     car 1.742857
  • Tính trung bình quy mô tổ chức bữa tiệc theo từng loại phương tiện di chuyển. Ta thấy rằng không có sự thay đổi giữa các phương tiện nên kết luận rằng quy mô tổ chức bữa tiệc không ảnh hưởng gì đến phương thức di chuyển mà họ chọn.
aggregate(d$wait,list(d$mode),FUN='sd')
##   Group.1        x
## 1     air 15.71943
## 2   train 12.27922
## 3     bus 12.07737
## 4     car  0.00000
  • Kiểm tra xem độ lệch chuẩn trung bình của thời gian chờ đợi giữa các hành khách ứng với từng loại phương tiện di chuyển. Máy bay có độ lệch trung bình cao nhất vì đôi khi giữa các chuyến bay có sự delay, ô tô không có độ lệch trung bình vì tất cả các hành khách chọn ô tô là phương tiện di chuyển đều có thời gian chờ đợi bằng 0, tàu và xe bus có độ lệch thời gian giữa các hành khách xấp xỉ nhau vì tàu và xe bus là phương tiện công cộng và chúng có giờ chạy và dừng rõ ràng.
table(d$mode,d$size)
##        
##           1   2   3   4   5   6
##   air   114  58  20  15   2   1
##   train 114  58  20  15   2   1
##   bus   114  58  20  15   2   1
##   car   114  58  20  15   2   1
  • Ứng với từng quy mô tổ chức bữa tiệc, không có sự thay đổi giá trị giữa các phương tiện di chuyển nên ta thấy rằng quy mô tổ chức bữa tiệc và sự lựa chọn phương tiện di chuyển không ảnh hưởng đến nhau.
Travl3000 <- d[d$travel>300&d$wait=='0',]
  • Từ biến d chọn ra những dòng có thời gian di chuyển trên xe lớn hơn 300 và thời gian chờ đợi trước khi phương tiện hành khách chọn xuất phát là 0 và gán nó ứng với biến Travel3000. Kết quả cho ra cho ta thấy rằng đây chỉ là kết quả khảo sát của những người chọn ô tô là phương tiện di chuyển.
d %>% group_by(mode) %>%  summarise(n=mean(travel))
## # A tibble: 4 × 2
##   mode      n
##   <fct> <dbl>
## 1 air    134.
## 2 train  608.
## 3 bus    629.
## 4 car    573.
  • Thao tác trên cho ra kết quả trung bình của thời gian di chuyển trên từng phương tiện,ta thấy thời gian trung bình khi sử dụng phương tiện di chuyển là máy bay=133 đơn vị - ngắn hơn nhiều so với khi sử dụng các phương tiện di chuyển khác. Thời gian trung bình khi di chuyển bằng tàu, xe bus và xe ô tô lần lượt là 608,629 và 573 đơn vị.
d %>% group_by(mode) %>%  summarise_at(c('wait','vcost'),list(n=mean))
## # A tibble: 4 × 3
##   mode  wait_n vcost_n
##   <fct>  <dbl>   <dbl>
## 1 air     61.0    85.3
## 2 train   35.7    51.3
## 3 bus     41.7    33.5
## 4 car      0      21.0
  • Ta dùng lệnh summarise_at để cho ra kết quả trung bình thời gian chờ đợi trước khi phương tiện xuất phát (wait) và trung bình thành phần chi phí phương tiện(vcost) của từng loại phương tiện di chuyển(máy bay, tàu, xe bus và xe ô tô). Đọc kết quả, ta có thể thấy được cả thời gian chờ đợi và chi phí của phương tiện máy bay là cao nhất, thời gian chờ đợi và chi phí của ô tô là thấp nhất
d %>% group_by(mode) %>%  summarise_if(is.numeric,list(n=mean))
## # A tibble: 4 × 7
##   mode  wait_n vcost_n travel_n gcost_n income_n size_n
##   <fct>  <dbl>   <dbl>    <dbl>   <dbl>    <dbl>  <dbl>
## 1 air     61.0    85.3     134.   103.      34.5   1.74
## 2 train   35.7    51.3     608.   130.      34.5   1.74
## 3 bus     41.7    33.5     629.   115.      34.5   1.74
## 4 car      0      21.0     573.    95.4     34.5   1.74
  • Ở câu lệnh trên, ta sử dụng lệnh summarise_if để lấy chỉ số trung bình cửa những biến số(numeric). Những biến số bao gồm thời gian chờ đợi trước khi phương tiện di chuyển (wait),thành phần chi phí phương tiện(vcost), thời gian di chuyển trên xe(travel),chi phí chung(gcost), thu nhập hộ gia đình(income), quy mô tổ chức bữa tiệc(size).
d %>% group_by(choice) %>%  summarise(n=mean(income))
## # A tibble: 2 × 2
##   choice     n
##   <fct>  <dbl>
## 1 no      34.5
## 2 yes     34.5
  • Ta thấy với sự lựa chọn có hay không cho chuyến đi tiếp theo thì mức thu nhập trung bình của họ cũng như nhau nên ta có thể kết luận mức thu nhập không ảnh hưởng đến lựa chọn có hay không trong chuyến đi tiếp theo của họ.
summary(d$wait)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    0.00    0.75   35.00   34.59   53.00   99.00
  • Đọc kết quả trên, giá trị nhỏ nhất của thời gian chờ đợi trước khi lên xe của hành khách là 0( ứng với những hành khách chọn ô tô là phương tiện di chuyển), giá trị lớn nhất là 99, tứ phân vị thứ nhất là 0.75 phút, trung vị là 35 phút và tứ phân vị thứ 3 là 53 phút, trung bình là 34.59 phút.
d$nincome <- cut(d$income, breaks = c(1,30,50,73),labels = c('it','vua','nhieu'))
  • Phân tổ dữ liệu không đều cho biến income, gán giá trị đã phân tổ cho một biến mới là nincome đặt tên cho từng biểu hiện của biến này.
d <- d %>% mutate(nincome = case_when(nincome =="it"~0,nincome =="vua"~1,nincome =="nhieu"~2))
  • Mã hoá biến nincome thành những con số mới bằng lệnh mutate
d <- d %>% mutate(cost = vcost + gcost)
  • Thêm cột mới là tổng chi phí cho chuyến đi(cost) bằng lệnh mutate
Tra <- d %>% select(size, mode, income) %>% pivot_wider(names_from = mode, values_from = income, values_fn = list )
Tra
## # A tibble: 6 × 5
##    size air         train       bus         car        
##   <int> <list>      <list>      <list>      <list>     
## 1     1 <int [114]> <int [114]> <int [114]> <int [114]>
## 2     2 <int [58]>  <int [58]>  <int [58]>  <int [58]> 
## 3     3 <int [20]>  <int [20]>  <int [20]>  <int [20]> 
## 4     4 <int [15]>  <int [15]>  <int [15]>  <int [15]> 
## 5     5 <int [2]>   <int [2]>   <int [2]>   <int [2]>  
## 6     6 <int [1]>   <int [1]>   <int [1]>   <int [1]>
  • Ta tạo một bộ dữ liệu mới tên là Tra. Kết quả của bộ dữ liệu này có được khi ta tiến hành tách các biểu hiện từ cột mode(phương tiện giao thông mà hành khách chọn để đi du lịch) và mỗi biểu hiện đại diện cho một cột mới của bộ dữ liệu Tra. Giá trị của bảng dữ liệu này lấy từ dữ liệu của biến income(thu nhập của những hành khách này) và được tổng hợp theo từng biểu hiện của biến size(quy mô bữa tiệc mà họ tổ chức). Ta thấy rằng ứng với mỗi phương tiện di chuyển, quy mô tổ chức bữa tiệc tăng dần nhưng mức thu nhập nó vẫn không đổi, vậy ta kết luận rằng xu hướng quy mô tổ chức bữa tiệc và thu nhập không ảnh hưởng đến nhau.
Vco <- d %>% select(individual, choice, vcost) %>% pivot_wider(names_from = choice, values_from = vcost, values_fn = list )
  • Ta tạo một bộ dữ liệu mới tên là Vco. Kết quả của bộ dữ liệu này có được khi ta tiến hành tách các biểu hiện từ cột choice(lựa chọn có hoặc không) và mỗi biểu hiện đại diện cho một cột mới của bộ dữ liệu Vco. Giá trị của bảng dữ liệu này lấy từ dữ liệu của biến vcost(chi phí di chuyển) và được tổng hợp theo từng biểu hiện của biến individual(hệ số biểu hiện nhóm người). Ta đang kiểm tra thử xem chi phí chung của từng phương tiện đối với sự lựa chọn không và có của hành khách trong chuyến đi tiếp theo có chênh lệch nhau nhiều hay không. Đọc kết quả của bảng dữ liệu thì ta thấy được đa số đối với những người chọn không thì do chi phí của họ bỏ ra quá lớn nên họ sẽ không sẵn sàng bỏ ra số tiền như vậy cho chuyến đi tiếp theo.
d %>% ggplot(map=aes(x= income, y= gcost, color= mode))+ geom_point() + labs(title = 'Sự tương quan giữa thu nhập và chi phí cho chuyến đi', x='thu nhập', y='chi phí cho chuyến đi') + geom_smooth(formula = y~x, method = 'lm', color= 'black')

  • Biểu đồ này cho ra từng mức thu nhập ứng với chi phí cho chuyến đi hành khách đó sẽ bỏ ra bao nhiêu và phân loại từng điểm tương ứng với từng màu theo phương tiện mà hành khách đó chọn. Ở trên ta đã nhận xét rằng hai biến này nó tương quan thuận với nhau, đối với hành khách chọn tàu làm phương tiện di chuyển thì chi phí hành khách đó bỏ ra sẽ cao hơn hẳn so với những hành khách chọn phương tiện khác, đối với hành khách chọn ô tô là phương tiện di chuyển thì số tiền họ bỏ ra sẽ ít nhất so với các phương tiện khác.
d %>% ggplot(map = aes(x = income, y = gcost)) +
  geom_point() + geom_smooth(formula = y ~ x, method = "lm", color = 'purple') + labs(title = "Sự tương quan giữa thu nhập và chi phí chung", x= 'Thu nhập', y= 'Chi phí chung')

  • Đường thẳng màu tím chính là đường thẳng hồi quy giữa hai biến income và gcost, nhìn vào biểu đồ ta thấy đường thẳng hơi thoải, thể hiện hai biến này chỉ có sự tương quan yếu với nhau. Vậy chúng ta có thể kết luận rằng, hai biến này có tỷ lệ thuận với nhau, thu nhập tăng thì chi phí chung hành khách chi ra cho chuyến đi sẽ tăng.
d$ntravel <- cut(d$travel, breaks = c(0,500,1000,1500),labels= c('ngan','vua','dai'))
  • Phân tổ thời gian di chuyển trên xe thành 3 biểu hiện ngắn, vừa, dài.
d %>% ggplot(aes(x = mode, y = after_stat(count))) +geom_bar(fill = 'purple') +
  geom_text(aes(label = scales::percent(after_stat(count/sum(count)))), stat = 'count', color = 'black', vjust =-0.5) +theme_classic() + facet_grid(. ~ ntravel) + labs(x = 'phương tiện', y = 'count') 

  • Phân chia các nhóm thời gian di chuyển theo từng phương tiện di chuyển, với nhóm thời gian ngắn thì máy bay chiếm số phần trăm cao nhất, nên máy bay là phương tiện có thời gian di chuyển ngắn nhất. Với cả 3 nhóm thời gian ngắn, vừa và dài thì tàu hoả, xe bus hay ô tô có chiếm số phần trăm xấp xỉ nhau nên thời gian di chuyển của 3 loại phương tiện này gần bằng nhau.
d %>% ggplot(map=aes(x=income,y=cost))+ geom_point(aes(color=ntravel))+ geom_smooth(aes(color=ntravel), formula= y~x, method= 'lm') + facet_grid(.~ntravel)

- Phân tích sự ảnh hưởng giữa thu nhập và tổng chi phí cho chuyến đi và phân loại nó theo từng nhóm thời gian di chuyển. Đối với nhóm người có thời gian di chuyển ngắn(đa số hành khách chọn máy bay là phương tiện di chuyển) và nhóm người có thời gian di chuyển vừa thì thu nhập và tổng chi phí có sự tương quan thuận, thu nhập tăng thì tổng chi phí họ bỏ ra sẽ tăng. Còn đối với nhóm người có thời gian di chuyển dài thì có sự tương quan nghịch giữa thu nhập và tổng chi phí, thu nhập tăng thì tổng chi phí họ bỏ ra cho chuyến đi sẽ giảm.

d$ncost <- cut(d$cost, breaks = c(0,150,250,400),labels= c('thap','vua','cao'))
  • Phân tổ tổng chi phí cho chuyến đi thành 3 biểu hiện thấp, vừa, cao.
d %>% ggplot(map=aes(x=travel,y=vcost))+ geom_point(aes(color=ncost))+ geom_smooth(aes(color=ncost), formula= y~x, method= 'lm')

- Ta vẽ đồ thị sự tương quan giữa thời gian di chuyển trên phương tiện và chi phí phương tiện theo từng mức chi phí. Đọc kết quả đồ thị, ta thấy được với tất cả mức tổng chi phí thì thời gian di chuyển đều có mối tương quan nghịch với chi phí cho phương tiện đó.

d %>% ggplot(map=aes(x=choice)) + geom_bar(fill= 'blue')

  • Biểu đồ trên đếm số người sẽ lựa chọn có bỏ ra số chi phí giống chuyến đi này không cho chuyến đi tiếp theo. Nhìn vào biểu đồ ta có thể thấy ngay rằng số người chọn không chênh lệch nhiều hơn hẳn so với số người chọn có.
d %>% ggplot(aes(x = choice, y = after_stat(count))) +geom_bar(fill = 'blue') +
  geom_text(aes(label = scales::percent(after_stat(count/sum(count)))), stat = 'count', color = 'black', vjust =5) +theme_classic() + labs(x = 'Lựa chọn', y = 'Số người')

- Biều đồ thể hiện 75% số người tham gia khảo sát chọn không và 25% số người tham gia khảo sát chọn có.

d$nincome <- cut(d$income, breaks = c(1,30,50,72), labels = c('ít','vừa','nhiều'))
d %>% ggplot(aes(x = choice, y = after_stat(count))) +geom_bar(fill = 'blue') +
  geom_text(aes(label = scales::percent(after_stat(count/sum(count)))), stat = 'count', color = 'black', vjust =-0.5) +theme_classic() + facet_grid(. ~ nincome) + labs(x = 'Lựa chọn', y = 'Số người') 

  • Đầu tiên, ta thêm một biến mới là nincome và đó phân chia biến này (thu nhập) theo 3 nhóm ít, vừanhiều. Sau đó ta phân chia đồ thị theo các nhóm thu nhập này ứng với lựa chọn không và có của hành khách. Ta thấy đối với mức thu nhập nào thì lựa chọn không vẫn cao hơn lựa chọn có.

4 Bài tập tuần 3

4.1 Dataset: Fatalities - Package: AER

  • Mô tả: Dữ liệu về tử vong khi điều khiển phương tiện giao thông cho 48 tiểu bang của Hoa Kỳ (không bao gồm Alaska và Hawaii) từ năm 1982 đến năm 1988. Bộ dữ liệu gồm 336 quan sát với 34 biến, mô tả các biến như sau:
  • State: yếu tố chỉ trạng thái.
  • Year: Năm
  • Spirits: Lượng rượu mạnh đã tiêu thụ
  • Unemp: Tỷ lệ thất nghiệp
  • Income: Thu nhập cá nhân bình quân đầu người năm 1987(đơn vị là đô la)
  • Emppop: Tỷ lệ việc làm/ dân số
  • Beertax: Thuế thu nhập của bia
  • Baptist: Phần trăm người rửa tội ở phía Nam Hoa Kỳ
  • Mormon: Phần trăm người theo đạo Mormon
  • Drinkage: Số tuổi tối thiểu có thể sử dụng rượu
  • Dry: Phần trăm số người cư trú tại các quốc gia “khô hạn”
  • Youngdrivers: Phần trăm người lái xe trong độ tuổi từ 15 đến 24
  • Miles: Số dặm trung bình cho người lái xe
  • Breath: Có phải kiểm tra hơi thở sơ bộ?
  • Jail: Có bắt buộc phải ngồi tù?
  • Service: Dịch vụ công cộng bắt buộc?
  • Fatal: Số vụ tử vong do tai nạn giao thông
  • Nfatal: Số vụ tử vong do tai nạn giao thông vào ban đêm
  • Sfatal: Số vụ tử vong do chỉ một phương tiện gây ra
  • Fatal1517: Số người tử vong do tai nạn giao thông trong độ tuổi từ 15 đến 17
  • Nfatal1517: Số người tử vong vào ban đêm do tai nạn giao thông trong độ tuổi từ 15 đến 17
  • Fatal1820: Số người tử vong do tai nạn giao thông trong độ tuổi từ 18 đến 20
  • Nfatal1820: Số người tử vong vào ban đêm do tai nạn giao thông trong độ tuổi từ 18 đến 20
  • Natal2124: Số người tử vong do tai nạn giao thông trong độ tuổi từ 21 đến 24
  • Nfatal2124: Số người tử vong vào ban đêm do tai nạn giao thông trong độ tuổi từ 21 đến 24
  • Afatal: Số vụ tử vong do tai nạn giao thông có liên quan đến rượu
  • Pop: Dân số
  • Pop1517: Dân số từ 15 đến 17 tuổi
  • Pop1820: Dân số từ 18 đến 20 tuổi
  • Pop2124: Dân số từ 21 đến 24 tuổi
  • Milestot: Tổng số dặm xe (triệu)
  • Mnempus: Tỷ lệ thất nghiệp của Mỹ
  • Emppoupus: Tỷ lệ việc làm/dân số của Hoa Kỳ
  • GSP:Tỷ lệ thay đổi GSP

4.2 Gọi bộ dữ liệu Fatalities trong package AER, và gán nó cho biến Fata để tạo thành một bộ dữ liệu mới

library(AER)
library(tidyverse)
library(DT)
data("Fatalities")
Fata <- Fatalities
  • Gán dữ liệu của Fatalities cho bộ dữ liệu mới tên là Fata

4.3 Dùng lệnh Longer_Pivot để trình bày lại dữ liệu từ hàng thành cột (rút gọn bộ dữ liệu)

Fata <- Fata %>% pivot_longer(cols = starts_with('nfatal'), names_to = 'nfatal', values_to = 'nightfatal')
datatable(Fata)
  • Trong câu lệnh này, chúng ta tiến hành trình bày lại 4 cột dữ liệu nfatal, nfatal1517, nfatal1820, nfatal2124 (số vụ tử vong do tai nạn giao thông vào ban đêm của các độ tuổi từ 15 đến 17, từ 18 đến 20 và từ 21 đến 24 ) thành một cột dữ liệu và đặt tên cho cột dữ liệu mới này là nfatal, các giá trị của nfatal đã được đưa vào một cột mới và cột này được đặt tên là nightfatal.
Fata <- Fata %>% pivot_longer(cols = starts_with('fatal'), names_to = 'fatal', values_to = 'nefatal')
datatable(Fata)
  • Tương tự như trên, chúng ta tiến hành trình bày lại 4 cột dữ liệu fatal, fatal1517, fatal1820, fatal2124 (số người tử vong do tai nạn giao thông của các độ tuổi từ 15 đến 17, từ 18 đến 20 và từ 21 đến 24 ) thành một cột dữ liệu và đặt tên cho cột dữ liệu mới này là fatal, các giá trị của fatal đã được đưa vào một cột mới và cột này được đặt tên là nefatal.
Fata <- Fata %>% pivot_longer(cols = starts_with('pop'), names_to = 'pop', values_to = 'npop')
datatable(Fata)
  • Tiếp theo, để rút gọn bộ dữ liệu, chúng ta tiến hành trình bày lại 4 cột dữ liệu pop, pop1517, pop1820, pop2124 (dân số, dân số từ 15 đến 17 tuổi, dân số từ 18 đến 20 tuổi và dân số từ 21 đến 24 tuổi) thành một cột dữ liệu và đặt tên cho cột dữ liệu mới này là pop, các giá trị của fatal đã được đưa vào một cột mới và cột này được đặt tên là npop.

4.4 Dùng lệnh Longer_wider để trình bày lại dữ liệu từ cột thành hàng

Fata <- Fata %>% mutate(jail = case_when(jail =="no"~0,jail =="yes"~1))
datatable(Fata)
  • Đầu tiên, ta dùng lệnh mutate để mã hoá dữ liệu của biến jail(có bắt buộc phải ngồi tù không?) thành 2 biểu hiện, số 0 biểu hiện cho không (no) và số 1 biểu hiện cho có (yes).
Fatayear <- Fata %>% select(state,year,jail ) %>% pivot_wider(names_from = year,values_from = jail, values_fn = list)
Fatayear
## # A tibble: 48 × 8
##    state `1982`     `1983`     `1984`     `1985`     `1986`     `1987` `1988`
##    <fct> <list>     <list>     <list>     <list>     <list>     <list> <list>
##  1 al    <dbl [64]> <dbl [64]> <dbl [64]> <dbl [64]> <dbl [64]> <dbl>  <dbl> 
##  2 az    <dbl [64]> <dbl [64]> <dbl [64]> <dbl [64]> <dbl [64]> <dbl>  <dbl> 
##  3 ar    <dbl [64]> <dbl [64]> <dbl [64]> <dbl [64]> <dbl [64]> <dbl>  <dbl> 
##  4 ca    <dbl [64]> <dbl [64]> <dbl [64]> <dbl [64]> <dbl [64]> <dbl>  <dbl> 
##  5 co    <dbl [64]> <dbl [64]> <dbl [64]> <dbl [64]> <dbl [64]> <dbl>  <dbl> 
##  6 ct    <dbl [64]> <dbl [64]> <dbl [64]> <dbl [64]> <dbl [64]> <dbl>  <dbl> 
##  7 de    <dbl [64]> <dbl [64]> <dbl [64]> <dbl [64]> <dbl [64]> <dbl>  <dbl> 
##  8 fl    <dbl [64]> <dbl [64]> <dbl [64]> <dbl [64]> <dbl [64]> <dbl>  <dbl> 
##  9 ga    <dbl [64]> <dbl [64]> <dbl [64]> <dbl [64]> <dbl [64]> <dbl>  <dbl> 
## 10 id    <dbl [64]> <dbl [64]> <dbl [64]> <dbl [64]> <dbl [64]> <dbl>  <dbl> 
## # ℹ 38 more rows
  • Tiếp theo, ta tạo một bộ dữ liệu mới tên là Fatayear. Kết quả của bộ dữ liệu này có được khi ta tiến hành tách các biểu hiện từ cột year và mỗi biểu hiện đại diện cho một cột mới của bộ dữ liệu Fatayear. Giá trị của bảng dữ liệu này lấy từ dữ liệu của biến jail (có bắt buộc phải ngồi tù hay không, số 0 biểu hiện cho “không” và số 1 biểu hiện cho “có”) và được tổng hợp theo từng biểu hiện của biến state(trạng thái chỉ mức độ rượu mạnh mà người điều khiển giao thông sử dụng).
Fatain <- Fata %>% select(state,year,income ) %>% pivot_wider(names_from = year,values_from = income, values_fn = list)
Fatain
## # A tibble: 48 × 8
##    state `1982`     `1983`     `1984`     `1985`     `1986`     `1987` `1988`
##    <fct> <list>     <list>     <list>     <list>     <list>     <list> <list>
##  1 al    <dbl [64]> <dbl [64]> <dbl [64]> <dbl [64]> <dbl [64]> <dbl>  <dbl> 
##  2 az    <dbl [64]> <dbl [64]> <dbl [64]> <dbl [64]> <dbl [64]> <dbl>  <dbl> 
##  3 ar    <dbl [64]> <dbl [64]> <dbl [64]> <dbl [64]> <dbl [64]> <dbl>  <dbl> 
##  4 ca    <dbl [64]> <dbl [64]> <dbl [64]> <dbl [64]> <dbl [64]> <dbl>  <dbl> 
##  5 co    <dbl [64]> <dbl [64]> <dbl [64]> <dbl [64]> <dbl [64]> <dbl>  <dbl> 
##  6 ct    <dbl [64]> <dbl [64]> <dbl [64]> <dbl [64]> <dbl [64]> <dbl>  <dbl> 
##  7 de    <dbl [64]> <dbl [64]> <dbl [64]> <dbl [64]> <dbl [64]> <dbl>  <dbl> 
##  8 fl    <dbl [64]> <dbl [64]> <dbl [64]> <dbl [64]> <dbl [64]> <dbl>  <dbl> 
##  9 ga    <dbl [64]> <dbl [64]> <dbl [64]> <dbl [64]> <dbl [64]> <dbl>  <dbl> 
## 10 id    <dbl [64]> <dbl [64]> <dbl [64]> <dbl [64]> <dbl [64]> <dbl>  <dbl> 
## # ℹ 38 more rows
  • Tương tự như trên,ta tạo một bộ dữ liệu mới tên là Fatain. Kết quả của bộ dữ liệu này có được khi ta tiến hành tách các biểu hiện từ cột year và mỗi biểu hiện đại diện cho một cột mới của bộ dữ liệu Fatain. Giá trị của bảng dữ liệu này lấy từ dữ liệu của biến income(thu nhập của từng người tham gia khảo sát) và được tổng hợp theo từng biểu hiện của biến state(trạng thái chỉ mức độ rượu mạnh mà người điều khiển giao thông sử dụng).
Fata <- Fata %>% mutate(breath = case_when(breath =="no"~0,breath =="yes"~1))
  • Ta dùng lệnh mutate để mã hoá dữ liệu của biến breath(có phải kiểm tra hơi thở hay không?) thành 2 biểu hiện, số 0 biểu hiện cho không (no) và số 1 biểu hiện cho có (yes).
Fatabr <- Fata %>% select(breath,year,jail ) %>% pivot_wider(names_from = year,values_from = jail, values_fn = list)
Fatabr
## # A tibble: 2 × 8
##   breath `1982`        `1983`        `1984`        `1985` `1986` `1987` `1988`
##    <dbl> <list>        <list>        <list>        <list> <list> <list> <list>
## 1      0 <dbl [1,920]> <dbl [1,664]> <dbl [1,664]> <dbl>  <dbl>  <dbl>  <dbl> 
## 2      1 <dbl [1,152]> <dbl [1,408]> <dbl [1,408]> <dbl>  <dbl>  <dbl>  <dbl>
  • Ta tạo một bộ dữ liệu mới tên là Fatabr. Kết quả của bộ dữ liệu này có được khi ta tiến hành tách các biểu hiện từ cột year và mỗi biểu hiện đại diện cho một cột mới của bộ dữ liệu Fatabr. Giá trị của bảng dữ liệu này lấy từ dữ liệu của biến jail (có bắt buộc phải ngồi tù hay không, số 0 biểu hiện cho “không” và số 1 biểu hiện cho “có”) và được tổng hợp theo từng biểu hiện của biến breath(có phải kiểm tra hơi thở sơ bộ hay không). Tức là ta đang tổng hợp để xem thử những người bị kiểm tra hơi thở có phải ngồi tù hay không. ĐỌc kết quả ta thấy rằng những người bị kiểm tra hơi thở sơ bộ đều phải ngồi tù. (Kết quả của bảng dữ liệu trên đọc là: Ở năm 1982, có 152 kết quả cho thấy những người bị kiểm tra hơi thở đều phải ngồi tù, ở năm 1983 có 408 kết quả cho thấy những người bị kiểm tra hơi thở đều phải ngồi tù,… )

4.5 Thực hành các lệnh này ở bộ dữ liệu TravelMode

library(AER)
data("TravelMode")
Trav <- TravelMode
Trav$nincome <- cut(Trav$income, breaks = c(2,30,50,72),labels = c('it','vua','nhieu'))
Trav <- Trav %>% mutate(nincome = case_when(nincome =="it"~0,nincome =="vua"~1,nincome =="nhieu"~2))
  • Bằng những thao tác đã học ở tuần 2, phân tổ biến income thành 3 nhóm ít, vừa và nhiều. Sau đó dùng lệnh mutate để mã hoá các biểu hiện, số 0 biểu hiện cho thu nhập ít, số 1 biểu hiện cho thu nhập vừa, số 2 biểu hiện cho thu nhập nhiều.
Travin <- Trav %>% select(size, mode, nincome) %>% pivot_wider(names_from = mode, values_from = nincome, values_fn = list )
Travin
## # A tibble: 6 × 5
##    size air         train       bus         car        
##   <int> <list>      <list>      <list>      <list>     
## 1     1 <dbl [114]> <dbl [114]> <dbl [114]> <dbl [114]>
## 2     2 <dbl [58]>  <dbl [58]>  <dbl [58]>  <dbl [58]> 
## 3     3 <dbl [20]>  <dbl [20]>  <dbl [20]>  <dbl [20]> 
## 4     4 <dbl [15]>  <dbl [15]>  <dbl [15]>  <dbl [15]> 
## 5     5 <dbl [2]>   <dbl [2]>   <dbl [2]>   <dbl [2]>  
## 6     6 <dbl [1]>   <dbl [1]>   <dbl [1]>   <dbl [1]>
  • Ta tạo một bộ dữ liệu mới tên là Travin. Kết quả của bộ dữ liệu này có được khi ta tiến hành tách các biểu hiện từ cột mode(phương tiện giao thông mà hành khách chọn để đi du lịch) và mỗi biểu hiện đại diện cho một cột mới của bộ dữ liệu Travin. Giá trị của bảng dữ liệu này lấy từ dữ liệu của biến income(thu nhập của những hành khách này) và được tổng hợp theo từng biểu hiện của biến size(quy mô bữa tiệc mà họ tổ chức). Tuần trước, bằng cách thống kê trung bình ta đã phân tích được rằng thu nhập không ảnh hưởng đến sự lựa chọn phương thức di chuyển của các hành khách, và kết quả của bảng dữ liệu trên ta có thể thấy được mức thu nhập ít, vừa và nhiều nó phân bố đều trong các phương thức di chuyển nên ta vẫn kết luận rằng thu nhập nó không ảnh hưởng đến sự lựa chọn phương thức di chuyển của các hành khách.
Travcos <- Trav %>% select(individual, mode, vcost) %>% pivot_wider(names_from = mode, values_from = vcost, values_fn = list )
Travcos
## # A tibble: 210 × 5
##    individual air       train     bus       car      
##    <fct>      <list>    <list>    <list>    <list>   
##  1 1          <int [1]> <int [1]> <int [1]> <int [1]>
##  2 2          <int [1]> <int [1]> <int [1]> <int [1]>
##  3 3          <int [1]> <int [1]> <int [1]> <int [1]>
##  4 4          <int [1]> <int [1]> <int [1]> <int [1]>
##  5 5          <int [1]> <int [1]> <int [1]> <int [1]>
##  6 6          <int [1]> <int [1]> <int [1]> <int [1]>
##  7 7          <int [1]> <int [1]> <int [1]> <int [1]>
##  8 8          <int [1]> <int [1]> <int [1]> <int [1]>
##  9 9          <int [1]> <int [1]> <int [1]> <int [1]>
## 10 10         <int [1]> <int [1]> <int [1]> <int [1]>
## # ℹ 200 more rows
  • Ta tạo một bộ dữ liệu mới tên là Travcos. Kết quả của bộ dữ liệu này có được khi ta tiến hành tách các biểu hiện từ cột mode(phương tiện giao thông mà hành khách chọn để đi du lịch) và mỗi biểu hiện đại diện cho một cột mới của bộ dữ liệu Travcos. Giá trị của bảng dữ liệu này lấy từ dữ liệu của biến vcost(chi phí chung cho chuyến du lịch này) và được tổng hợp theo từng biểu hiện của biến individual( biểu hiện của từng nhóm người). Ta đang kiểm tra thử xem chi phí chung của từng phương tiện có chênh lệch nhau nhiều hay không. Đọc kết quả của bảng dữ liệu thì ta thấy được chi phí khi di chuyển bằng máy bay ở tất cả các người khảo sát đều cao hơn so với các phương tiện khác(ô tô, tàu, xe bus), còn chi phí của ô tô, tàu và xe bus chênh lệch nhau không nhiều.

4.6 Thực hành với package ggplot2 (Dùng bộ dữ liệu TravelMode)

4.6.1 Đồ thị dạng Scatter

library(ggplot2)
data("TravelMode")
a <- TravelMode
### Đồ thị dạng Scatter
TravelMode %>% ggplot(aes(x= vcost, y= size)) + geom_point() + theme_minimal() +
  labs(subtitle = " Sự phụ thuộc giữa quy mô tổ chức bữa tiệc và chi phí chung cho chuyến đi")

  • Đồ thị trên thể hiện cho sự phụ thuộc giữa quy mô tổ chức bữa tiệc và chi phí chung cho chuyến đi. Từ đồ thị trên cho ta thấy đa số các hành khách chỉ tổ chức với quy mô nhỏ và vừa, và chi phí chung cho chuyến đi của họ cũng trải đều ở các mức từ thấp đến cao. Chỉ có một vài hành khách có chi phí chung cho chuyến đi của họ ít hoặc vừa thì họ có xu hướng tổ chức bữa tiệc với quy mô lớn.
TravelMode %>% ggplot(aes(x = wait, y = gcost, color = mode)) + geom_smooth(formula = y ~ x, method = 'lm', color = 'purple') +geom_point(na.rm = T) + labs(title = 'Sự phụ thuộc giữa thời gian chờ đợi trước khi phương tiện di chuyển và chi phí phương tiện', x = 'Gcost', y = 'Wait')

  • Từ kết quả trên ta thấy 2 biến này cũng tỷ lệ thuận với nhau. Tuy nhiên đường thẳng tuyến tính dốc ít thể hiện nó chỉ tỷ lệ ở mức tương đối, thời gian chờ đợi trước khi phương tiện di chuyển (wait) nó cũng còn phụ thuộc vào nhiều yếu tố khác chứ không chỉ phụ thuộc vào chi phí phải trả cho phương tiện đó. Nhìn vào màu sắc của biểu đồ ta cũng có thể thấy chi phí cho phương tiện là máy bay (air) ở mức cao nhất, chi phí cho phương tiện là xe ô tô (car) ở mức thấp nhất, còn chi phí cho tàu (train) và xe bus (bus) nó sẽ phân bố đều ở các mức.

4.6.2 Đồ thị dạng cột

a %>% ggplot(aes(x= vcost )) +
  geom_bar( fill = 'pink')

  • Đồ thị trên cho ta biết rằng ứng với từng mức chi phí thì sẽ có bao nhiêu người.Đọc kết quả đồ thị trên, ta thấy rằng có nhiều người tham gia khảo sát nhất trả lời rằng họ đã chi ra mức chi phí khoảng 15 đơn vị cho chuyến đi này.
library(scales)
a %>% ggplot(aes(x = mode, y = after_stat(count))) +
  geom_bar(fill = 'pink') +geom_text(aes(label = scales::percent(after_stat(count/sum(count)))), stat = 'count', color = 'black', vjust = 2) +theme_classic() + labs(x = 'Phương tiện di chuyển', y = 'Số người')

  • Đồ thị trên dùng để biểu hiện giá trị phần trăm số người chọn loại phương tiện nào để di chuyển. Nhìn vào đồ thị, ta thấy rằng ở 4 loại phương tiện đều hiển thị số người là 25%, vậy trong tổng số người tham gia khảo sát thì 1/4 trong số đó chọn mỗi loại phương tiện khác nhau.

5 Bài tập tuần 2

5.1 Mô tả bộ dữ liệu: TravelMode - Package:AER

  • Mô tả: Dữ liệu về lựa chọn phương thức di chuyển cho hành trình giữa Sydney, Melbourne và Úc. Một data frame chứa 840 quan sát trên 4 chế độ cho 210 mẫu, gồm có 9 biến
  • individual: Hệ số biểu thị cá nhân có cấp độ từ 1 đến 210
  • mode: Phương thức di chuyển với những lựa chọn là “ô tô”, “máy bay”, “tàu hỏa” hoặc “xe buýt”
  • choice: Yếu tố thể hiện sự lựa chọn với mức độ “không” và “có”.
  • wait: Thời gian chờ đợi trước khi phương tiện hành khách chọn xuất phát, số 0 thể hiện cho ô tô
  • vcost: Chi phí phương tiện
  • travel: Thời gian di chuyển trên xe.
  • gcost: Đo lường chi phí chung.
  • income: Thu nhập hộ gia đình.
  • size: Quy mô bữa tiệc (Biến định tính có các cấp độ từ 1 đến 6 biểu hiện sự biến động từ “nhỏ nhất, nhỏ, trung bình, vừa, lớn và rất lớn”)
library(AER)
data("TravelMode") 

5.2 Các thao tác gán biến và thêm biến

d <-TravelMode
names(d) <- c('I','M','C','W','V','T','G','IN','S')
air <- d[d$M=='air',] 
Travl3000 <- d[d$T>300&d$W=='0',]
  • Từ biến d chọn ra những dòng có thời gian di chuyển trên xe lớn hơn 300 và thời gian chờ đợi trước khi phương tiện hành khách chọn xuất phát là 0 (tức là hành khách chọn phương tiện di chuyển là ô tô) và gán nó ứng với biến Travel3000
d$Traveltime <- cut(d$T, breaks = c(63,400,700,1000,1440),labels = c('ngắn','vừa','dài','siêu dài'))
  • Thêm một biến Traveltime vào biến d, biến Traveltime biểu hiện cho “các khoảng thời gian di chuyển trên trên phương tiện” và biến này có được bằng cách phân tổ biến “thời gian di chuyển trên phương tiện” thành 4 tổ, tổ thứ nhất có giá trị từ 63 đến 400, tổ thứ 2 có giá trị từ 400 đến 700, tổ thứ 3 có giá trị từ 700 đến 1000 và tổ thứ 4 có giá trị từ 1000 đến 1440, các tổ này được đặt tên theo thứ tự là ngắn, vừa, dài và siêu dài.
d$Cost <- cut(d$G, breaks = c(25,125,225,300),labels = c('tiết kiệm','vừa đủ','thoải mái'))
  • Thêm một biến Cost vào biến d, biến Cost biểu hiện cho “mức chi phí mà hộ gia đình đã chi ra cho chuyến đi” và biến này có được bằng cách phân tổ biến gcost(chi phí chung) thành 3 tổ, tổ thứ nhất có giá trị từ 25 đến 125, tổ thứ 2 có giá trị từ 125 đến 225, tổ thứ 3 có giá trị từ 225 đến 300 và các giá trị này được phân loại theo 3 mức “tiết kiệm, vừa đủ và thoải mái”

5.3 Tính những đặc trưng đo lường cơ bản

summary(d$IN) 
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    2.00   20.00   34.50   34.55   50.00   72.00
  • Trong này bao gồm giá trị lớn nhất của thu nhập hộ gia đình là 72, giá trị nhỏ nhất là 2, giá trị trung bình là 34.55, giá trị trung vị là 34.5, tứ phân vị thứ nhất là 20 và tứ phân vị thứ 3 là 50.
quantile(d$IN,0.35)
## 35% 
##  26
  • Kết quả trên cho ta thấy với số liệu của thu nhập hộ gia đình (income-IN), có bé hơn 35% hộ gia đình có thu nhập là 26 và có lớn hơn 65% hộ gia đình có thu nhập là 26
quantile(d$G,0.5)
##   50% 
## 101.5
  • Với kết quả trên, ta thấy được với số liệu của chi phí chung cho chuyến đi(gcost) thì có bé hơn 50% hộ gia đình có mức chi phí chi ra là 101.5 đơn vị và có lớn hơn 50% hộ gia đình có mức chi phí chi ra lớn hơn con số này.
aggregate(d$IN,list(d$M),FUN='mean')
##   Group.1        x
## 1     air 34.54762
## 2   train 34.54762
## 3     bus 34.54762
## 4     car 34.54762
  • Câu hỏi đặt ra ở đây là liệu thu nhập của khách hàng có ảnh hưởng tới sự lựa chọn phương tiện di chuyển của họ hay không? Ta tổng hợp kết quả của thu nhập trung bình theo sự lựa chọn phương thức di chuyển của họ. Từ kết quả trên cho ta thấy, thu nhập trung bình của khách hàng đối với các phương tiện di chuyển đều bằng 34.54762, vậy ta có thể kết luận thu nhập trung bình của các hộ gia đình không ảnh hưởng tới việc lựa chọn phương thức di chuyển của họ.
aggregate(d$IN,list(d$S),FUN='mean')
##   Group.1        x
## 1       1 31.82456
## 2       2 35.67241
## 3       3 40.45000
## 4       4 38.93333
## 5       5 60.00000
## 6       6 45.00000
  • Tương tự như trên, ta phân tích xem thu nhập của hộ gia đình có ảnh hưởng đên quy mô bữa tiệc mà họ tổ chức hay không. Kết quả trên cho ta thấy, với những hộ gia đình có xu hướng tổ chức bữa tiệc với quy mô nhỏ nhất thì trung bình thu nhập của họ chỉ xấp xỉ 31.82 đơn vị (nhỏ nhất so với trung bình thu nhập của các hộ gia đình còn lại). Với những hộ gia đình có xu hướng tổ chức bữa tiệc với quy mô lớn và rất lớn thì trung bình thu nhập của họ lên đến 45 đến 60 đơn vị - hơn rất nhiều so với thu nhập trung bình của các hộ gia đình tổ chức bữa tiệc với quy mô nhỏ. Vậy ta có thể kết luận rằng, thu nhập của hộ gia đình có ảnh hưởng đến quy mô tổ chức bữa tiệc của họ

5.4 Tính phương sai và độ lệch chuẩn cho biến thành phần chi phí phương tiện (vcost)

var(d$V)
## [1] 1047.882
sd(d$V)
## [1] 32.371
  • Giá trị Var = 1047.882 biểu hiện cho phương sai cho những giá trị của biến Vcost là 1047.882 và giá trị Sd biểu hiện cho độ lệch chuẩn cho những giá trị của biến Vcost là 32.371

5.5 Dùng lệnh %>% trong packages tidyverse để rút gọn thao tác

install.packages("tidyverse", repos = "https://cloud.r-project.org")
## Warning: package 'tidyverse' is in use and will not be installed
library(tidyverse) 
TravelMode %>% group_by(mode) %>%  summarise(n=mean(travel))
## # A tibble: 4 × 2
##   mode      n
##   <fct> <dbl>
## 1 air    134.
## 2 train  608.
## 3 bus    629.
## 4 car    573.
  • Thao tác trên cho ra kết quả trung bình của thời gian di chuyển trên từng phương tiện,ta thấy thời gian trung bình khi sử dụng phương tiện di chuyển là máy bay=133 đơn vị - ngắn hơn nhiều so với khi sử dụng các phương tiện di chuyển khác. Thời gian trung bình khi di chuyển bằng tàu, xe bus và xe ô tô lần lượt là 608,629 và 573 đơn vị.
TravelMode %>% group_by(mode) %>%  summarise_at(c('wait','vcost'),list(n=mean))
## # A tibble: 4 × 3
##   mode  wait_n vcost_n
##   <fct>  <dbl>   <dbl>
## 1 air     61.0    85.3
## 2 train   35.7    51.3
## 3 bus     41.7    33.5
## 4 car      0      21.0
  • Ta dùng lệnh summarise_at để cho ra kết quả trung bình thời gian chờ đợi trước khi phương tiện xuất phát (wait) và trung bình thành phần chi phí phương tiện(vcost) của từng loại phương tiện di chuyển(máy bay, tàu, xe bus và xe ô tô). Đọc kết quả, ta có thể thấy được cả thời gian chờ đợi và chi phí của phương tiện máy bay là cao nhất, thời gian chờ đợi và chi phí của ô tô là thấp nhất
TravelMode %>% group_by(mode) %>%  summarise_if(is.numeric,list(n=mean))
## # A tibble: 4 × 7
##   mode  wait_n vcost_n travel_n gcost_n income_n size_n
##   <fct>  <dbl>   <dbl>    <dbl>   <dbl>    <dbl>  <dbl>
## 1 air     61.0    85.3     134.   103.      34.5   1.74
## 2 train   35.7    51.3     608.   130.      34.5   1.74
## 3 bus     41.7    33.5     629.   115.      34.5   1.74
## 4 car      0      21.0     573.    95.4     34.5   1.74
  • Ở câu lệnh trên, ta sử dụng lệnh summarise_if để lấy chỉ số trung bình cửa những biến số(numeric). Những biến số bao gồm thời gian chờ đợi trước khi phương tiện di chuyển (wait),thành phần chi phí phương tiện(vcost), thời gian di chuyển trên xe(travel),chi phí chung(gcost), thu nhập hộ gia đình(income), quy mô tổ chức bữa tiệc(size).
is.data.frame(TravelMode)
## [1] TRUE
  • Kiểu tra xem TravelMode có phải là một bộ dữ liệu hay không. Kết quả cho ra là đúng
is.vector(TravelMode)
## [1] FALSE
  • Kiểm tra xem TravelMode có phải là một vector hay không. Kết quả cho ra là sai
is.vector(TravelMode$mode)
## [1] FALSE
  • Kiểm tra xem biến mode(phương thức di chuyển) cố phải là một vector hay không. Vì đây là biến dữ liệu định tính nên kết quả cho ra là sai
is.vector(TravelMode$wait)
## [1] TRUE
  • Kiểm tra xem biến wait(thời gian chờ đợi trước khi phương tiện di chuyển) có phải là một vector hay không. Vì đây là một biến định lượng nên kết quả cho ra là đúng. ## Nối các vector thành một bộ dữ liệu
A1 <- d$G 
is.vector(A1) 
## [1] TRUE
  • Kiểm tra A1 có phải là một vector hay không
A1 <- as.data.frame(A1) 
B1 <- seq(1,1,length=10) 
A1$B1 <- B1 
  • Trên đây là bộ dữ liệu A1, được lấy từ dữ liệu của cột chi phí chung của bộ dữ liệu TravelMode
A2 <- d$V 
is.vector(A2)
## [1] TRUE
  • Kiểm tra A2 có phải là một vector hay không
A2 <- as.data.frame(A2) 
B2 <- seq(1,1, length=10) 
A2$B2 <- B2 
  • Trên đây là bộ dữ liệu A2, được lấy từ cột chi phí phương tiện của bộ dữ liệu TravelMode
  • Tiếp theo ta tiến hành nối 2 bộ dữ liệu A1,A2 vào thành một bộ dữ liệu A
A <- left_join(A1,A2, by = c("B1"="B2"), relationship ='many-to-many')
  • Bộ dữ liệu A là kết quả sau khi đã được dùng lệnh left_join trong package-dplyr để nối 2 bộ dữ liệu A1 và A2 với biến chung là biến B1

6 Bài tập tuần 1

6.1 Mô tả bộ dữ liệu: TravelMode - Package:AER

  • Mô tả: Dữ liệu về lựa chọn phương thức di chuyển cho hành trình giữa Sydney, Melbourne và Úc. Một data frame chứa 840 quan sát trên 4 chế độ cho 210 mẫu, gồm có 9 biến
  • individual: Hệ số biểu thị cá nhân có cấp độ từ 1 đến 210
  • mode: Phương thức di chuyển với những lựa chọn là “ô tô”, “máy bay”, “tàu hỏa” hoặc “xe buýt”
  • choice: Yếu tố thể hiện sự lựa chọn với mức độ “không” và “có”.
  • wait: Thời gian chờ đợi trước khi phương tiện hành khách chọn xuất phát, số 0 thể hiện cho ô tô
  • vcost: Chi phí phương tiện
  • travel: Thời gian di chuyển trên xe.
  • gcost: Đo lường chi phí chung.
  • income: Thu nhập hộ gia đình.
  • size: Quy mô bữa tiệc (Biến định tính có các cấp độ từ 1 đến 6 biểu hiện sự biến động từ “nhỏ nhất, nhỏ, trung bình, vừa, lớn và rất lớn”)
library(AER)
# Lấy dữ liệu của datashet TravelMode
data("TravelMode")
# Gán dữ liệu của TravelMode cho biến d
d <- TravelMode
# Mô tả chi tiết kiểu biến số của datashet TravelMode
str(d)
## 'data.frame':    840 obs. of  9 variables:
##  $ individual: Factor w/ 210 levels "1","2","3","4",..: 1 1 1 1 2 2 2 2 3 3 ...
##  $ mode      : Factor w/ 4 levels "air","train",..: 1 2 3 4 1 2 3 4 1 2 ...
##  $ choice    : Factor w/ 2 levels "no","yes": 1 1 1 2 1 1 1 2 1 1 ...
##  $ wait      : int  69 34 35 0 64 44 53 0 69 34 ...
##  $ vcost     : int  59 31 25 10 58 31 25 11 115 98 ...
##  $ travel    : int  100 372 417 180 68 354 399 255 125 892 ...
##  $ gcost     : int  70 71 70 30 68 84 85 50 129 195 ...
##  $ income    : int  35 35 35 35 30 30 30 30 40 40 ...
##  $ size      : int  1 1 1 1 2 2 2 2 1 1 ...
# Lấy dữ liệu của 6 dòng đầu của biến d
head(d)
##   individual  mode choice wait vcost travel gcost income size
## 1          1   air     no   69    59    100    70     35    1
## 2          1 train     no   34    31    372    71     35    1
## 3          1   bus     no   35    25    417    70     35    1
## 4          1   car    yes    0    10    180    30     35    1
## 5          2   air     no   64    58     68    68     30    2
## 6          2 train     no   44    31    354    84     30    2
# Gán tên viết tắt cho các biến để dễ thao tác
names(d) <- c('I','M','C','W','V','T','G','IN','S')
# Lấy dữ liệu của biến V
Vco <- d$V
# Chi phí phương tiện lớn hơn 50
Vco50 <- Vco[Vco>50]
# Chi phí phương tiện lớn hơn 30 và nhỏ hơn 100
Vco30100 <- Vco[Vco>30&Vco<100]
# Lấy dữ liệu của biến T
Tra <- d$T
# Lấy dữ liệu của biến G
Gco <- d$G
#Xem dữ liệu thứ 10 của biến G
Gco[10]
## [1] 195
# Tổng giá trị của V,T và G
tongTVG <- d$T+d$V+d$G
tongTVG
##   [1]  229  474  512  220  194  469  509  316  369 1185 1084  844  176  459  501
##  [16]  217  286  529  569  707  229  422  488  339  423 1269 1168  982  410 1090
##  [31] 1075  965  229  474  512  267  191  457  495  247  194  443  488  250  249
##  [46]  494  534  300  222  483  525  286  224  476  516  358  361 1232 1174 1416
##  [61]  260  399  532  416  204  359  483  375  229  375  481  397  282  374  533
##  [76]  505  223  408  449  382  203  380  468  374  395  626  751  670  400  803
##  [91]  718  706  362  801  716  706  242  431  474  346  331 1249 1148 1211  272
## [106]  848  763  722  331  842  828  720  354  454  440  388  229  338  488  341
## [121]  230  367  515  355  227  424  507  399  202  392  507  380  198  389  478
## [136]  374  267  395  466  367  250  406  521  374  336  463  590  514  177  367
## [151]  480  367  273  465  560  412  405  943  859  753  372  801  716  688  409
## [166]  811  726  699  432  870  785  755  321  857  772  699  342  787  772  689
## [181]  423  874  790  744  295  825  740  691  223  466  504  373  236  428  474
## [196]  371  348  943  859  755  307  929  844  764  308  877  829  692  256  453
## [211]  526  394  220  436  530  403  174  378  481  372  404 1032 1071 1080  496
## [226] 1031 1153 1174  389 1044 1101 1029  397  994 1077 1055  313 1049 1053 1017
## [241]  427 1078 1107 1137  623 1058 1129 1137  374 1080 1172 1060  359  931  996
## [256] 1010  421  967 1102 1045  349 1202  936 1083  483 1474 1372 1158  412 1190
## [271] 1020 1063  370 1058 1152 1054  423 1031 1102 1072  437  508 1187 1087  341
## [286]  903 1061 1030  481  966 1274 1166  430  972 1024 1108  432 1143 1136 1058
## [301]  373 1113 1113 1130  344 1047 1020 1031  413 1194 1178  881  321 1184 1134
## [316] 1678  396 1181  956 1044  468 1202 1240 1089  203  454  456  217  226  377
## [331]  483  402  245  494  519  387  291  825  740  697  194  390  500  383  254
## [346]  436  441  286  202  374  493  392  254  466  465  317  205  382  500  383
## [361]  195  395  437  372  253  437  523  432  292  826  741  445  393  457  497
## [376]  367  357 1251 1149 1059  367  928  843  746  284  487  395  414  537 1270
## [391] 1169 1071  454 1251 1343 1111  418 1261 1187  932  241  479  449  435  327
## [406] 1165 1115  855  225  437  481  359  396 1188 1087 1148  431 1253 1152 1698
## [421]  406 1262  937 1082  416 1177 1076  866  324 1172 1114 1024  286  529  569
## [436]  327  358 1207 1149  853  254  486  524  290  447 1268 1166  867  308  460
## [451]  500  377  220  647  687  479  265  520  558  323  248  474  512  399  189
## [466]  455  308  381  463 1168 1017 1067  407 1184 1083 1006  235  457  495  384
## [481]  265  431  477  348  508 1219 1118  995  404 1223 1122 1127  369 1161 1146
## [496] 1036  405 1278  824 1076  402 1199  957 1078  365 1269 1196 1028  376 1172
## [511]  970 1044  236  474  512  359  259  507  518  435  391 1191 1090  764  337
## [526] 1161 1088  792  433 1254 1106 1077  371 1079  859 1052  390 1315 1213  828
## [541]  413 1308 1292  867  380 1195 1094  903  387 1194 1072 1080  316 1139  957
## [556]  985  287 1148 1075  715  390  987 1089 1054  497 1070 1088 1056  416 1093
## [571] 1205 1081  376 1006 1125 1044  402  926 1061 1039  390  949 1013 1052  383
## [586]  903 1066 1033  395  923 1151 1072  477 1116 1172 1149  487 1197 1096 1065
## [601]  403 1096 1081 1078  481 1329 1189 1162  596 1266 1164 1146  449 1178 1077
## [616] 1046  258  476  516  400  229  468  509  371  537 1310 1168 1143  380 1334
## [631] 1233 1180  275  505  545  396  246  547  589  345  240  442  480  366  293
## [646]  473  511  376  321 1018  957  563  297  884  836  661  295  837  777  603
## [661]  316  916  831  731  308  821  772  634  286  839  801  551  267  816  731
## [676]  548  309  876  815  700  347 1023  938  590  203  454  304  376  267  502
## [691]  308  417  311  850  713  701  248  504  542  234  528 1347 1023 1201  215
## [706]  461  369  357  244  493  311  396  242  837  752  726  301  463  503  383
## [721]  209  496  534  357  252  490  528  327  205  525  510  389  376  565  473
## [736]  388  201  382  496  377  279  827  778  697  183  431  474  375  214  451
## [751]  493  370  229  474  512  259  197  421  420  302  328  541  546  285  280
## [766]  470  508  367  257  447  485  375  419  879  591  752  169  336  483  381
## [781]  223  423  424  376  222  461  498  319  338  803  718  694  220  461  501
## [796]  349  218  484  526  394  410 1102 1009  955  312  852  768  657  245  451
## [811]  438  405  193  458  351  366  374 1152  929 1036  299  809  724  858  402
## [826]  801  716  704  213  429  351  359  299  740  726  619  293  880  831  646
#Phân tổ dữ liệu cho biến thu nhập(income), phân tổ thành 4 tổ
Inc <- d$IN
cut(Inc,4)
##   [1] (19.5,37]   (19.5,37]   (19.5,37]   (19.5,37]   (19.5,37]   (19.5,37]  
##   [7] (19.5,37]   (19.5,37]   (37,54.5]   (37,54.5]   (37,54.5]   (37,54.5]  
##  [13] (54.5,72.1] (54.5,72.1] (54.5,72.1] (54.5,72.1] (37,54.5]   (37,54.5]  
##  [19] (37,54.5]   (37,54.5]   (19.5,37]   (19.5,37]   (19.5,37]   (19.5,37]  
##  [25] (37,54.5]   (37,54.5]   (37,54.5]   (37,54.5]   (1.93,19.5] (1.93,19.5]
##  [31] (1.93,19.5] (1.93,19.5] (37,54.5]   (37,54.5]   (37,54.5]   (37,54.5]  
##  [37] (54.5,72.1] (54.5,72.1] (54.5,72.1] (54.5,72.1] (1.93,19.5] (1.93,19.5]
##  [43] (1.93,19.5] (1.93,19.5] (19.5,37]   (19.5,37]   (19.5,37]   (19.5,37]  
##  [49] (37,54.5]   (37,54.5]   (37,54.5]   (37,54.5]   (37,54.5]   (37,54.5]  
##  [55] (37,54.5]   (37,54.5]   (19.5,37]   (19.5,37]   (19.5,37]   (19.5,37]  
##  [61] (19.5,37]   (19.5,37]   (19.5,37]   (19.5,37]   (19.5,37]   (19.5,37]  
##  [67] (19.5,37]   (19.5,37]   (1.93,19.5] (1.93,19.5] (1.93,19.5] (1.93,19.5]
##  [73] (19.5,37]   (19.5,37]   (19.5,37]   (19.5,37]   (54.5,72.1] (54.5,72.1]
##  [79] (54.5,72.1] (54.5,72.1] (1.93,19.5] (1.93,19.5] (1.93,19.5] (1.93,19.5]
##  [85] (1.93,19.5] (1.93,19.5] (1.93,19.5] (1.93,19.5] (37,54.5]   (37,54.5]  
##  [91] (37,54.5]   (37,54.5]   (37,54.5]   (37,54.5]   (37,54.5]   (37,54.5]  
##  [97] (1.93,19.5] (1.93,19.5] (1.93,19.5] (1.93,19.5] (54.5,72.1] (54.5,72.1]
## [103] (54.5,72.1] (54.5,72.1] (37,54.5]   (37,54.5]   (37,54.5]   (37,54.5]  
## [109] (1.93,19.5] (1.93,19.5] (1.93,19.5] (1.93,19.5] (1.93,19.5] (1.93,19.5]
## [115] (1.93,19.5] (1.93,19.5] (1.93,19.5] (1.93,19.5] (1.93,19.5] (1.93,19.5]
## [121] (19.5,37]   (19.5,37]   (19.5,37]   (19.5,37]   (37,54.5]   (37,54.5]  
## [127] (37,54.5]   (37,54.5]   (54.5,72.1] (54.5,72.1] (54.5,72.1] (54.5,72.1]
## [133] (1.93,19.5] (1.93,19.5] (1.93,19.5] (1.93,19.5] (37,54.5]   (37,54.5]  
## [139] (37,54.5]   (37,54.5]   (19.5,37]   (19.5,37]   (19.5,37]   (19.5,37]  
## [145] (37,54.5]   (37,54.5]   (37,54.5]   (37,54.5]   (1.93,19.5] (1.93,19.5]
## [151] (1.93,19.5] (1.93,19.5] (1.93,19.5] (1.93,19.5] (1.93,19.5] (1.93,19.5]
## [157] (19.5,37]   (19.5,37]   (19.5,37]   (19.5,37]   (19.5,37]   (19.5,37]  
## [163] (19.5,37]   (19.5,37]   (54.5,72.1] (54.5,72.1] (54.5,72.1] (54.5,72.1]
## [169] (54.5,72.1] (54.5,72.1] (54.5,72.1] (54.5,72.1] (37,54.5]   (37,54.5]  
## [175] (37,54.5]   (37,54.5]   (1.93,19.5] (1.93,19.5] (1.93,19.5] (1.93,19.5]
## [181] (54.5,72.1] (54.5,72.1] (54.5,72.1] (54.5,72.1] (19.5,37]   (19.5,37]  
## [187] (19.5,37]   (19.5,37]   (37,54.5]   (37,54.5]   (37,54.5]   (37,54.5]  
## [193] (1.93,19.5] (1.93,19.5] (1.93,19.5] (1.93,19.5] (19.5,37]   (19.5,37]  
## [199] (19.5,37]   (19.5,37]   (54.5,72.1] (54.5,72.1] (54.5,72.1] (54.5,72.1]
## [205] (19.5,37]   (19.5,37]   (19.5,37]   (19.5,37]   (19.5,37]   (19.5,37]  
## [211] (19.5,37]   (19.5,37]   (37,54.5]   (37,54.5]   (37,54.5]   (37,54.5]  
## [217] (1.93,19.5] (1.93,19.5] (1.93,19.5] (1.93,19.5] (19.5,37]   (19.5,37]  
## [223] (19.5,37]   (19.5,37]   (1.93,19.5] (1.93,19.5] (1.93,19.5] (1.93,19.5]
## [229] (19.5,37]   (19.5,37]   (19.5,37]   (19.5,37]   (19.5,37]   (19.5,37]  
## [235] (19.5,37]   (19.5,37]   (19.5,37]   (19.5,37]   (19.5,37]   (19.5,37]  
## [241] (1.93,19.5] (1.93,19.5] (1.93,19.5] (1.93,19.5] (1.93,19.5] (1.93,19.5]
## [247] (1.93,19.5] (1.93,19.5] (1.93,19.5] (1.93,19.5] (1.93,19.5] (1.93,19.5]
## [253] (1.93,19.5] (1.93,19.5] (1.93,19.5] (1.93,19.5] (1.93,19.5] (1.93,19.5]
## [259] (1.93,19.5] (1.93,19.5] (19.5,37]   (19.5,37]   (19.5,37]   (19.5,37]  
## [265] (19.5,37]   (19.5,37]   (19.5,37]   (19.5,37]   (19.5,37]   (19.5,37]  
## [271] (19.5,37]   (19.5,37]   (54.5,72.1] (54.5,72.1] (54.5,72.1] (54.5,72.1]
## [277] (54.5,72.1] (54.5,72.1] (54.5,72.1] (54.5,72.1] (1.93,19.5] (1.93,19.5]
## [283] (1.93,19.5] (1.93,19.5] (1.93,19.5] (1.93,19.5] (1.93,19.5] (1.93,19.5]
## [289] (1.93,19.5] (1.93,19.5] (1.93,19.5] (1.93,19.5] (1.93,19.5] (1.93,19.5]
## [295] (1.93,19.5] (1.93,19.5] (1.93,19.5] (1.93,19.5] (1.93,19.5] (1.93,19.5]
## [301] (1.93,19.5] (1.93,19.5] (1.93,19.5] (1.93,19.5] (19.5,37]   (19.5,37]  
## [307] (19.5,37]   (19.5,37]   (19.5,37]   (19.5,37]   (19.5,37]   (19.5,37]  
## [313] (54.5,72.1] (54.5,72.1] (54.5,72.1] (54.5,72.1] (19.5,37]   (19.5,37]  
## [319] (19.5,37]   (19.5,37]   (54.5,72.1] (54.5,72.1] (54.5,72.1] (54.5,72.1]
## [325] (54.5,72.1] (54.5,72.1] (54.5,72.1] (54.5,72.1] (1.93,19.5] (1.93,19.5]
## [331] (1.93,19.5] (1.93,19.5] (19.5,37]   (19.5,37]   (19.5,37]   (19.5,37]  
## [337] (54.5,72.1] (54.5,72.1] (54.5,72.1] (54.5,72.1] (54.5,72.1] (54.5,72.1]
## [343] (54.5,72.1] (54.5,72.1] (19.5,37]   (19.5,37]   (19.5,37]   (19.5,37]  
## [349] (1.93,19.5] (1.93,19.5] (1.93,19.5] (1.93,19.5] (19.5,37]   (19.5,37]  
## [355] (19.5,37]   (19.5,37]   (19.5,37]   (19.5,37]   (19.5,37]   (19.5,37]  
## [361] (19.5,37]   (19.5,37]   (19.5,37]   (19.5,37]   (1.93,19.5] (1.93,19.5]
## [367] (1.93,19.5] (1.93,19.5] (54.5,72.1] (54.5,72.1] (54.5,72.1] (54.5,72.1]
## [373] (37,54.5]   (37,54.5]   (37,54.5]   (37,54.5]   (37,54.5]   (37,54.5]  
## [379] (37,54.5]   (37,54.5]   (54.5,72.1] (54.5,72.1] (54.5,72.1] (54.5,72.1]
## [385] (1.93,19.5] (1.93,19.5] (1.93,19.5] (1.93,19.5] (19.5,37]   (19.5,37]  
## [391] (19.5,37]   (19.5,37]   (37,54.5]   (37,54.5]   (37,54.5]   (37,54.5]  
## [397] (54.5,72.1] (54.5,72.1] (54.5,72.1] (54.5,72.1] (19.5,37]   (19.5,37]  
## [403] (19.5,37]   (19.5,37]   (37,54.5]   (37,54.5]   (37,54.5]   (37,54.5]  
## [409] (19.5,37]   (19.5,37]   (19.5,37]   (19.5,37]   (19.5,37]   (19.5,37]  
## [415] (19.5,37]   (19.5,37]   (19.5,37]   (19.5,37]   (19.5,37]   (19.5,37]  
## [421] (19.5,37]   (19.5,37]   (19.5,37]   (19.5,37]   (19.5,37]   (19.5,37]  
## [427] (19.5,37]   (19.5,37]   (37,54.5]   (37,54.5]   (37,54.5]   (37,54.5]  
## [433] (54.5,72.1] (54.5,72.1] (54.5,72.1] (54.5,72.1] (37,54.5]   (37,54.5]  
## [439] (37,54.5]   (37,54.5]   (54.5,72.1] (54.5,72.1] (54.5,72.1] (54.5,72.1]
## [445] (54.5,72.1] (54.5,72.1] (54.5,72.1] (54.5,72.1] (19.5,37]   (19.5,37]  
## [451] (19.5,37]   (19.5,37]   (19.5,37]   (19.5,37]   (19.5,37]   (19.5,37]  
## [457] (54.5,72.1] (54.5,72.1] (54.5,72.1] (54.5,72.1] (37,54.5]   (37,54.5]  
## [463] (37,54.5]   (37,54.5]   (37,54.5]   (37,54.5]   (37,54.5]   (37,54.5]  
## [469] (1.93,19.5] (1.93,19.5] (1.93,19.5] (1.93,19.5] (19.5,37]   (19.5,37]  
## [475] (19.5,37]   (19.5,37]   (19.5,37]   (19.5,37]   (19.5,37]   (19.5,37]  
## [481] (19.5,37]   (19.5,37]   (19.5,37]   (19.5,37]   (19.5,37]   (19.5,37]  
## [487] (19.5,37]   (19.5,37]   (19.5,37]   (19.5,37]   (19.5,37]   (19.5,37]  
## [493] (1.93,19.5] (1.93,19.5] (1.93,19.5] (1.93,19.5] (19.5,37]   (19.5,37]  
## [499] (19.5,37]   (19.5,37]   (37,54.5]   (37,54.5]   (37,54.5]   (37,54.5]  
## [505] (37,54.5]   (37,54.5]   (37,54.5]   (37,54.5]   (19.5,37]   (19.5,37]  
## [511] (19.5,37]   (19.5,37]   (54.5,72.1] (54.5,72.1] (54.5,72.1] (54.5,72.1]
## [517] (1.93,19.5] (1.93,19.5] (1.93,19.5] (1.93,19.5] (37,54.5]   (37,54.5]  
## [523] (37,54.5]   (37,54.5]   (54.5,72.1] (54.5,72.1] (54.5,72.1] (54.5,72.1]
## [529] (54.5,72.1] (54.5,72.1] (54.5,72.1] (54.5,72.1] (1.93,19.5] (1.93,19.5]
## [535] (1.93,19.5] (1.93,19.5] (54.5,72.1] (54.5,72.1] (54.5,72.1] (54.5,72.1]
## [541] (1.93,19.5] (1.93,19.5] (1.93,19.5] (1.93,19.5] (37,54.5]   (37,54.5]  
## [547] (37,54.5]   (37,54.5]   (37,54.5]   (37,54.5]   (37,54.5]   (37,54.5]  
## [553] (19.5,37]   (19.5,37]   (19.5,37]   (19.5,37]   (19.5,37]   (19.5,37]  
## [559] (19.5,37]   (19.5,37]   (1.93,19.5] (1.93,19.5] (1.93,19.5] (1.93,19.5]
## [565] (1.93,19.5] (1.93,19.5] (1.93,19.5] (1.93,19.5] (1.93,19.5] (1.93,19.5]
## [571] (1.93,19.5] (1.93,19.5] (19.5,37]   (19.5,37]   (19.5,37]   (19.5,37]  
## [577] (19.5,37]   (19.5,37]   (19.5,37]   (19.5,37]   (1.93,19.5] (1.93,19.5]
## [583] (1.93,19.5] (1.93,19.5] (1.93,19.5] (1.93,19.5] (1.93,19.5] (1.93,19.5]
## [589] (37,54.5]   (37,54.5]   (37,54.5]   (37,54.5]   (37,54.5]   (37,54.5]  
## [595] (37,54.5]   (37,54.5]   (54.5,72.1] (54.5,72.1] (54.5,72.1] (54.5,72.1]
## [601] (1.93,19.5] (1.93,19.5] (1.93,19.5] (1.93,19.5] (37,54.5]   (37,54.5]  
## [607] (37,54.5]   (37,54.5]   (54.5,72.1] (54.5,72.1] (54.5,72.1] (54.5,72.1]
## [613] (54.5,72.1] (54.5,72.1] (54.5,72.1] (54.5,72.1] (37,54.5]   (37,54.5]  
## [619] (37,54.5]   (37,54.5]   (19.5,37]   (19.5,37]   (19.5,37]   (19.5,37]  
## [625] (54.5,72.1] (54.5,72.1] (54.5,72.1] (54.5,72.1] (54.5,72.1] (54.5,72.1]
## [631] (54.5,72.1] (54.5,72.1] (37,54.5]   (37,54.5]   (37,54.5]   (37,54.5]  
## [637] (37,54.5]   (37,54.5]   (37,54.5]   (37,54.5]   (54.5,72.1] (54.5,72.1]
## [643] (54.5,72.1] (54.5,72.1] (19.5,37]   (19.5,37]   (19.5,37]   (19.5,37]  
## [649] (37,54.5]   (37,54.5]   (37,54.5]   (37,54.5]   (54.5,72.1] (54.5,72.1]
## [655] (54.5,72.1] (54.5,72.1] (37,54.5]   (37,54.5]   (37,54.5]   (37,54.5]  
## [661] (19.5,37]   (19.5,37]   (19.5,37]   (19.5,37]   (37,54.5]   (37,54.5]  
## [667] (37,54.5]   (37,54.5]   (37,54.5]   (37,54.5]   (37,54.5]   (37,54.5]  
## [673] (19.5,37]   (19.5,37]   (19.5,37]   (19.5,37]   (37,54.5]   (37,54.5]  
## [679] (37,54.5]   (37,54.5]   (37,54.5]   (37,54.5]   (37,54.5]   (37,54.5]  
## [685] (19.5,37]   (19.5,37]   (19.5,37]   (19.5,37]   (19.5,37]   (19.5,37]  
## [691] (19.5,37]   (19.5,37]   (1.93,19.5] (1.93,19.5] (1.93,19.5] (1.93,19.5]
## [697] (19.5,37]   (19.5,37]   (19.5,37]   (19.5,37]   (19.5,37]   (19.5,37]  
## [703] (19.5,37]   (19.5,37]   (19.5,37]   (19.5,37]   (19.5,37]   (19.5,37]  
## [709] (37,54.5]   (37,54.5]   (37,54.5]   (37,54.5]   (37,54.5]   (37,54.5]  
## [715] (37,54.5]   (37,54.5]   (54.5,72.1] (54.5,72.1] (54.5,72.1] (54.5,72.1]
## [721] (19.5,37]   (19.5,37]   (19.5,37]   (19.5,37]   (19.5,37]   (19.5,37]  
## [727] (19.5,37]   (19.5,37]   (19.5,37]   (19.5,37]   (19.5,37]   (19.5,37]  
## [733] (1.93,19.5] (1.93,19.5] (1.93,19.5] (1.93,19.5] (19.5,37]   (19.5,37]  
## [739] (19.5,37]   (19.5,37]   (37,54.5]   (37,54.5]   (37,54.5]   (37,54.5]  
## [745] (1.93,19.5] (1.93,19.5] (1.93,19.5] (1.93,19.5] (19.5,37]   (19.5,37]  
## [751] (19.5,37]   (19.5,37]   (37,54.5]   (37,54.5]   (37,54.5]   (37,54.5]  
## [757] (54.5,72.1] (54.5,72.1] (54.5,72.1] (54.5,72.1] (1.93,19.5] (1.93,19.5]
## [763] (1.93,19.5] (1.93,19.5] (19.5,37]   (19.5,37]   (19.5,37]   (19.5,37]  
## [769] (54.5,72.1] (54.5,72.1] (54.5,72.1] (54.5,72.1] (1.93,19.5] (1.93,19.5]
## [775] (1.93,19.5] (1.93,19.5] (1.93,19.5] (1.93,19.5] (1.93,19.5] (1.93,19.5]
## [781] (1.93,19.5] (1.93,19.5] (1.93,19.5] (1.93,19.5] (19.5,37]   (19.5,37]  
## [787] (19.5,37]   (19.5,37]   (37,54.5]   (37,54.5]   (37,54.5]   (37,54.5]  
## [793] (54.5,72.1] (54.5,72.1] (54.5,72.1] (54.5,72.1] (37,54.5]   (37,54.5]  
## [799] (37,54.5]   (37,54.5]   (19.5,37]   (19.5,37]   (19.5,37]   (19.5,37]  
## [805] (19.5,37]   (19.5,37]   (19.5,37]   (19.5,37]   (1.93,19.5] (1.93,19.5]
## [811] (1.93,19.5] (1.93,19.5] (19.5,37]   (19.5,37]   (19.5,37]   (19.5,37]  
## [817] (37,54.5]   (37,54.5]   (37,54.5]   (37,54.5]   (37,54.5]   (37,54.5]  
## [823] (37,54.5]   (37,54.5]   (37,54.5]   (37,54.5]   (37,54.5]   (37,54.5]  
## [829] (1.93,19.5] (1.93,19.5] (1.93,19.5] (1.93,19.5] (19.5,37]   (19.5,37]  
## [835] (19.5,37]   (19.5,37]   (54.5,72.1] (54.5,72.1] (54.5,72.1] (54.5,72.1]
## Levels: (1.93,19.5] (19.5,37] (37,54.5] (54.5,72.1]
table(cut(Inc,4))
## 
## (1.93,19.5]   (19.5,37]   (37,54.5] (54.5,72.1] 
##         204         284         196         156
#Phân tổ dữ liệu cho biến Choice
Choi <- d$C
table(Choi)
## Choi
##  no yes 
## 630 210