1 BÀI TẬP VỀ NHÀ 7

1.1 Scrape dữ liệu : Giá chứng khoán Singapore từ trang web investing.com

Investing.com là một nền tảng cung cấp dữ liệu, bảng báo giá theo thời gian thực, biểu đồ, công cụ tài chính, tin nóng và các bài phân tích trên 250 sàn giao dịch trên khắp thế giới với 44 phiên bản ngôn ngữ. Với hơn 21 triệu người dùng hàng tháng và hơn 180 triệu phiên giao dịch, Investing.com là một trong ba trang web tài chính hàng đầu thế giới theo SimilarWeb và Alexa.

Ta gọi các package cần sử dụng

library(rvest) #Package để scrape web
library(tidyverse) # Hệ sinh thái các gói hỗ trợ biến đổi (dplyr) và trực quan hóa dữ liệu (ggplot2)

Ta tiến hành đọc dữ liệu của trang web và bảng dữ liệu giá chứng khoán Singapore sẽ được lưu như một data

singaporestock <- read_html('https://vn.investing.com/equities/singapore') #Đọc dữ liệu từ web
singaporestock <- singaporestock %>% html_table(fill = TRUE) #đọc dữ liệu dạng bảng
ss = singaporestock [[1]] #chọn bảng 1 trong singaporestock
print(ss)
## # A tibble: 100 × 8
##    Tên                  `Lần cuối`   Cao  Thấp T.đổi `% T.đổi` KL    `Thời gian`
##    <chr>                     <dbl> <dbl> <dbl> <dbl> <chr>     <chr> <chr>      
##  1 KPLM Keppel Corp           6.84  6.84  6.72  0.02 +0.29%    2.72M 16:07:00   
##  2 HKLD HK Land Holdin…       3.83  3.87  3.82 -0.02 -0.52%    672.… 16:04:00   
##  3 JCYC Jardine C&C          34.2  34.6  34.0  -0.39 -1.13%    259.… 16:07:00   
##  4 CTDM City Developme…       6.98  7.01  6.92  0.03 +0.43%    903.… 16:11:00   
##  5 SCIL Semb Corp             5.39  5.39  5.31  0.08 +1.51%    2.32M 16:06:00   
##  6 SIAL Singapore Airl…       7.42  7.42  7.36  0.01 +0.13%    3.31M 16:07:00   
##  7 WLIL Wilmar                3.78  3.83  3.78 -0.03 -0.79%    3.34M 16:04:00   
##  8 CMDG ComfortDelGro         1.22  1.23  1.21 -0.01 -0.81%    8.57M 16:09:00   
##  9 FRNM F & N                 1.05  1.07  1.05 -0.01 -0.94%    56.8K 13:39:00   
## 10 OCBC OCBC Bank            12.4  12.4  12.3   0.08 +0.65%    3.02M 16:07:00   
## # ℹ 90 more rows

Giải thích dữ liệu:

  • Tên: tên các mã chứng khoán

  • Lần cuối: giá tham chiếu. Giá tham chiếu là mức giá đóng cửa tại phiên giao dịch gần nhất trước đó.

  • Cao: Là giá khớp ở mốc cao nhất trong phiên

  • Thấp: Là giá khớp ở mốc thấp nhất trong phiên

Đặt tên cho các biến trong tập dữ liệu

names(ss) <- c('n','lt' , 'h' , 'l' , 'c' , '%c' , 'kl' , 't')

Lấy 10 quan sát đầu tiên để phân tích giá chứng khoán thị trường Singapore

ss1 <- head(ss, 10)

Vì tên các mã chứng khoán khá dài nên ta chỉ lấy 4 kí tự đầu trong chuỗi kí tự để có thể dễ quan sát

ss1$n <- substr(ss1$n, 1,4)

Dùng ggplot để vẽ đồ thị giá của 10 mã chứng khoán đầu tiên

ggplot(ss1, aes(x= n, y=lt))+
  geom_col(fill  = 'lightgreen')+
  geom_text(aes(label = ss1$lt), color = 'darkgreen' )+
  labs(x = 'Tên', y = 'Giá tham chiếu', title = 'Giá tham chiếu một số mã chứng khoán của Singapore')
## Warning: Use of `ss1$lt` is discouraged.
## ℹ Use `lt` instead.

1.2 Tìm hiểu 10 indicators của World Bank

Ở phần này, ta sử dụng gói WDI để gọi ra cacs indicator ta muốn tìm hiểu. Ngoài ra, nếu ta muốn tìm dữ liệu liên quan đến vấn đề nào đó, ta có thể sử dụng hàm WDIsearch(‘gõ các từ khóa muốn tìm kiếm’) để nhận được dữ liệu mong muốn

library(WDI)
## Warning: package 'WDI' was built under R version 4.3.1
library(tidyverse)
tl <- WDIsearch('GDP') # Tìm kiếm dữ liệu về GDP
head(tl)
##               indicator                                                 name
## 712      5.51.01.10.gdp                                Per capita GDP growth
## 714     6.0.GDP_current                                      GDP (current $)
## 715      6.0.GDP_growth                                GDP growth (annual %)
## 716         6.0.GDP_usd                                GDP (constant 2005 $)
## 717  6.0.GDPpc_constant GDP per capita, PPP (constant 2011 international $) 
## 1557  BG.GSR.NFSV.GD.ZS                         Trade in services (% of GDP)

1.2.1 Indicator: VY.GDP.PCAP.PP.CD là indicator về GDP trên đầu người

Indicator VY.GDP.PCAP.PP.CD là indicator về GDP trên đầu người của các nước trong giai đoạn từ 1960 đến 2022

gdp <- WDI(indicator = 'NY.GDP.PCAP.PP.CD')

Sử dụng pivot_wider để chuyển định dạng dữ liệu từ dọc sang ngang, giúp quan sát dữ liệu dễ hơn.

gdp1 <- gdp %>% pivot_wider(names_from = year , id_cols = country , values_from = NY.GDP.PCAP.PP.CD)

Nếu ta chỉ muốn nhận dữ liệu GDP của duy nhất một nước nào đó thì ta có thể sử dụng country = . Ở đây ta lấy dữ liệu của nước Mỹ.

gdpusa <- WDI(indicator= 'NY.GDP.PCAP.PP.CD', country = 'US', extra = FALSE)

#Loại bỏ giá trị NA 
gdpusa <- na.omit(gdpusa)
gdpusa
##          country iso2c iso3c year NY.GDP.PCAP.PP.CD
## 1  United States    US   USA 2022          76398.59
## 2  United States    US   USA 2021          70219.47
## 3  United States    US   USA 2020          63528.63
## 4  United States    US   USA 2019          65120.39
## 5  United States    US   USA 2018          62823.31
## 6  United States    US   USA 2017          59907.75
## 7  United States    US   USA 2016          57866.74
## 8  United States    US   USA 2015          56762.73
## 9  United States    US   USA 2014          55123.85
## 10 United States    US   USA 2013          53291.13
## 11 United States    US   USA 2012          51784.42
## 12 United States    US   USA 2011          50065.97
## 13 United States    US   USA 2010          48650.64
## 14 United States    US   USA 2009          47194.94
## 15 United States    US   USA 2008          48570.05
## 16 United States    US   USA 2007          48050.22
## 17 United States    US   USA 2006          46302.00
## 18 United States    US   USA 2005          44123.41
## 19 United States    US   USA 2004          41724.63
## 20 United States    US   USA 2003          39490.27
## 21 United States    US   USA 2002          37997.76
## 22 United States    US   USA 2001          37133.62
## 23 United States    US   USA 2000          36329.96
## 24 United States    US   USA 1999          34515.39
## 25 United States    US   USA 1998          32853.68
## 26 United States    US   USA 1997          31459.14
## 27 United States    US   USA 1996          29967.71
## 28 United States    US   USA 1995          28690.88
## 29 United States    US   USA 1994          27694.85
## 30 United States    US   USA 1993          26387.29
## 31 United States    US   USA 1992          25418.99
## 32 United States    US   USA 1991          24342.26
## 33 United States    US   USA 1990          23888.60
# Vẽ đồ thị 
ggplot(gdpusa, aes(x=year, y= NY.GDP.PCAP.PP.CD))+
  geom_line(na.rm = T, color = 'darkgreen', linewidth = 1)+
   scale_x_continuous(breaks = seq(from = 1990, to = 2022 , by = 5))+
  labs(x= 'Năm', y='GDP', title = 'GDP của Mỹ từ năm 1990 đến 2022')

Nhìn vào đồ thị ta thấy GDP Mỹ tăng trưởng mạnh mẽ qua từng năm.

1.2.2 Indicator SH.DTH.INJR.ZS

SH.DTH.INJR.ZS là indicator liên quan đến sức khỏe. Nó nói về số người tử vong được tính bằng tỷ lệ của tất cả các nguyên nhân tử vong ở mọi lứa tuổi. Thương tích gây tử vong bao gồm thương tích vô ý và cố ý.

di<- WDI(country = 'VNM', indicator = 'SH.DTH.INJR.ZS')
head(di)
##   country iso2c iso3c year SH.DTH.INJR.ZS
## 1 Vietnam    VN   VNM 2022             NA
## 2 Vietnam    VN   VNM 2021             NA
## 3 Vietnam    VN   VNM 2020             NA
## 4 Vietnam    VN   VNM 2019       9.328489
## 5 Vietnam    VN   VNM 2018             NA
## 6 Vietnam    VN   VNM 2017             NA
di<- na.omit(di)
di
##    country iso2c iso3c year SH.DTH.INJR.ZS
## 4  Vietnam    VN   VNM 2019       9.328489
## 8  Vietnam    VN   VNM 2015       8.836912
## 13 Vietnam    VN   VNM 2010       8.736824
## 23 Vietnam    VN   VNM 2000       8.964914
ggplot(di, aes(x= year, y= SH.DTH.INJR.ZS))+
  geom_col(fill = 'pink')+
  geom_text(aes(label=substr(di$SH.DTH.INJR.ZS, 1,4), vjust = -0.3))+
  labs(x = 'Năm', y='Tỷ lệ người tử vong', title = 'Tỷ lệ người tử vong ở Việt Nam')

Tỷ lệ tử vong ở Việt Nam có sự biến đổi qua từng năm. Ở năm 2000, Việt Nam nằm ở mức 8.96%, đến năm 2010 thì giảm còn 8.73%(giảm 0.23%). Sang năm 2015 thì tăng lên đến 8.83% và gần đây nhất là năm 2019 thì lại tỷ lệ tử vong này tiếp tục tăng đến 9.32%.

1.2.3 Indicator CM.MKT.LCAP.CD

CM.MKT.LCAP.CD đề cập vốn hóa thị trường (hay còn gọi là giá trị thị trường) của các công ty đã niêm yết của các nước. Vốn hóa thị trường được tính bằng cách lấy giá cổ phiếu nhân cho số lượng cổ phiếu đang lưu hành. Dữ liệu được lấy vào cuối năm được chuyển đổi sang đô la Mỹ bằng cách sử dụng tỷ giá hối đoái cuối năm tương ứng

mc <- WDI(country= 'VNM',indicator = 'CM.MKT.LCAP.CD', start = 2008, end = 2020)
mc
##    country iso2c iso3c year CM.MKT.LCAP.CD
## 1  Vietnam    VN   VNM 2020   186008530000
## 2  Vietnam    VN   VNM 2019   149817280000
## 3  Vietnam    VN   VNM 2018   132652999577
## 4  Vietnam    VN   VNM 2017   125310026857
## 5  Vietnam    VN   VNM 2016    73222197645
## 6  Vietnam    VN   VNM 2015    58734029972
## 7  Vietnam    VN   VNM 2014    52426688090
## 8  Vietnam    VN   VNM 2013    45127428285
## 9  Vietnam    VN   VNM 2012    36705648755
## 10 Vietnam    VN   VNM 2011    25961620804
## 11 Vietnam    VN   VNM 2010    36854988298
## 12 Vietnam    VN   VNM 2009    33307101456
## 13 Vietnam    VN   VNM 2008    12365840731
ggplot(mc, aes(x= year, y = CM.MKT.LCAP.CD))+
  geom_line(color = 'lightblue', linewidth =2)+
  labs(x = 'Năm', y='Vốn hóa thị trường', title = 'Vốn hóa thị trường của các công ty Việt Nam từ 2008 đến 2020' )

Nhìn vào đồ thị, ta có thể vốn hóa thị trường của các công ty Việt Nam có sự tăng trưởng qua từng năm.

1.2.4 Indicator AG.LND.FRST.K2

Indicator AG.LND.FRST.K2 nói về diện tích rừng qua ở các nước qua từng năm.

f <- WDI(country = 'DE', indicator = 'AG.LND.FRST.K2', start = 1990, end = 2020)
f
##    country iso2c iso3c year AG.LND.FRST.K2
## 1  Germany    DE   DEU 2020         114190
## 2  Germany    DE   DEU 2019         114190
## 3  Germany    DE   DEU 2018         114190
## 4  Germany    DE   DEU 2017         114190
## 5  Germany    DE   DEU 2016         114190
## 6  Germany    DE   DEU 2015         114190
## 7  Germany    DE   DEU 2014         114170
## 8  Germany    DE   DEU 2013         114150
## 9  Germany    DE   DEU 2012         114130
## 10 Germany    DE   DEU 2011         114110
## 11 Germany    DE   DEU 2010         114090
## 12 Germany    DE   DEU 2009         114035
## 13 Germany    DE   DEU 2008         113980
## 14 Germany    DE   DEU 2007         113925
## 15 Germany    DE   DEU 2006         113870
## 16 Germany    DE   DEU 2005         113815
## 17 Germany    DE   DEU 2004         113760
## 18 Germany    DE   DEU 2003         113705
## 19 Germany    DE   DEU 2002         113650
## 20 Germany    DE   DEU 2001         113595
## 21 Germany    DE   DEU 2000         113540
## 22 Germany    DE   DEU 1999         113486
## 23 Germany    DE   DEU 1998         113432
## 24 Germany    DE   DEU 1997         113378
## 25 Germany    DE   DEU 1996         113324
## 26 Germany    DE   DEU 1995         113270
## 27 Germany    DE   DEU 1994         113216
## 28 Germany    DE   DEU 1993         113162
## 29 Germany    DE   DEU 1992         113108
## 30 Germany    DE   DEU 1991         113054
## 31 Germany    DE   DEU 1990         113000
ggplot(f, aes(x= year, y = AG.LND.FRST.K2))+
  geom_line(color='lightblue', linewidth = 2)+
  scale_x_continuous(breaks = seq(from= 1990, to=2020, by=5))+
  labs(x= 'Năm', y='Diện tích rừng', title = 'Diện tích rừng ở Đức trong giai đoạn từ 1990 đến 2020')

Diện tích rừng ở Đức có sự tăng trưởng mạnh mẽ từ năm 1990 cho đến 2010 và từ năm 2010 trở đi, diện tích rừng ở Đức có tăng nhưng ít và gần như bão hòa.

1.2.5 Indicator SH.HIV.0014

Indicator SH.HIV.0014 đề cập đến trẻ em mắc HIV trong giai đoạn dưới 14 tuổi.

hiv14 <- WDI(country = 'WLD',indicator = 'SH.HIV.0014')
hiv14 <- na.omit(hiv14)
hiv14
##    country iso2c iso3c year SH.HIV.0014
## 2    World    1W   WLD 2021     1700000
## 3    World    1W   WLD 2020     1800000
## 4    World    1W   WLD 2019     1800000
## 5    World    1W   WLD 2018     1900000
## 6    World    1W   WLD 2017     2000000
## 7    World    1W   WLD 2016     2100000
## 8    World    1W   WLD 2015     2100000
## 9    World    1W   WLD 2014     2200000
## 10   World    1W   WLD 2013     2300000
## 11   World    1W   WLD 2012     2400000
## 12   World    1W   WLD 2011     2400000
## 13   World    1W   WLD 2010     2500000
## 14   World    1W   WLD 2009     2500000
## 15   World    1W   WLD 2008     2600000
## 16   World    1W   WLD 2007     2600000
## 17   World    1W   WLD 2006     2600000
## 18   World    1W   WLD 2005     2600000
## 19   World    1W   WLD 2004     2500000
## 20   World    1W   WLD 2003     2500000
## 21   World    1W   WLD 2002     2400000
## 22   World    1W   WLD 2001     2300000
## 23   World    1W   WLD 2000     2100000
## 24   World    1W   WLD 1999     2000000
## 25   World    1W   WLD 1998     1800000
## 26   World    1W   WLD 1997     1700000
## 27   World    1W   WLD 1996     1500000
## 28   World    1W   WLD 1995     1300000
## 29   World    1W   WLD 1994     1200000
## 30   World    1W   WLD 1993      990000
## 31   World    1W   WLD 1992      830000
## 32   World    1W   WLD 1991      670000
## 33   World    1W   WLD 1990      540000
ggplot(hiv14, aes(x= year, y= SH.HIV.0014))+
  geom_line(color = 'orange',linewidth = 1)+
  scale_x_continuous(breaks = seq(from=1990, to=2021, by = 2 ))+
  labs(x= 'Năm', y= 'Số lượng', title = 'Số lượng trẻ em dưới 14 tuổi mắc HIV trên thế giới từ 1990 đến 2021')

Dựa vào kết quả đồ thị, ta thấy từ số lượng trẻ em mắc HIV dưới 24 tuổi từ năm 1990 đến 2005 có sự tăng đều, số lượng trẻ trong 3 năm liên tiếp kể từ năm 2005 không có sự thay đổi. Nhưng từ năm 2008 trở đi thò đã có sự giảm trong số lượng trẻ mắc HIV.

1.2.6 Indicator FP.CPI.TOTL.ZG

Indicator này nói về chỉ số lạm phát của các nước. Chỉ số lạm phát được đo bằng chỉ số giá tiêu dùng, chỉ số tính theo phần trăm để phản ánh mức thay đổi tương đối của giá hàng tiêu dùng theo thời gian.

inflation <- WDI(country = 'VNM',indicator = 'FP.CPI.TOTL.ZG', start = 2012, end= 2022)


ggplot(inflation, aes(x= year, y =FP.CPI.TOTL.ZG))+
  geom_line(color = 'darkgreen', linewidth = 1)+
  geom_text(aes(label = substr(inflation$FP.CPI.TOTL.ZG, 1,4), vjust = -0.5))+
  scale_x_continuous(breaks = seq(from= 2012, to = 2022, by =1))+
  labs(x= 'Năm', y= 'Chỉ số lạm phát(%)', title = 'Tình trạng lạm phát ở Việt Nam từ 2012 đến 2022')

Dựa vào đồ thị, ta thấy CPI (chỉ số lạm phát) năm 2012 là khá cao, nhưng ở các năm tiếp theo đã có sự giảm, thấp nhất là năm 2015 với 0.63%. Ở các năm tiếp theo kể từ 2015 chỉ số lạm phát có sự biến đổi cũng như giảm nhưng không nhiều lắm.

1.2.7 Indicator SE.ADT.LITR.FE.ZS

Indicator SE.ADT.LITR.FE.ZS đề cập đến tỷ lệ phụ nữ từ 15 tuổi trở lên có trình độ học vấn, người có thể đọc và viết.

Tỷ lệ này được tính bằng cách lấy số phụ nữ có trình độ học vấn chia cho tổng số phụ nữ của từng năm.

lr <- WDI(country = 'SAS', indicator = 'SE.ADT.LITR.FE.ZS', start = 2010, end = 2020)
lr
##       country iso2c iso3c year SE.ADT.LITR.FE.ZS
## 1  South Asia    8S   SAS 2020          65.20503
## 2  South Asia    8S   SAS 2019          64.48424
## 3  South Asia    8S   SAS 2018          63.58429
## 4  South Asia    8S   SAS 2017          63.05147
## 5  South Asia    8S   SAS 2016          62.13645
## 6  South Asia    8S   SAS 2015          60.55344
## 7  South Asia    8S   SAS 2014          59.46123
## 8  South Asia    8S   SAS 2013          58.45127
## 9  South Asia    8S   SAS 2012          57.46402
## 10 South Asia    8S   SAS 2011          56.83431
## 11 South Asia    8S   SAS 2010          55.72141
ggplot(lr, aes(x= year, y = SE.ADT.LITR.FE.ZS))+
  geom_line()+
  scale_x_continuous(breaks = seq(from= 2010, to=2020, by =1 ))+
  labs (x= 'Năm', y='Số người(%)', title ='Trình độ học vấn của nữ giới ở các nước Nam Á từ 2010 đến 2020')

Nhìn vào đồ thị, ta thấy số phụ nữ có trình độ học vấn qua mỗi năm đều tăng, và năm gần đây nhất là năm 2020, tỷ lệ phụ nữ có trình độ học vấn là 65.2% tổng dân số nữ.

1.2.8 Indicator GC.TAX.TOTL.GD.ZS

Indicator GC.TAX.TOTL.GD.ZS đề cập đến thu nhập thuế. Thu nhập thuế được hiểu là số tiền người dân phải nộp cho chính phủ để thực hiện các mục đích cộng đồng. Và thu nhập thuế đến chủ yếu từ việc người dân đóng các khoản thuế.

ngr <- WDI(country = 'DE', indicator = 'GC.TAX.TOTL.GD.ZS', start = 2010, end=2021 )
ngr   
##    country iso2c iso3c year GC.TAX.TOTL.GD.ZS
## 1  Germany    DE   DEU 2021          11.22529
## 2  Germany    DE   DEU 2020          10.56231
## 3  Germany    DE   DEU 2019          11.40856
## 4  Germany    DE   DEU 2018          11.45698
## 5  Germany    DE   DEU 2017          11.41912
## 6  Germany    DE   DEU 2016          11.29612
## 7  Germany    DE   DEU 2015          11.47873
## 8  Germany    DE   DEU 2014          11.48256
## 9  Germany    DE   DEU 2013          11.61150
## 10 Germany    DE   DEU 2012          11.62299
## 11 Germany    DE   DEU 2011          11.48139
## 12 Germany    DE   DEU 2010          11.19030
ggplot(ngr, aes(x= year, y= GC.TAX.TOTL.GD.ZS))+
  geom_line()+
  scale_x_continuous(breaks = seq(from= 2011, to=2021, by =1 ))+
  labs (x= 'Năm', y='Tiền thu thuế', title ='Thu nhập thuế của Đức trong các năm 2010 đến 2021')

Ta thấy thu nhập thuế ở Đức có sự biến đổi qua từng năm. Khoản thu cao nhất là vài năm 2012 và thấp nhất là năm 2020, khi dịch bệnh đang diễn ra.

1.2.9 Indicator EG.ELC.ACCS.ZS

Indicator đề cập đến % dân số trên thế giới đã được sử dụng điện. Dữ liệu này được thu thập từ các cuộc khảo sát xã hội và các nguồn internet.

e <- WDI(country = 'VNM', indicator = 'EG.ELC.ACCS.ZS', start = 2011, end = 2021)
e
##    country iso2c iso3c year EG.ELC.ACCS.ZS
## 1  Vietnam    VN   VNM 2021      100.00000
## 2  Vietnam    VN   VNM 2020       99.80000
## 3  Vietnam    VN   VNM 2019       99.40000
## 4  Vietnam    VN   VNM 2018      100.00000
## 5  Vietnam    VN   VNM 2017      100.00000
## 6  Vietnam    VN   VNM 2016       99.20000
## 7  Vietnam    VN   VNM 2015       99.25421
## 8  Vietnam    VN   VNM 2014       99.20000
## 9  Vietnam    VN   VNM 2013       98.52827
## 10 Vietnam    VN   VNM 2012       97.89000
## 11 Vietnam    VN   VNM 2011       99.00000
ggplot(e, aes(x= year, y = EG.ELC.ACCS.ZS))+
  geom_line(color = 'darkred')+
  geom_text(aes(label = substr(e$EG.ELC.ACCS.ZS,1,4)))+
  scale_x_continuous(breaks = seq(from=2011, to = 2121, by=1))+
  labs(x= 'Năm', y= 'Tỷ lệ dân số', title= 'Tỷ lệ dân số Việt Nam được sử dụng điện')

Nhìn vào đồ thị, ta thấy hầu hết dân số Việt Nam đều được sử dụng điện, tuy nhiên có sự thay đổi tỷ lệ. Năm 2012 là đạt tỷ lệ thấp nhất với 97.8%, có những năm toàn bộ dân số Việt Nam đều có điện để sử dụng như là 2017, 2018 và 2021.

1.2.10 Indicator SL.UEM.TOTL.ZS

Indicator này đề cập đến tỉ lệ thất nghiệp, lực lượng lao động không có việc làm nhưng vẫn đang tìm kiếm công việc.

ue <- WDI(country = 'VNM', indicator = 'SL.UEM.TOTL.ZS', start = 2012, end = 2022)
ue
##    country iso2c iso3c year SL.UEM.TOTL.ZS
## 1  Vietnam    VN   VNM 2022          1.923
## 2  Vietnam    VN   VNM 2021          2.380
## 3  Vietnam    VN   VNM 2020          2.100
## 4  Vietnam    VN   VNM 2019          1.680
## 5  Vietnam    VN   VNM 2018          1.160
## 6  Vietnam    VN   VNM 2017          1.870
## 7  Vietnam    VN   VNM 2016          1.850
## 8  Vietnam    VN   VNM 2015          1.850
## 9  Vietnam    VN   VNM 2014          1.260
## 10 Vietnam    VN   VNM 2013          1.320
## 11 Vietnam    VN   VNM 2012          1.030
ggplot(ue, aes(x= year, y = SL.UEM.TOTL.ZS))+
  geom_line(color = 'lightblue', linewidth = 1)+
  geom_text(aes(label = substr(ue$SL.UEM.TOTL.ZS,1,4), vjust = -0.5))+
  scale_x_continuous(breaks = seq(from = 2012, to = 2022, by =1))+
  labs(x= 'Năm', y= 'Tỷ lệ thất nghiệp(%)', title = 'Tỷ lệ thất nghiệp ở Việt Nam từ 2012 đến 2022')

Dựa vào đồ thị, ta thấy tỷ lệ thất nghiệp ở Việt Nam 10 năm gần đây có sự biến động. Tỷ lệ thấp nhất là 1.03% vào năm 2012. Ta thấy từ năm 2018, tỷ lệ thất nghiệp đang tăng dần do dịch bệnh diễn ra làm nhiều người mất việc. Cao nhất là năm 2021 với 2.38%, đây là năm xảy dịch COVID-19 nặng và kéo dài lâu nhất. Tuy nhiên, năm 2022 thì tỷ lệ này đã được giảm xuống còn 1.92%, cho thấy số người thất nghiệp đang giảm dần do kiểm soát tốt tình hình dịch bệnh.

1.3 Tạo một function

Ở phần này, ta sẽ tạo ra một function có thể lấy dữ liệu giá chứng khoán từ web investing.com.

get_data_stock <- function(stock){
  library(rvest) #Package để scrape dữ liệu
  library(tidyverse)
  # Tạo đường link để lấy giá chứng khoán, đặt ,stock, để thay đổi thị trường tùy ý
  ff <- paste0('https://www.investing.com/equities/',stock,'')
  # Lấy dữ liệu
  ff1 <- read_html(ff)
  # Lấy dữ liệu dạng bảng
  data <- ff1 %>% html_table (fill = TRUE)
  data = data[[1]]
  # Chọn 5 phân tử đầu trong dữ liệu
  data1 <- head(data,5)
  # In dữ liệu ra
  print(data1)
  # Vẽ đồ thị giá chứng khoán
return(ggplot(data1, aes(x= Name, y = Last))+ 
         geom_col()+
         geom_text(label = data1$Last, color = 'red', vjust=-0.3)+
         labs(x= 'Tên', y = 'Giá'))}

Như vậy, sau khi đã tạo function xong thì ta chỉ cần gõ tên thị trường thì ta sẽ nhận được giá và đồ thị giá của các mã chứng khoán của nước đó.

get_data_stock(stock = 'germany')
## # A tibble: 5 × 10
##   ``    Name        Last  High   Low  Chg. `Chg. %` Vol.    Time     ``   
##   <lgl> <chr>      <dbl> <dbl> <dbl> <dbl> <chr>    <chr>   <chr>    <lgl>
## 1 NA    BASF        45.2  45.4  44.8 -0.14 -0.31%   903.03K 11:19:11 NA   
## 2 NA    Bayer       50.2  50.6  50.2 -0.09 -0.18%   524.54K 11:19:08 NA   
## 3 NA    Allianz    210.  211.  209.   0.03 +0.01%   365.67K 11:19:23 NA   
## 4 NA    Adidas     173.  174.  171.  -0.66 -0.38%   174.03K 11:19:09 NA   
## 5 NA    Siemens AG 150.  150.  148.  -0.61 -0.41%   382.08K 11:19:11 NA

get_data_stock(stock = 'vietnam')
## # A tibble: 5 × 10
##   ``    Name                  Last  High  Low    Chg. `Chg. %` Vol.  Time  ``   
##   <lgl> <chr>                 <chr> <chr> <chr> <dbl> <chr>    <chr> <chr> <lgl>
## 1 NA    Bim Son Cement JSC    14,5… 14,7… 14,3…     0 0.00%    809.… 03:4… NA   
## 2 NA    Baoviet Securities C… 25,9… 26,6… 25,8…  -100 -0.38%   405.… 03:4… NA   
## 3 NA    Alpha Seven JSC       5,80… 6,00… 5,60…   200 +3.57%   2.29M 03:4… NA   
## 4 NA    Doan Xa Port JSC      12,5… 12,7… 12,4…  -100 -0.79%   100.… 03:4… NA   
## 5 NA    HUD - TASCO           20,6… 21,2… 20,4…   100 +0.49%   4.32M 03:4… NA

2 BÀI TẬP VỀ NHÀ 5 + 6

Gọi tập dữ liệu PhDPublications nằm trong package AER. Sau đó, gán toàn bộ tập dữ liệu này vào biến p. 

library(AER)
data("PhDPublications")
p<-PhDPublications

Đặt tên cho các biến trong tập dữ liệu bằng hàm names()

  • a: articles (số bài báo cáo được đăng trong 3 năm gần đây)

  • g: gender (giới tính của nghiên cứu sinh)

  • ma: married (tình trạng hôn nhân của nghiên cứu sinh)

  • k: kids (số con dưới 6 tuổi của nghiên cứu sinh)

  • pr: prestige (chất lượng của chương trình đào tạo)

  • m: mentor (số bài báo cáo được đăng của người hướng dẫn nghiên cứu sinh)

names(p) <- c('a','g','ma','k','pr','m')

Nhìn tổng quan tập dữ liệu

summary(p)
##        a               g         ma            k                pr       
##  Min.   : 0.000   male  :494   no :309   Min.   :0.0000   Min.   :0.755  
##  1st Qu.: 0.000   female:421   yes:606   1st Qu.:0.0000   1st Qu.:2.260  
##  Median : 1.000                          Median :0.0000   Median :3.150  
##  Mean   : 1.693                          Mean   :0.4951   Mean   :3.103  
##  3rd Qu.: 2.000                          3rd Qu.:1.0000   3rd Qu.:3.920  
##  Max.   :19.000                          Max.   :3.0000   Max.   :4.620  
##        m         
##  Min.   : 0.000  
##  1st Qu.: 3.000  
##  Median : 6.000  
##  Mean   : 8.767  
##  3rd Qu.:12.000  
##  Max.   :77.000

Nhìn những quan sát đầu của tập dữ liệu

head(p)
##   a      g  ma k   pr  m
## 1 0   male yes 0 2.52  7
## 2 0 female  no 0 2.05  6
## 3 0 female  no 0 3.75  6
## 4 0   male yes 1 1.18  3
## 5 0 female  no 0 3.75 26
## 6 0 female yes 2 3.59  2

Nhìn những quan sát cuối của tập dữ liệu

tail(p)
##      a      g  ma k   pr  m
## 910 10 female yes 0 3.59 18
## 911 11   male yes 2 2.86  7
## 912 12   male yes 1 4.29 35
## 913 12   male yes 1 1.86  5
## 914 16   male yes 0 1.74 21
## 915 19   male yes 0 1.86 42

2.1 Phân tích biến a

Nhìn tổng quan toàn bộ biến a bằng hàm summary().

summary(p$a)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   0.000   0.000   1.000   1.693   2.000  19.000

Từ kết quả, ta biết được:

  • Số bài báo cáo ít nhất là 0 bài, nhiều nhất là 19 bài.

  • Trung bình 1 nghiên cứu sinh làm được khoảng 2 bài báo cáo.

  • Trung vị là 1 cho biết có 50% số nghiên cứu sinh có số bài báo cáo ít hơn 1.

  • Tứ phân vị thứ nhất là 0 cho biết có 75% dữ liệu có số bài báo cáo nhiều hơn mức này.

  • Tứ phân vị thứ ba là 2 cho biết có 75% dữ liệu có số bài báo cáo thấp hơn mức này và 25% dữ liệu có số bài báo cáo cao hơn mức này.

Bên cạnh đó, nếu ta chỉ muốn biết một trong số giá trị thống kê thì ta có thể làm như sau

# Trung bình
mean(p$a)
## [1] 1.692896
# Trung vị
median(p$a)
## [1] 1
# Độ lệch chuẩn 
sd(p$a)
## [1] 1.926069
# Phương sai
var(p$a)
## [1] 3.709742

2.1.1 Lập bảng tần số, tần suất

Sử dụng hàm cut() để chia biến a thành 3 tổ có khoảng cách đều nhau. Sau đó dùng hàm table() để lập bảng tần số và prop.table() để lập bảng tần suất.

table(cut(p$a,3))
## 
## (-0.019,6.33]   (6.33,12.7]     (12.7,19] 
##           894            19             2
prop.table(table(cut(p$a,3)))
## 
## (-0.019,6.33]   (6.33,12.7]     (12.7,19] 
##   0.977049180   0.020765027   0.002185792

Từ kết quả ta thấy được tổ có dưới 6 bài báo cáo có số lượng người cao nhất với 894 người(chiếm 97.7%). Tổ có từ 6 đến dưới 13 bài báo cáo có 19 người (chiếm 2%). Tổ từ 13 đến 19 bài có số lượng nghiên cứu sinh ít nhất là 2 người (chiếm 0.3%).

2.1.2 Lọc những nghiên cứu sinh có số bài báo cáo nhiều hơn 5 và ít hơn 10

p[p$a>5 & p$a <10,]
##     a      g  ma k   pr  m
## 878 6   male yes 1 4.62  8
## 879 6 female yes 0 2.10 36
## 880 6 female yes 2 1.86 38
## 881 6   male yes 0 4.34  9
## 882 6 female yes 0 4.29 24
## 883 6   male yes 2 2.51 11
## 884 6   male yes 1 2.96 13
## 885 6   male  no 0 4.29 18
## 886 6   male  no 0 3.40 14
## 887 6 female  no 0 4.54 12
## 888 6   male yes 1 3.85 16
## 889 6 female  no 0 3.15  9
## 890 6 female  no 0 4.54 15
## 891 6   male  no 0 3.47  6
## 892 6 female yes 0 4.29  1
## 893 6   male  no 0 1.97  4
## 894 6 female  no 0 3.32  6
## 895 7   male yes 0 3.59  1
## 896 7   male  no 0 2.54  6
## 897 7   male  no 0 3.41 20
## 898 7   male yes 1 1.97  0
## 899 7 female  no 0 3.15  9
## 900 7   male  no 0 4.62 15
## 901 7   male  no 0 4.54 42
## 902 7   male yes 0 3.69  9
## 903 7   male  no 0 4.34 19
## 904 7   male  no 0 4.29 19
## 905 7   male yes 1 3.59 27
## 906 7   male  no 0 3.69 19
## 907 8   male yes 0 2.51 11
## 908 9   male yes 1 2.96 23
## 909 9   male yes 1 1.86 47

2.2 Phân tích biến a (số bài báo cáo) theo biến k (số con)

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

table(p$k)
## 
##   0   1   2   3 
## 599 195 105  16
prop.table(table(p$k))
## 
##          0          1          2          3 
## 0.65464481 0.21311475 0.11475410 0.01748634

Từ bảng tần số và tần suất, ta thấy số lượng nghiên cứu sinh không có con chiếm nhiều nhất với 599 người (chiếm 65%). Có 195 nghiên cứu sinh đã có 1 con (chiếm 21%) và 105 người đã có 2 con (chiếm 12%). Ít nhất là những nghiên cứu sinh đã có 3 con, chỉ có 16 người (chiếm 2%).

2.2.2 Lập bảng tần số của biến a theo k

table(cut(p$a,3),p$k)
##                
##                   0   1   2   3
##   (-0.019,6.33] 585 189 104  16
##   (6.33,12.7]    12   6   1   0
##   (12.7,19]       2   0   0   0

Ta thấy, số lượng nghiên cứu sinh không có con chiếm nhiều nhất (599 người), số lượng nghiên cứu sinh có 3 con chiếm ít nhất (16 người). Tổ có số lượng nhiều nhất là tổ những nghiên cứu sinh có dưới 6 bài báo cáo và không có con với 585 người.

Tuy nhiên, để có thể dễ dang quan sát và phân tích hơn thì ta có thể làm như sau:

  • Ta thấy biến k có 4 giá trị là 0, 1, 2, 3 tương ứng với không có con, có 1 con, có 2 con, có 3 con. Ta sẽ dùng case_when() để quy ước rằng: giá trị ‘0’ sẽ hiển thị trong cột mới tên k1 là ‘Không có con’ ; giá trị ‘1’,‘2’,‘3’ sẽ hiển thị ‘Có con’.
library(tidyverse)
p <- p %>% mutate(k1 = case_when(p$k == '0'~'Không có con',
                              p$k == '1'~ 'Có con',
                              p$k == '2'~ 'Có con',
                              p$k == '3'~ 'Có con'))
  • Tiếp theo, ta tạo một biến mới tên là a1. Biến này sẽ chứa dữ liệu về số lượng bài báo cáo và cho biết ở mức nào là ít, mức nào là số lượng trung bình, mức nào là số lượng cao.

Số 0 được xem như là không có bài báo cáo nào.

Khoảng từ 1 bài đến 6 bài được xem là ít.

Khoảng từ 6 đến 12 bài được xem là số lượng trung bình.

Khoảng từ 12 đến 29 bài được xem là nhiều.

  • Sau đó, tạo bảng tần số và tần suất cho biến a1 theo k1.
p$a1 <- cut(p$a, breaks = c(-2,0,6,12,19), labels=c('không có bài nào','ít','trung bình','nhiều'))
table(p$a1,p$k1)
##                   
##                    Có con Không có con
##   không có bài nào    101          174
##   ít                  208          411
##   trung bình            7           12
##   nhiều                 0            2
prop.table(table(p$a1,p$k1))
##                   
##                         Có con Không có con
##   không có bài nào 0.110382514  0.190163934
##   ít               0.227322404  0.449180328
##   trung bình       0.007650273  0.013114754
##   nhiều            0.000000000  0.002185792

Đưa kết quả này vào ggplot để dễ quan sát hơn

p %>% ggplot(aes(x = a1, y = after_stat(count))) +
  geom_bar(fill = 'pink') +
  geom_text(aes(label = scales::percent(after_stat(count/sum(count)))) , stat = 'count' , color = 'blue', vjust = - .1) + 
  facet_grid(.~k1) +
  labs(x = 'Số bài báo cáo' , y = 'Số nghiên cứu sinh')

Từ bảng tần số, tần suất và đồ thị, ta thấy số lượng nghiên cứu sinh không có con nhiều hơn những người có con. Những nghiên cứu sinh không có con có 599 người, trong khi những người có con chỉ có 316 người. Cụ thể, ở mức số bài báo cáo ít, thì có 208 nghiên cứu sinh đã có con (chiếm 22.73%), thấp hớn số lượng nghiên cứu sinh không có con (411 người, 44.92%), đây cũng là mức chiếm số lượng nhiều nhất. Ở mức có số lượng bài báo cáo trung bình, thì có 7 người đã có con (0.77%) và 12 người không có con(1.31%). Còn ở mức nhiều thì chỉ có 2 nghiên cứu sinh không có con (0.22%), những nghiên cứu sinh đã có con thì không có ai đạt ở mức này. Còn lại là nhóm không có bài báo cáo nào, thì có 101 người đã có con (11.04%) và 174 người không có con (chiếm 19.02%).

2.2.3 Phân tích hồi quy của a theo k bằng hàm lm

lm_result <- lm(formula = a~k,data = p)
summary(lm_result)
## 
## Call:
## lm(formula = a ~ k, data = p)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -1.7493 -1.6354 -0.6354  0.4784 17.2507 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  1.74926    0.07582  23.070   <2e-16 ***
## k           -0.11386    0.08325  -1.368    0.172    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.925 on 913 degrees of freedom
## Multiple R-squared:  0.002044,   Adjusted R-squared:  0.0009513 
## F-statistic:  1.87 on 1 and 913 DF,  p-value: 0.1718

Từ kết quả hồi quy, ta thấy hệ số hồi quy âm cho biết 2 biến này có quan hệ nghịch. Như vậy, nghiên cứu sinh có càng nhiều con thì số lượng bài báo cáo họ làm được càng ít.

Đưa kết quả hồi quy vào ggplot

ggplot(p,aes(x= k, y=a))+
  geom_point(color = 'lightblue')+
  geom_smooth(formula=y~x, method = 'lm', na.rm =T)+
  labs(x= 'Số con', y= 'Số bài báo cáo')

Từ đồ thị, ta thấy đường hồi quy là đường dốc xuống cho thấy số bài báo cáo mà nghiên cứu sinh làm được có mối quan hệ nghịch với số con mà họ có. Tuy nhiên, đường thẳng này khá thoải cho thấy 2 biến này có tương quan yếu. Như vậy, biến số bài báo cáo không chỉ bị ảnh hưởng bởi số con mà còn bị ảnh hưởng đến nhiều yếu tố khác.

2.3 Phân tích biến a (số bài báo cáo) theo biến g (giới tính)

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

table(p$g)
## 
##   male female 
##    494    421
prop.table(table(p$g))
## 
##      male    female 
## 0.5398907 0.4601093

Theo kết quả, ta thấy số lượng nam nghiên cứu sinh nhiều hơn nữ nghiên cứu sinh tuy nhiên không có sự chênh lệch nhiều. Nam có 494 người (chiếm 54%) trong khi nữ có 421 người (chiếm 46%).

2.3.2 Thống kê số lượng bài báo cáo theo giới tính

table(p$a1, p$g)
##                   
##                    male female
##   không có bài nào  136    139
##   ít                339    280
##   trung bình         17      2
##   nhiều               2      0
prop.table(table(p$a1, p$g))
##                   
##                           male      female
##   không có bài nào 0.148633880 0.151912568
##   ít               0.370491803 0.306010929
##   trung bình       0.018579235 0.002185792
##   nhiều            0.002185792 0.000000000

Ta thấy số lượng nam nghiên cứu sinh ở các mức ít, trung bình, nhiều đều chiếm nhiều hơn nữ. Cụ thể, ở mức ít, nam có 339 người (chiếm 37%), nữ có 280 người (chiếm 30.6%). Ở mức số lượng trung bình, nam có 17 người còn nữ chỉ có 2 và ở mức nhiều thì nam chỉ có 2 người trong khi nữa không có người nữ nào. Tuy nhiên, ở những nghiên cứu sinh không có bài báo cáo nào thì nữ lại nhiều hơn nam cho thấy trung bình các nam nghiên cứu sinh làm được nhiều bài cáo hơn nữ.

2.3.3 Lọc ra những nghiên cứu sinh là nam có từ 5 bài báo cáo trở lên

nam5 <- p[p$g =='male' & p$a >= 5,]
data.frame(nam5)
##      a    g  ma k   pr  m           k1         a1
## 853  5 male yes 2 3.85 15       Có con         ít
## 854  5 male yes 1 3.15  5       Có con         ít
## 855  5 male yes 1 3.15 27       Có con         ít
## 856  5 male yes 0 4.34  6 Không có con         ít
## 857  5 male yes 0 4.25 12 Không có con         ít
## 858  5 male  no 0 3.36 11 Không có con         ít
## 860  5 male yes 1 2.58 25       Có con         ít
## 861  5 male yes 1 3.59 21       Có con         ít
## 862  5 male yes 1 2.96  4       Có con         ít
## 863  5 male yes 0 4.54 13 Không có con         ít
## 864  5 male yes 0 4.29 30 Không có con         ít
## 868  5 male yes 0 2.50  4 Không có con         ít
## 869  5 male yes 1 3.47  0       Có con         ít
## 872  5 male yes 1 4.54 53       Có con         ít
## 873  5 male yes 0 1.25  2 Không có con         ít
## 875  5 male yes 1 1.76 11       Có con         ít
## 878  6 male yes 1 4.62  8       Có con         ít
## 881  6 male yes 0 4.34  9 Không có con         ít
## 883  6 male yes 2 2.51 11       Có con         ít
## 884  6 male yes 1 2.96 13       Có con         ít
## 885  6 male  no 0 4.29 18 Không có con         ít
## 886  6 male  no 0 3.40 14 Không có con         ít
## 888  6 male yes 1 3.85 16       Có con         ít
## 891  6 male  no 0 3.47  6 Không có con         ít
## 893  6 male  no 0 1.97  4 Không có con         ít
## 895  7 male yes 0 3.59  1 Không có con trung bình
## 896  7 male  no 0 2.54  6 Không có con trung bình
## 897  7 male  no 0 3.41 20 Không có con trung bình
## 898  7 male yes 1 1.97  0       Có con trung bình
## 900  7 male  no 0 4.62 15 Không có con trung bình
## 901  7 male  no 0 4.54 42 Không có con trung bình
## 902  7 male yes 0 3.69  9 Không có con trung bình
## 903  7 male  no 0 4.34 19 Không có con trung bình
## 904  7 male  no 0 4.29 19 Không có con trung bình
## 905  7 male yes 1 3.59 27       Có con trung bình
## 906  7 male  no 0 3.69 19 Không có con trung bình
## 907  8 male yes 0 2.51 11 Không có con trung bình
## 908  9 male yes 1 2.96 23       Có con trung bình
## 909  9 male yes 1 1.86 47       Có con trung bình
## 911 11 male yes 2 2.86  7       Có con trung bình
## 912 12 male yes 1 4.29 35       Có con trung bình
## 913 12 male yes 1 1.86  5       Có con trung bình
## 914 16 male yes 0 1.74 21 Không có con      nhiều
## 915 19 male yes 0 1.86 42 Không có con      nhiều

Ta thấy có 44 quan sát thỏa mãn điều kiện.

2.3.4 Lọc ra những nghiên cứu sinh là nữ có từ 5 bài báo cáo trở lên

nu5 <- p[p$g=='female' & p$a >=5,]
data.frame(nu5)
##      a      g  ma k   pr  m           k1         a1
## 851  5 female yes 0 2.26 16 Không có con         ít
## 852  5 female  no 0 3.75 13 Không có con         ít
## 859  5 female  no 0 3.59 14 Không có con         ít
## 865  5 female  no 0 2.87 12 Không có con         ít
## 866  5 female yes 0 4.54 15 Không có con         ít
## 867  5 female yes 1 3.85  1       Có con         ít
## 870  5 female yes 0 2.86 24 Không có con         ít
## 871  5 female yes 0 4.62  0 Không có con         ít
## 874  5 female yes 0 3.21 19 Không có con         ít
## 876  5 female  no 0 2.58  6 Không có con         ít
## 877  5 female  no 0 3.62  3 Không có con         ít
## 879  6 female yes 0 2.10 36 Không có con         ít
## 880  6 female yes 2 1.86 38       Có con         ít
## 882  6 female yes 0 4.29 24 Không có con         ít
## 887  6 female  no 0 4.54 12 Không có con         ít
## 889  6 female  no 0 3.15  9 Không có con         ít
## 890  6 female  no 0 4.54 15 Không có con         ít
## 892  6 female yes 0 4.29  1 Không có con         ít
## 894  6 female  no 0 3.32  6 Không có con         ít
## 899  7 female  no 0 3.15  9 Không có con trung bình
## 910 10 female yes 0 3.59 18 Không có con trung bình

Ta thấy có 21 quan sát thỏa điều kiện trên. Ở cùng mức số lượng từ 5 bài báo cáo trở lên thì nữ ít hơn nam 23 người.

2.3.5 Phân nhóm dữ liệu theo giới tính

Dùng hàm group_by để phân chia dữ liệu theo biến g và tính trung bình số bài báo cáo mà mỗi giới tính thực hiện được.

p1 <- group_by(p,g) %>%  summarise(n=mean(a))
p1
## # A tibble: 2 × 2
##   g          n
##   <fct>  <dbl>
## 1 male    1.88
## 2 female  1.47

Đưa kết quả vào ggplot

p1 %>% ggplot(aes(x=g,y=n))+
  geom_col(fill = 'lightgreen')+
  geom_text(aes(label = round(n,3)))+
  labs(x= 'Giới tính', y = 'Trung bình số bài báo cáo', title = 'Trung bình số bài báo cáo của nghiên cứu sinh theo giới tính')

Dựa vào kết quả, ta thấy trung bình nam nghiên cứu sinh làm nhiều hơn nữ. Những nam nghiên cứu sinh trung bình làm khoảng 2 bài báo cáo. Còn những nữ nghiên cứu sinh trung bình làm được 1 bài báo cáo.

3 BÀI TẬP VỀ NHÀ 4

3.1 Giải thích dữ liệu

Ở tuần 4 này, ta sử dụng lại bộ dữ liệu cũ ở tuần 1 là tập dữ liệu PhDPublications, nói về số bài báo cáo được đăng của các nghiên cứu sinh.

Dữ liệu gồm 915 quan sát và có 6 biến:

  • articles: số bài báo cáo được đăng trong 3 năm gần đây

  • gender: giới tính của nghiên cứu sinh

  • married: tình trạng hôn nhân của nghiên cứu sinh

  • kids: số con dưới 6 tuổi của nghiên cứu sinh

  • prestige: chất lượng của chương trình đào tạo

  • mentor: số bài báo cáo được đăng của người hướng dẫn nghiên cứu sinh

3.2 Lấy dữ liệu

Đầu tiên, ta sẽ gọi các package cần dùng.

library(tidyverse)
library(ggplot2)
library(scales)
library(AER)

Chọn tập dữ liệu PhDPublications trong package AER và gán tập dữ liệu này vào biến p . Sau đó, đặt tên cho các biến trong tập dữ liệu bằng hàm names().

data(PhDPublications)
p <- PhDPublications
names(p) <- c('a','g','ma','k','pr','m')

Nhìn tổng quan tập dữ liệu

summary(p)
##        a               g         ma            k                pr       
##  Min.   : 0.000   male  :494   no :309   Min.   :0.0000   Min.   :0.755  
##  1st Qu.: 0.000   female:421   yes:606   1st Qu.:0.0000   1st Qu.:2.260  
##  Median : 1.000                          Median :0.0000   Median :3.150  
##  Mean   : 1.693                          Mean   :0.4951   Mean   :3.103  
##  3rd Qu.: 2.000                          3rd Qu.:1.0000   3rd Qu.:3.920  
##  Max.   :19.000                          Max.   :3.0000   Max.   :4.620  
##        m         
##  Min.   : 0.000  
##  1st Qu.: 3.000  
##  Median : 6.000  
##  Mean   : 8.767  
##  3rd Qu.:12.000  
##  Max.   :77.000

3.3 Trực quan hóa dữ liệu

3.3.1 Đồ thị dạng scatter

3.3.1.1 Số lượng bài báo cáo của các nghiên cứu sinh theo chất lượng đào tạo

ggplot(p,aes(x=pr, y=a)) +
  geom_point(color= 'darkgreen')+
  labs(x='Chất lượng đào tạo', y='Số bài báo cáo')

Dựa vào đồ thị, ta thấy đa phần chất lượng đào tạo của các nghiên cứu sinh nằm ở mức 1 và 2 tuy nhiên , nhiều nghiên cứu sinh nằm ở mức này có số bài báo cáo rất ít, thậm chí là không có bài nào được đăng . Trái lại , số lượng người có chất lượng đào tạo nằm ở mức 3 và 4 thì khá ít nhưng số bài báo cáo của họ nhiều hơn, có thể thấy từ mức 3 trở lên thì có khá ít người không có bài báo cáo nào được đăng và số người có hơn 5 bài báo cáo thì nhiều hơn.

3.3.1.2 Số lượng bài báo cáo của các nghiên cứu sinh theo chất lượng đào tạo và giới tính

Để đánh giá đúng hơn về sự tương quan giữa 2 biến này thì ta còn có thể phân biệt các nghiên cứu sinh theo giới tính bằng màu sắc.

ggplot(p, aes(x= pr,y=a, color = g))+
  geom_point(na.rm =T)+
  labs(x='Chất lượng đào tạo', y='Số bài báo cáo', color = ' Giới tính')

Ngoài phân biệt bằng màu sắc thì ta còn có thể phân biệt bằng hình dạng

ggplot(p, aes(x= pr,y=a))+
  geom_point(aes(shape=g),size = 2.5, na.rm =T)+
  labs(x='Chất lượng đào tạo', y='Số bài báo cáo', shape = ' Giới tính')

Nhìn vào 2 đồ thị trên, ta có thể thấy số lượng nghiên cứu sinh nam , nữ tuy có sự chênh lệch nhưng không nhiều lắm nhưng có thể thấy những người có số bài báo cáo nhiều hơn 5 bài thì đa số là nam.

Ta muốn lọc những người có chất lượng đào tạo trên 3.5 thì có thể sử dụng hàm filter để làm nổi bật những quan sát đó.

ggplot(p,aes(x= pr,y = a, shape = g))+
  geom_point(color = 'pink' , size = 2.5, na.rm = T)+
  geom_point(data = p %>% filter(pr >'3.5'), color = 'black', size = 2.5) +
  labs(x = 'Chất lượng đào tạo' , y = 'Số bài báo cáo', shape = 'Giới tính')

3.3.1.3 Vẽ đường hồi quy tuyến tính của biến a theo pr

Sử dụng hàm lm() để thực hiện hồi quy tuyến tính và đánh giá mối quan hệ giữa biến a (số bài báo cáo) và biến giải thích pr (chất lượng đào tạo).

Sau đó tóm tắt kết quả của mô hình bằng hàm summary() để xem các hệ số (ước tính), P-value, phần dư và các đo lường khác.

lm_result <- lm(a~pr, data = p)
summary(lm_result)
## 
## Call:
## lm(formula = a ~ pr, data = p)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -1.9106 -1.5489 -0.5561  0.5042 17.4855 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  1.24755    0.21026   5.933 4.21e-09 ***
## pr           0.14352    0.06459   2.222   0.0265 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.922 on 913 degrees of freedom
## Multiple R-squared:  0.005379,   Adjusted R-squared:  0.004289 
## F-statistic: 4.937 on 1 and 913 DF,  p-value: 0.02653

Sau đó ta đưa kết quả hồi quy này vào ggplot để có thể quan sát dễ hơn.

ggplot(p, aes(x= pr, y=a)) +
  geom_point(na.rm =T)+
  geom_smooth(formula = y ~ x, method = 'lm', na.rm = T)+
  labs(x = 'Chất lượng đào tạo', y='Số bài báo cáo')

Nhìn vào kết quả, ta thấy đường hồi quy là đường dốc lên cho thấy chất lượng đào tạo có mối quan hệ thuận với số bài báo cáo của các nghiên cứu sinh. Tuy nhiên, đường thẳng này khá thoải cho thấy 2 biến này có tương quan yếu, cụ thể khi chất lượng đào tạo tăng 1 bậc thì số bài báo cáo mà các nghiên cứu sinh làm thêm được chỉ tăng 0,14 bài . Như vậy , biến số bài báo cáo không chỉ bị ảnh hưởng bởi chất lượng đào tạo mà còn bị ảnh hưởng bởi nhiều yếu tố khác.

Ta còn có thể vẽ nhiều đường hồi quy tương ứng với từng giới tính.

ggplot(p, aes(x= pr, y=a, color =g)) +
  geom_point(na.rm =T)+
  geom_smooth(aes(color = g), formula = y ~ x, method = 'lm', na.rm = T)

# Dùng facet_grid() để phân chia thành 2 đồ thị tương ứng với giới tính nam và nữ để dễ quan sát.
ggplot(p, aes(x= pr, y=a, color =g)) +
  geom_point(na.rm =T)+
  geom_smooth(aes(color = g), formula = y ~ x, method = 'lm', na.rm = T)+
  facet_grid(.~g)+ 
  labs(x= 'Chất lượng đào tạo', y='Số bài báo cáo', color ='giới tính')

Cả 2 đường hồi quy ở 2 đồ thị đều rất thoải cho thấy sự tương quan yếu của 2 biến chất lượng đào tạo và số bài báo cáo.

3.3.2 Đồ thị cột

3.3.2.1 Số bài báo cáo của nghiên cứu sinh

ggplot(p, aes(x= a))+
  geom_bar(fill= 'pink')+
  labs(title = 'Số bài báo cáo của nghiên cứu sinh', x='Số bài báo cáo', y = 'Số người')

Để quan sát rõ hơn , ta còn có thể điều chỉnh các giá trị hiển thị trong cột x theo ý mình bằng lệnh scale_x_continuous . Ta sử dụng breaks() với ‘from’ là số bắt đầu , ‘to’ là số kết thúc , ‘by’ là khoảng cách để ngắt các khoảng giá trị trong cột này.

summary(p$a)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   0.000   0.000   1.000   1.693   2.000  19.000

Ta quan sát thấy số lượng bài báo cáo ít nhất là 0 bài, nhiều nhất là 19 bài nên số bắt đầu sẽ là 0, số kết thúc là 19 và khoảng cách là 1 để tất cả các giá trị trong khoảng này đều hiển thị trên cột x.

ggplot(p, aes(x= a))+
  geom_bar(fill= 'pink')+
  labs(title = 'Số bài báo cáo của nghiên cứu sinh', x='Số bài báo cáo', y = 'Số nghiên cứu sinh')+
 scale_x_continuous(breaks = seq(from = 0, to = 19 , by = 1))

Từ biểu đồ, ta thấy số lượng nghiên cứu sinh không có bài báo cáo nào chiếm nhiều nhất và chiếm ít nhất là 19 bài . Vậy biến số bài báo cáo và biến số nghiên cứu sinh có mối quan hệ nghịch, khi số bài báo cáo càng tăng thì số lượng người càng giảm.

3.3.2.2 Số bài báo cáo của nghiên cứu sinh theo 3 mức: ít , trung bình , nhiều

Để có cái nhìn tổng quan hơn về số lượng bài báo cáo của các nghiên cứu sinh, ta có thể chia nó thành 3 tổ khác nhau và tạo thành một cột mới tên a1:

Tổ có số bài báo cáo từ 1 đến 6 bài , được xem là ‘ít’.

Tổ có số bài báo cáo từ 6 đến 12 bài , được xem là ‘trung bình’.

Tổ có số bài báo cáo từ 12 đến 19 bài , được xem là ‘nhiều’.

p$a1 <- cut(p$a, breaks = c(0,6,12,19), labels = c('ít', 'trung bình', 'nhiều'))

Tiếp theo, ta vẽ biểu đồ với cột a1 mới vừa tạo.

ggplot(p, aes(x= a1))+
  geom_bar(fill= 'pink')+
  labs(title = 'Số bài báo cáo của nghiên cứu sinh', x='Số bài báo cáo', y = 'Số nghiên cứu sinh') +
  scale_y_continuous(breaks = seq(from = 0, to = 600, by= 100))

Dựa vào biểu đồ , ta thấy số lượng nghiên cứu sinh có ít bài báo cáo chiếm nhiều nhất (hơn 600 người) và có độ lệch rất lớn so với 3 mức còn lại . Những nghiên cứu sinh có số lượng bài báo cáo trung bình chiếm khá ít và ở mức nhiều là rất ít . Nhóm không có bài báo cáo nào được đăng chiếm khá nhiều(gần 300 người).

Bên cạnh việc trình bày bằng số đếm thì ta còn có thể trình bày bằng tỷ lệ %.

  • Đầu tiên , ta chia tập dữ liệu p theo cột a1 (cột phân chia số bài báo cáo ra các mức : ít , trung bình , nhiều , không có bài nào) bằng hàm group_by() và sử dụng summarise() để đếm số lần xuất hiện của từng mức.

  • Sau đó , ta tạo một cột mới tên pera chứa các giá trị là tần suất của các mức đó.

  • Cuối cùng , ta sử dụng ggplot() để vẽ biểu đồ thể hiện số bài báo cáo các nghiên cứu sinh theo tỷ lệ %.

p %>%  group_by(a1) %>% 
  summarise (n = n()) %>% 
  mutate(pera = percent(n/sum(n), accuracy = ,01)) %>% 
  ggplot(aes(x= a1, y= pera))+
  geom_col(fill = 'pink')+
  labs(title = 'Tỷ lệ số bài báo cáo của nghiên cứu sinh', x='Số bài báo cáo', y = 'Số nghiên cứu sinh theo tỷ lệ')

Để có thể biết chính xác giá trị tỷ lệ % của mỗi mức là bao nhiêu , ta sẽ cho hiển thị giá trị % chính xác của mỗi mức trên đỉnh cột bằng geom_text.

p %>% ggplot(aes(x = a1, y = after_stat(count))) +
  geom_bar(fill = 'pink') +
  geom_text(aes(label = scales::percent(after_stat(count/sum(count)))),stat = 'count' , color = 'blue', vjust = -.1)+
 labs(x = 'Số bài báo cáo', y = 'Số nghiên cứu sinh theo tỷ lệ', )

Dựa vào kết quả biểu đồ, ta biết được số lượng nghiên cứu sinh có ít bài báo cáo chiếm nhiều nhất với hơn 600 người (67,7%) . Các nghiên cứu sinh có số lượng bài báo cáo ở mức trung bình chiếm 2.1% . Chiếm ít nhất là các nghiên cứu sinh có nhiều bài báo cáo với 0,2% và số lượng nghiên cứu sinh không có bài báo cáo nào được đăng cũng chiếm một phần khá nhiều với 30.1%.

Bên cạnh việc đếm số người và tính tỷ lệ % theo số lượng bài báo cáo , ta còn có thể phân chia đồ thị theo nhiều biến khác để phân tích . Ở đây , ta sẽ phân chia đồ thị theo biến g (giới tính).

p %>%  ggplot(aes(x = a1 )) +
  geom_bar(fill = 'pink')+
  geom_text(aes(label =  after_stat(count)) , stat = 'count' , color = 'blue' , vjust = -.1) +
  facet_grid(.~g) +
  labs(x= 'Số bài báo cáo', y = 'Số nghiên cứu sinh')

p %>% ggplot(aes(x = a1, y = after_stat(count))) +
  geom_bar(fill = 'pink') +
  geom_text(aes(label = scales::percent(after_stat(count/sum(count)))) , stat = 'count' , color = 'blue', vjust = - .1) + 
  facet_grid(.~g) +
  labs(x = 'Số bài báo cáo' , y = 'Số nghiên cứu sinh theo tỷ lệ')

Kết hợp quan sát hai đồ thị , ta thấy ở ba mức ít , trung bình , nhiều thì số lượng nam nghiên cứu sinh đều nhiều hơn nữ . Cụ thể:

  • Có 339 nam nghiên cứu sinh có số bài báo cáo đạt mức ít (chiếm 37.05%) , cao hơn nữ rất nhiều (280 người , chiếm 30.6%).

  • Ở mức trung bình , nam có 17 người (chiếm 1.86%) , nữ chỉ có 2 người (chiếm 0.22%).

  • Ở mức nhiều , nam có 2 người (chiếm 0.22%) trong khi nữ không có người nào đạt mức có nhiều bài báo cáo.

Tuy nhiên , về số lượng nghiên cứu sinh không có bài báo cáo nào thì nam lại ít hơn nữ nhưng cách biệt này lại không quá lớn . Nam có 136 người không có bài báo cáo nào (chiếm 14.86%) , nữ có 139 người không có bài bài cáo nào (chiếm 15.19%).

Ngoài việc đếm số lượng nghiên cứu sinh có bao nhiêu bài báo cáo thì ta còn có thể tính trung bình số bài báo cáo.

p %>% group_by(a1) %>% 
  summarise(n = mean(a)) %>% 
  ggplot(aes(x = a1, y = n)) +
  geom_col(fill = 'pink')+
  geom_text(aes(label = round(n,3)), vjust = .05 , color ='blue', size = 4) +
  labs(x= 'Số bài báo cáo',y='Số bài báo cáo trung bình')

Ở mức ít thì các nghiên cứu sinh trung bình làm 2 bài báo cáo, ở mức trung bình thì trung bình các nghiên cứu sinh làm được 8 bài báo cáo còn ở mức nhiều thì trung bình các nghiên cứu sinh làm được khoảng 18 bài báo cáo.

3.3.3 Đồ thị tròn

3.3.3.1 Tình trạng hôn nhân của các nghiên cứu sinh

  • Đầu tiên , ta gán bảng tần số của biến ma (tình trạng hôn nhân của các nghiên cứu sinh) vào ma1.

  • Sau đó, ta sử dụng hàm pie() để vẽ đồ thị tròn với ma1.

  • Tiếp theo , ta có thể tạo bảng chú thích với màu tương ứng trên đồ thị bằng legend().

ma1 <- table(p$ma)

pie(ma1, labels = table(p$ma), main = 'Tình trạng hôn nhân của nghiên cứu sinh', col = rainbow(length(ma1)))
 legend('topright', c('không kết hôn','đã kết hôn'), cex = 1 , fill = rainbow(length(ma1)))

pie(ma1, labels = prop.table(ma1)*100, main = 'Tình trạng hôn nhân của nghiên cứu sinh theo tỷ lệ %', col = rainbow(length(ma1)))
legend ('bottomright' , c('không kết hôn','đã kết hôn'), cex = 1 , fill = rainbow(length(ma1)))

Dựa vào kết quả 2 đồ thị , ta thấy số lượng nghiên cứu sinh đã kết hôn nhiều hơn những nghiên cứu sinh không kết hôn rất nhiều , gần như là gấp đôi . Có tới 606 người đã kết hôn (chiếm khoảng 66%) trong khi chỉ có 309 người không kết hôn (chiếm 34%).

4 BÀI TẬP VỀ NHÀ 3

4.1 Giải thích dữ liệu

Ở tuần 3, ta sử dựng một tập dữ liệu mới tên NaturalGas trong package AER.

Tập dữ liệu Natural Gas (khí gas) được lấy từ 6 tiểu bang của Hoa Kỳ trong giai đoạn 1967 – 1989.

Dữ liệu có 10 biến:

state : tên viết tắt của tiểu bang

statecode : mã số của tiểu bang (NY:35, FL:10, MI:23, TX:44, UT:45, CA:5)

year : năm thu thập dữ liệu

consumption : lượng tiêu thụ khí gas

price : giá khí gas

eprice : giá điện

oprice : giá của dầu nhiên liệu chưng cất

lprice : giá của khí dầu mỏ hóa lỏng

heating : nhiệt độ

income : thu nhập bình quân đầu người

4.2 Xử lý dữ liệu

Đầu tiên , ta gọi package AER xuất hiện bằng hàm library() và chọn tập dữ liệu NaturalGas nằm trong package này.

Tiếp theo , ta gán toàn bộ tập dữ liệu này vào biến n và xem tổng quan tập dữ liệu bằng hàm summary().

library(AER)
data('NaturalGas')
n <- NaturalGas
summary(n)
##  state   statecode      year      consumption         price      
##  CA:23   5 :23     1967   :  6   Min.   :  9430   Min.   :0.680  
##  FL:23   10:23     1968   :  6   1st Qu.: 49104   1st Qu.:1.380  
##  MI:23   23:23     1969   :  6   Median :300836   Median :2.775  
##  NY:23   35:23     1970   :  6   Mean   :252902   Mean   :3.422  
##  TX:23   44:23     1971   :  6   3rd Qu.:346429   3rd Qu.:5.310  
##  UT:23   45:23     1972   :  6   Max.   :637289   Max.   :8.060  
##                    (Other):102                                   
##      eprice           oprice          lprice         heating    
##  Min.   : 1.980   Min.   : 5.01   Min.   :0.680   Min.   : 481  
##  1st Qu.: 2.433   1st Qu.: 8.24   1st Qu.:1.258   1st Qu.:2082  
##  Median : 4.520   Median :19.86   Median :2.615   Median :4272  
##  Mean   : 5.054   Mean   :24.64   Mean   :3.208   Mean   :4155  
##  3rd Qu.: 7.282   3rd Qu.:40.10   3rd Qu.:5.192   3rd Qu.:6498  
##  Max.   :10.860   Max.   :51.73   Max.   :7.870   Max.   :7440  
##                                                                 
##      income     
##  Min.   : 7465  
##  1st Qu.: 9637  
##  Median :11367  
##  Mean   :11193  
##  3rd Qu.:12125  
##  Max.   :16425  
## 

Để hiểu rõ dạng dữ liệu hơn , ta dùng hàm head() và tail() để nhìn 6 dòng đầu và 6 dong cuối của tập dữ liệu.

head(n)
##   state statecode year consumption price eprice oprice lprice heating   income
## 1    NY        35 1967      313656  1.42   2.98   7.40   1.47    6262 10903.75
## 2    NY        35 1968      319282  1.38   2.91   7.77   1.42    6125 11370.02
## 3    NY        35 1969      331326  1.37   2.84   7.96   1.38    6040 11578.68
## 4    NY        35 1970      346533  1.40   2.87   8.33   1.37    6085 11586.77
## 5    NY        35 1971      352085  1.50   3.07   8.80   1.40    5907 11657.42
## 6    NY        35 1972      363412  1.62   3.26   8.85   1.50    6248 11860.80
tail(n)
##     state statecode year consumption price eprice oprice lprice heating
## 133    CA         5 1984      472151  5.84   7.10  44.68   5.41    2486
## 134    CA         5 1985      527495  5.72   7.78  30.58   5.84    2694
## 135    CA         5 1986      464307  5.14   7.95  44.15   5.72    2192
## 136    CA         5 1987      503473  5.26   8.03  35.24   5.14    2502
## 137    CA         5 1988      497138  5.64   8.69  34.02   5.26    2366
## 138    CA         5 1989      514276  5.59   9.45  44.44   5.64    2420
##       income
## 133 13953.85
## 134 14368.46
## 135 14580.77
## 136 14915.05
## 137 15340.38
## 138 15532.93

4.3 Xoay trục dữ liệu

4.3.1 Định dạng dữ liệu từ ngang sang dọc

Trong tập dữ liệu n , ta có thể thấy rằng mỗi hàng cho thấy những thông tin liên quan đến khí gas của 1 tiểu bang trong 1 năm nào đó , những thông tin này được lưu trữ ở định dạng ngang.

Tuy nhiên, dữ liệu ngang như vậy chưa thực sự “gọn gàng” . Ta thấy trong tập dữ liệu , các cột ‘eprice’ , ‘oprice’ , ‘lprice’ , ‘heating’ , ‘income’ đều là yếu tố làm ảnh hưởng đến giá khí đốt , nên ta có thể thu gọn dữ liệu bằng cách làm cho các yếu tố này được lưu trữ ở định dạng dọc , có nghĩa là làm cho tập dữ liệu “dài” hơn.

Ta dùng hàm pivot_longer() trong package tidyverse để làm “dài” dữ liệu , tăng số lượng hàng và giảm số lượng cột.

  • Đầu tiên , ta gọi package tidyverse xuất hiện.

  • Tiếp theo , sử dụng hàm pivot_longer() để gom các cột đã nêu ở trên (tương ứng với các cột có thứ tự từ 6 đến 10) thành 2 cột mới . Một cột có tên là ‘factors’ , chứa tên các yếu tố làm ảnh hưởng đến giá khí đốt (tên các cột cũ) và một cột tên ‘facprice’ , chứa các giá trị tương ứng.

  • Sau đó , gán tập dữ liệu mới vào n1.

library(tidyverse)
n1 <- n %>%  pivot_longer(cols = c(6:10), names_to = 'factors', values_to = 'facprice')
n1
## # A tibble: 690 × 7
##    state statecode year  consumption price factors facprice
##    <fct> <fct>     <fct>       <int> <dbl> <chr>      <dbl>
##  1 NY    35        1967       313656  1.42 eprice      2.98
##  2 NY    35        1967       313656  1.42 oprice      7.4 
##  3 NY    35        1967       313656  1.42 lprice      1.47
##  4 NY    35        1967       313656  1.42 heating  6262   
##  5 NY    35        1967       313656  1.42 income  10904.  
##  6 NY    35        1968       319282  1.38 eprice      2.91
##  7 NY    35        1968       319282  1.38 oprice      7.77
##  8 NY    35        1968       319282  1.38 lprice      1.42
##  9 NY    35        1968       319282  1.38 heating  6125   
## 10 NY    35        1968       319282  1.38 income  11370.  
## # ℹ 680 more rows

Sau khi thực hiện xong , ta thấy tập dữ liệu đã “dài” hơn . Tập dữ liệu n có 138 hàng và 10 cột trong khi tập dữ liệu n1 có 690 hàng và 7 cột . Như vậy , tập dữ liệu mới đã “gọn” hơn và dễ quan sát hơn.

4.3.2 Định dạng dữ liệu từ dọc sang ngang

Trong một số trường hợp , ta muốn chuyển đổi bộ dữ liệu sang định dạng ngang thì ta có thể sử dụng hàm pivot_wider() , tăng số lượng cột và giảm số lượng dòng.

4.3.2.1 Lượng tiêu thụ khí gas của mỗi ban trong các năm 1967 - 1989

  • Lấy lại tập dữ liệu n, ta định dạng lại dữ liệu lượng tiêu thụ khí gas của mỗi ban trong các năm khảo sát từ dọc sang ngang để có thể dễ quan sát hơn.

  • Đầu tiên , ta dùng lệnh select() để lấy ra 3 biến tương ứng : year (năm) , state (ban) , consumption (lượng tiêu thụ khí gas).

  • Sau đó , sử dụng hàm pivot_wider để tạo các cột mới có tên lấy từ các quan sát trong cột ‘year’ , hàng lấy từ cột ‘state’ và lấy các giá trị từ cột ‘consumption’ để điền.

n2 <- n %>% select(year, state,consumption) %>% pivot_wider(names_from = year, id_cols = state, values_from = consumption)
n2
## # A tibble: 6 × 24
##   state `1967` `1968` `1969` `1970` `1971` `1972` `1973` `1974` `1975` `1976`
##   <fct>  <int>  <int>  <int>  <int>  <int>  <int>  <int>  <int>  <int>  <int>
## 1 NY    313656 319282 331326 346533 352085 363412 342608 341032 327384 339949
## 2 FL      9430  11318  11636  14702  13242  12837  16295  14793  15209  16839
## 3 MI    302472 315694 333264 340033 343773 355266 341607 346116 334866 339417
## 4 TX    201407 211763 220728 232189 237387 240662 241478 222603 232320 235637
## 5 UT     38935  40779  43948  44637  49849  48855  48647  50347  59736  66417
## 6 CA    522122 517636 562127 552544 630998 637289 615719 580009 631398 599631
## # ℹ 13 more variables: `1977` <int>, `1978` <int>, `1979` <int>, `1980` <int>,
## #   `1981` <int>, `1982` <int>, `1983` <int>, `1984` <int>, `1985` <int>,
## #   `1986` <int>, `1987` <int>, `1988` <int>, `1989` <int>

So với tập dữ liệu gốc, có 138 hàng và 3 cột (khi chỉ xét 3 biến ‘year’ , ‘state’ , ‘consumption’) thì ta thấy tập dữ liệu mới n2 đã rộng hơn , có 6 hàng và 24 cột.

4.3.2.2 Định dạng lượng tiêu thụ khí gas của mỗi ban trong các năm 1967 - 1989 theo mức : thấp , trung bình , cao.

  • Đầu tiên, ta nhìn tổng quan biến consumption :

Trung bình lượng tiêu thụ khí gas của các ban là 252902.

Lượng tiêu thụ thấp nhất là 9430 và lượng tiêu thụ cao nhất là 637289.

Ở mức tiêu thụ 49104 thì có 25% dữ liệu có lượng tiêu thụ thấp hơn mức này.

Ở mức tiêu thụ 300836 thì có 50% dữ liệu có lượng tiêu thụ thấp hơn và 50% dữ liệu cao hơn mức này.

Ở mức tiêu thụ 346429 thì có 75% dữ liệu có lượng tiêu thụ thấp hơn mức này.

summary(n$consumption)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    9430   49104  300836  252902  346429  637289
  • Gán toàn bộ dữ liệu gốc vào biến n22.
n22 <- n
  • Tiếp theo, ta tạo một biến mới tên là consump. Biến này sẽ chứa dữ liệu về lượng tiêu thụ gas và cho biết ở mức tiêu thụ nào là thấp,mức nào là trung binh, mức nào là cao. Và lập bảng tần số cho biến đó.

Khoảng từ 9429 đến 66417 sẽ có tên là ‘thap’ , được xem mức tiêu thụ thấp.

Khoảng từ 66417 đến 338996 tên là ‘trungbinh’, được xem như mức tiêu thụ trung bình.

Và khoảng từ 338996 đến 637290 đặt tên là ‘cao’ , được xem như mức tiêu thụ cao.

n22$consump <- cut(n$consumption, breaks = c(9429, 66417, 338996, 637290), labels = c('thap', 'trungbinh', 'cao'))
table(n22$consump)
## 
##      thap trungbinh       cao 
##        46        46        46

Kết quả từ bảng tần số cho thấy số lần xuất hiện của ba tổ đều bằng nhau là 46. Như vậy mỗi tổ chiếm 33,3%.

  • Sau đó, ta tạo thêm một cột mới trong tập dữ liệu n22 tên ‘con’ , cột này sẽ chứa các giá trị đã được mã hóa của cột consump.

Nếu lượng tiêu thụ thấp thì hiển thị số 0.

Nếu lượng tiêu thụ trung bình thì hiển thị số 1.

Nếu lượng tiêu thụ cao thì hiển thị số 2.

n22<-n22 %>% mutate(con=case_when(n22$consump== 'thap'~0,
                                  n22$consump== 'trungbinh'~1,
                                  n22$consump== 'cao'~2))
head(n22)
##   state statecode year consumption price eprice oprice lprice heating   income
## 1    NY        35 1967      313656  1.42   2.98   7.40   1.47    6262 10903.75
## 2    NY        35 1968      319282  1.38   2.91   7.77   1.42    6125 11370.02
## 3    NY        35 1969      331326  1.37   2.84   7.96   1.38    6040 11578.68
## 4    NY        35 1970      346533  1.40   2.87   8.33   1.37    6085 11586.77
## 5    NY        35 1971      352085  1.50   3.07   8.80   1.40    5907 11657.42
## 6    NY        35 1972      363412  1.62   3.26   8.85   1.50    6248 11860.80
##     consump con
## 1 trungbinh   1
## 2 trungbinh   1
## 3 trungbinh   1
## 4       cao   2
## 5       cao   2
## 6       cao   2
  • Cuối cùng, ta tạo một dữ liệu mới tên con_wide thể hiện lượng tiêu thụ khí gas của mỗi bang trong từng năm và trình bày dữ liệu theo định dạng ngang.

Tương tự như ở trên, từ tập dữ liệu n22 , ta chọn ra ba cột là ‘con’ , ‘state’ , ‘year’ và dùng hàm pivot_wider() để hoàn thiện tập dữ liệu con_wide.

con_wide <- n22 %>% select(con,state,year) %>%  pivot_wider(names_from = year, id_cols = state, values_from = con)
con_wide
## # A tibble: 6 × 24
##   state `1967` `1968` `1969` `1970` `1971` `1972` `1973` `1974` `1975` `1976`
##   <fct>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>
## 1 NY         1      1      1      2      2      2      2      2      1      2
## 2 FL         0      0      0      0      0      0      0      0      0      0
## 3 MI         1      1      1      2      2      2      2      2      1      2
## 4 TX         1      1      1      1      1      1      1      1      1      1
## 5 UT         0      0      0      0      0      0      0      0      0      0
## 6 CA         2      2      2      2      2      2      2      2      2      2
## # ℹ 13 more variables: `1977` <dbl>, `1978` <dbl>, `1979` <dbl>, `1980` <dbl>,
## #   `1981` <dbl>, `1982` <dbl>, `1983` <dbl>, `1984` <dbl>, `1985` <dbl>,
## #   `1986` <dbl>, `1987` <dbl>, `1988` <dbl>, `1989` <dbl>

4.4 Tách chuỗi theo vị trí kí tự

Tiếp theo, khi muốn lấy một vài kí tự trong chuỗi các kí tự, ta có thể dùng hàm str_extract() . Sử dụng lại tập dữ liệu n1 , Ở cột ‘factors’ , ta chỉ lấy kí tự 1 và 2 của các phần tử trong cột đó.

Bên cạnh đó , ta cũng có thể sử dụng hàm substr() để làm việc tương tự . Các phần tử trong cột ‘year’ đều có 2 kí tự đầu giống nhau là ‘19’ nên ta chỉ cho xuất hiện kí tự thứ 3 , 4 để quan sát dễ hơn.

n11 <- n1 %>% mutate(factors = str_extract(n1$factors, '[a-z]{1,2}'))
n11$year <- substr(n11$year, 3,4)
n11
## # A tibble: 690 × 7
##    state statecode year  consumption price factors facprice
##    <fct> <fct>     <chr>       <int> <dbl> <chr>      <dbl>
##  1 NY    35        67         313656  1.42 ep          2.98
##  2 NY    35        67         313656  1.42 op          7.4 
##  3 NY    35        67         313656  1.42 lp          1.47
##  4 NY    35        67         313656  1.42 he       6262   
##  5 NY    35        67         313656  1.42 in      10904.  
##  6 NY    35        68         319282  1.38 ep          2.91
##  7 NY    35        68         319282  1.38 op          7.77
##  8 NY    35        68         319282  1.38 lp          1.42
##  9 NY    35        68         319282  1.38 he       6125   
## 10 NY    35        68         319282  1.38 in      11370.  
## # ℹ 680 more rows

4.5 Trực quan hóa dữ liệu

4.5.1 Giá khí gas của từng ban theo năm khảo sát

library(ggplot2)

ggplot(data = n11) + 
  geom_col(mapping = aes(x= year, y = price,fill = state))

Đồ thị cho thấy giá khí gas ở tất cả các ban tăng đều theo từng năm, trong đó tăng mạnh nhất là ban CA (California), tăng ít nhất là ban UT.

4.5.2 Lượng tiêu thụ khí gas ở các ban theo từng năm

ggplot(data = n11)+
  geom_line(mapping =aes(x = year, y = consumption, color = state, group = state)) 

Đồ thị cho thấy ở tất cả các năm lượng tiêu thụ của ban CA đều cao nhất và cao hơn hẳn các ban khác, trong đó ban FL có lượng tiêu thụ khí gas thấp nhất.

5 BÀI TẬP VỀ NHÀ 2

5.1 Lấy dữ liệu từ package

Gọi dữ liệu PhDPublications từ package AER

Sau đó sẽ gán dữ liệu vào p

Tiếp theo là đặt tên cho các biến tương ứng

a: articles

g: gender

ma: married

k: kids

pr: prestige

m: mentor

library(AER)
data('PhDPublications')
p <- PhDPublications
names(p) <- c('a','g','ma','k','pr','m')

5.2 Lọc dữ liệu

Lọc lấy dữ liệu những ngiên cứu sinh đã kết hôn rồi

Ta thấy kết quả có 606 người nghiên cứu sinh đã kết hôn (66%)

yes <- p[p$ma== 'yes',]
yes
##      a      g  ma k    pr  m
## 1    0   male yes 0 2.520  7
## 4    0   male yes 1 1.180  3
## 6    0 female yes 2 3.590  2
## 8    0   male yes 2 2.960  4
## 10   0 female yes 0 1.250  0
## 13   0 female yes 1 3.690  3
## 14   0 female yes 0 3.400  4
## 15   0 female yes 0 1.790  0
## 17   0 female yes 0 2.000  7
## 18   0   male yes 2 4.290 13
## 21   0 female yes 0 2.260  6
## 22   0   male yes 3 2.960  3
## 23   0   male yes 1 4.290  5
## 24   0   male yes 1 2.860  4
## 25   0   male yes 3 2.760  1
## 26   0 female yes 0 1.520  3
## 27   0 female yes 1 3.540  8
## 28   0   male yes 1 4.290  3
## 30   0   male yes 0 2.320  3
## 32   0   male yes 0 4.290  8
## 35   0   male yes 1 1.520  0
## 39   0   male yes 1 1.220  2
## 40   0 female yes 0 3.750  5
## 42   0 female yes 1 2.860  3
## 44   0 female yes 1 3.360  3
## 46   0   male yes 1 1.180  0
## 47   0   male yes 0 2.500  1
## 48   0   male yes 0 3.360 25
## 50   0 female yes 0 3.920  8
## 52   0 female yes 2 1.970  0
## 53   0   male yes 2 2.960 12
## 54   0   male yes 0 4.290  8
## 55   0   male yes 1 2.260  2
## 58   0   male yes 1 3.150  1
## 59   0   male yes 1 3.920  1
## 62   0   male yes 1 2.100  0
## 64   0 female yes 0 3.540  2
## 65   0 female yes 0 2.540  1
## 66   0   male yes 1 2.760  3
## 67   0   male yes 0 4.540 10
## 68   0   male yes 0 1.680  6
## 69   0   male yes 1 2.200  0
## 72   0 female yes 2 2.580  0
## 73   0 female yes 0 1.790  1
## 75   0 female yes 0 1.280  4
## 76   0   male yes 2 2.580  5
## 77   0   male yes 2 2.120  0
## 78   0   male yes 1 2.210  1
## 79   0   male yes 1 2.260  5
## 82   0 female yes 1 3.540  1
## 83   0   male yes 1 3.400 18
## 84   0   male yes 0 2.210  6
## 85   0   male yes 0 2.210 19
## 86   0   male yes 2 0.920  1
## 88   0   male yes 2 3.150  6
## 89   0   male yes 0 4.290 19
## 90   0   male yes 1 2.510  8
## 91   0   male yes 1 4.290  1
## 92   0 female yes 0 2.760  0
## 93   0   male yes 0 1.420  3
## 94   0   male yes 0 2.210 19
## 96   0   male yes 0 1.520  7
## 99   0 female yes 2 3.750  4
## 100  0   male yes 0 4.290  8
## 102  0   male yes 1 2.100  0
## 103  0   male yes 2 1.400  7
## 104  0 female yes 0 3.190  4
## 105  0   male yes 2 1.810  1
## 106  0   male yes 1 3.150  2
## 107  0 female yes 0 3.750  7
## 109  0   male yes 3 2.210  3
## 110  0 female yes 2 3.360  2
## 111  0 female yes 0 3.470 11
## 113  0 female yes 1 3.360  2
## 114  0   male yes 0 2.540  5
## 115  0   male yes 2 2.150  4
## 116  0   male yes 1 4.540  3
## 117  0   male yes 0 1.680  4
## 118  0 female yes 1 2.550  0
## 120  0   male yes 1 3.470  2
## 121  0 female yes 0 3.470  1
## 123  0   male yes 1 2.120 10
## 126  0   male yes 1 2.860 13
## 127  0 female yes 1 4.290  9
## 128  0   male yes 0 3.210  2
## 130  0 female yes 0 1.810  5
## 132  0   male yes 1 3.360 23
## 133  0 female yes 0 4.540  4
## 134  0 female yes 1 4.290  4
## 136  0   male yes 2 4.620 30
## 137  0 female yes 1 3.590 14
## 139  0   male yes 3 2.860  1
## 141  0 female yes 1 2.500  0
## 142  0 female yes 0 4.620  0
## 144  0 female yes 1 3.360  3
## 146  0 female yes 2 3.410  5
## 147  0   male yes 0 2.100  0
## 149  0   male yes 0 3.360  2
## 150  0   male yes 3 3.590  7
## 152  0 female yes 0 3.590 12
## 154  0   male yes 3 4.540 11
## 156  0   male yes 1 2.210  5
## 157  0   male yes 2 3.690  5
## 158  0 female yes 0 1.780  1
## 160  0   male yes 0 2.860  8
## 161  0 female yes 0 2.580  3
## 163  0 female yes 1 1.220 11
## 168  0 female yes 0 1.860  6
## 169  0   male yes 0 2.960  0
## 170  0 female yes 0 3.690  7
## 171  0 female yes 0 3.690  2
## 172  0 female yes 0 4.290  1
## 175  0   male yes 2 2.320  2
## 179  0 female yes 2 4.540  6
## 180  0   male yes 1 2.100  0
## 181  0 female yes 1 2.540  0
## 182  0   male yes 1 2.210 19
## 184  0   male yes 1 2.100 12
## 186  0 female yes 1 4.620 15
## 190  0 female yes 0 1.830  2
## 192  0 female yes 1 4.290  6
## 194  0   male yes 0 2.140  1
## 195  0   male yes 2 3.400 13
## 197  0 female yes 0 2.960  0
## 198  0 female yes 2 3.190  0
## 199  0   male yes 1 3.690 16
## 200  0 female yes 2 1.255  0
## 201  0   male yes 2 4.140 12
## 202  0   male yes 1 2.390  5
## 203  0   male yes 2 3.920  2
## 205  0 female yes 0 2.120  2
## 206  0 female yes 2 2.120  1
## 207  0 female yes 0 2.610  3
## 209  0   male yes 3 2.860  7
## 210  0 female yes 0 2.390  0
## 211  0   male yes 2 3.340  1
## 213  0 female yes 1 3.590  8
## 214  0   male yes 2 4.540  1
## 215  0 female yes 0 3.590  1
## 217  0   male yes 0 1.520  4
## 218  0   male yes 0 4.290  6
## 219  0 female yes 0 4.620  5
## 220  0   male yes 1 4.290 13
## 221  0   male yes 0 2.510  3
## 223  0 female yes 0 2.960  8
## 224  0 female yes 0 3.690  3
## 225  0 female yes 0 3.470  2
## 226  0   male yes 2 4.290 15
## 229  0 female yes 0 2.000  6
## 230  0   male yes 0 2.320  4
## 231  0 female yes 1 2.000  9
## 232  0   male yes 1 1.680 27
## 234  0   male yes 0 2.200  2
## 235  0   male yes 1 2.120 10
## 238  0   male yes 2 4.290 24
## 239  0   male yes 1 2.100  0
## 243  0   male yes 1 2.580  6
## 244  0 female yes 0 3.150  7
## 247  0   male yes 2 3.590  5
## 251  0   male yes 0 3.400 13
## 254  0 female yes 0 2.860 13
## 257  0 female yes 0 2.390  2
## 258  0   male yes 2 2.860 11
## 259  0 female yes 0 2.960  7
## 261  0   male yes 1 1.810  5
## 262  0   male yes 1 4.290  2
## 263  0   male yes 1 2.100  0
## 265  0   male yes 2 4.290  2
## 266  0   male yes 0 4.290  2
## 267  0   male yes 2 3.400  0
## 269  0   male yes 2 2.320  5
## 271  0 female yes 0 2.580  0
## 272  0   male yes 0 3.690  3
## 273  0   male yes 2 3.410  7
## 274  0   male yes 0 2.320  0
## 275  0   male yes 1 3.690  8
## 276  1   male yes 0 2.540  4
## 277  1 female yes 1 1.760  4
## 278  1   male yes 1 4.290 13
## 279  1   male yes 3 2.100  0
## 280  1 female yes 1 3.090 12
## 282  1   male yes 0 2.100  0
## 283  1 female yes 1 3.750  7
## 287  1   male yes 0 2.000  4
## 288  1   male yes 1 2.000 16
## 289  1   male yes 1 2.610  6
## 290  1   male yes 0 4.250 12
## 292  1 female yes 0 4.290 11
## 293  1   male yes 0 2.100  2
## 294  1 female yes 0 2.870  5
## 295  1 female yes 0 3.470  3
## 296  1   male yes 0 1.780  1
## 297  1   male yes 0 4.140 15
## 298  1   male yes 3 4.290  0
## 302  1 female yes 0 2.610  7
## 303  1   male yes 0 1.680 34
## 304  1 female yes 0 3.190  3
## 305  1   male yes 1 3.590  5
## 306  1   male yes 0 2.500  0
## 310  1   male yes 1 3.920  0
## 311  1   male yes 2 2.960  0
## 313  1   male yes 0 4.290 11
## 314  1 female yes 1 3.320 24
## 317  1 female yes 0 1.640 22
## 320  1 female yes 0 4.290  6
## 321  1   male yes 0 1.750  3
## 322  1   male yes 0 2.960  8
## 324  1   male yes 2 4.250 20
## 325  1   male yes 2 2.560 22
## 327  1   male yes 2 3.920  2
## 328  1   male yes 1 1.780 77
## 329  1 female yes 0 3.400 14
## 330  1   male yes 1 1.740  4
## 333  1 female yes 0 2.870 18
## 334  1   male yes 0 4.290  6
## 335  1 female yes 0 3.190  2
## 336  1   male yes 1 1.220  1
## 337  1 female yes 2 3.540 17
## 338  1   male yes 1 4.290  1
## 339  1   male yes 1 4.620  3
## 343  1   male yes 1 3.400  2
## 344  1 female yes 0 1.280  2
## 345  1   male yes 2 1.740  4
## 346  1   male yes 1 2.260  1
## 347  1 female yes 0 3.590  5
## 348  1   male yes 1 4.620 16
## 351  1   male yes 1 2.390  3
## 352  1   male yes 0 2.260  1
## 353  1   male yes 2 2.860  7
## 354  1   male yes 2 2.760  8
## 355  1   male yes 1 1.630  8
## 356  1   male yes 2 4.290 12
## 358  1 female yes 0 2.120  0
## 359  1 female yes 1 2.610  6
## 360  1   male yes 0 1.800  1
## 361  1 female yes 0 4.290 21
## 363  1 female yes 0 4.620 16
## 365  1   male yes 2 2.100  0
## 366  1 female yes 0 2.000  5
## 368  1   male yes 2 1.750  2
## 372  1   male yes 1 3.920  8
## 373  1   male yes 2 2.510  3
## 375  1   male yes 1 2.000 11
## 379  1   male yes 0 4.620  1
## 380  1   male yes 1 2.560 16
## 381  1   male yes 0 4.620 18
## 382  1   male yes 0 3.590 10
## 383  1   male yes 2 4.290  6
## 386  1   male yes 0 3.190  3
## 387  1 female yes 0 3.590  1
## 388  1 female yes 0 2.960 19
## 390  1   male yes 3 2.960  6
## 391  1 female yes 0 4.540 13
## 392  1   male yes 1 4.540 10
## 393  1   male yes 2 2.500  4
## 394  1   male yes 0 1.680  8
## 395  1   male yes 0 2.320  4
## 396  1 female yes 3 3.190  9
## 398  1 female yes 0 1.250  5
## 400  1 female yes 0 4.620  4
## 402  1 female yes 0 3.150  9
## 404  1 female yes 0 1.950  3
## 406  1 female yes 0 4.540  2
## 407  1 female yes 2 2.580  2
## 408  1 female yes 0 3.850 29
## 409  1   male yes 1 3.410 10
## 410  1 female yes 1 2.260  9
## 412  1   male yes 1 3.590  6
## 413  1 female yes 1 2.120  9
## 414  1   male yes 0 2.960  7
## 418  1 female yes 2 2.860  7
## 419  1   male yes 0 4.540  2
## 420  1   male yes 0 3.590 12
## 421  1 female yes 0 4.620 18
## 422  1   male yes 3 1.670  3
## 423  1   male yes 2 1.750  1
## 424  1 female yes 1 2.830  5
## 425  1   male yes 3 3.150 11
## 426  1   male yes 1 3.590  9
## 429  1   male yes 0 4.290  0
## 430  1   male yes 2 4.290  0
## 431  1 female yes 0 2.390  7
## 432  1   male yes 1 4.540  3
## 433  1   male yes 0 2.320  4
## 435  1   male yes 1 3.690  5
## 438  1   male yes 0 2.760  5
## 440  1   male yes 2 3.620  4
## 441  1   male yes 1 4.290 14
## 443  1 female yes 1 2.390  9
## 445  1   male yes 0 1.780  4
## 446  1   male yes 1 2.100  8
## 447  1 female yes 0 2.250  3
## 448  1   male yes 1 2.260  5
## 449  1   male yes 0 1.860  5
## 451  1   male yes 0 4.340 10
## 455  1   male yes 1 4.540 45
## 458  1   male yes 0 1.520  2
## 459  1   male yes 0 2.550 11
## 460  1 female yes 0 1.180  1
## 461  1 female yes 2 3.090  9
## 463  1 female yes 0 2.320  1
## 465  1   male yes 0 4.290  1
## 468  1   male yes 1 3.590  2
## 471  1 female yes 0 3.590 32
## 474  1 female yes 0 1.750  0
## 475  1 female yes 0 3.470  3
## 476  1   male yes 1 2.610  4
## 478  1   male yes 2 4.290  9
## 480  1 female yes 0 4.620 18
## 481  1   male yes 1 2.860 17
## 482  1   male yes 1 2.860 17
## 483  1   male yes 0 2.860 39
## 485  1 female yes 0 1.760  8
## 486  1   male yes 0 2.500  0
## 489  1 female yes 1 3.540 14
## 490  1 female yes 0 3.690  1
## 493  1   male yes 1 4.340  4
## 494  1   male yes 0 3.540 11
## 495  1   male yes 2 4.290 10
## 496  1   male yes 0 1.810  0
## 498  1   male yes 1 1.810  5
## 500  1 female yes 1 2.320  5
## 502  1   male yes 1 4.290  2
## 503  1   male yes 1 2.860  2
## 504  1 female yes 1 2.860  2
## 505  1   male yes 1 1.220  0
## 506  1   male yes 0 2.100  0
## 507  1   male yes 1 1.680 12
## 509  1 female yes 0 2.870 15
## 510  1   male yes 1 3.470  1
## 512  1   male yes 1 3.540 21
## 513  1 female yes 0 1.950 11
## 514  1   male yes 1 3.590 19
## 517  1 female yes 2 4.290 13
## 518  1   male yes 2 3.190  5
## 519  1   male yes 0 2.960  0
## 520  1   male yes 1 2.760  7
## 521  1 female yes 0 1.810 11
## 522  2   male yes 0 3.360  4
## 525  2 female yes 0 4.540 10
## 527  2 female yes 0 3.090  2
## 531  2   male yes 1 4.290  2
## 532  2 female yes 1 1.740  4
## 533  2   male yes 2 2.960  8
## 535  2   male yes 1 4.540 10
## 537  2   male yes 1 4.290 13
## 539  2 female yes 0 3.590  0
## 543  2 female yes 1 3.470 11
## 545  2   male yes 0 1.950  4
## 546  2   male yes 2 2.960 46
## 547  2   male yes 1 4.540 53
## 548  2   male yes 0 3.400  9
## 549  2   male yes 0 2.100  4
## 550  2   male yes 2 4.290  8
## 553  2   male yes 1 2.500  2
## 554  2 female yes 1 4.620 17
## 555  2 female yes 0 1.800 10
## 558  2   male yes 2 1.800  6
## 559  2 female yes 0 3.590  5
## 560  2   male yes 0 2.760  3
## 561  2   male yes 0 4.140 16
## 564  2 female yes 0 0.920  0
## 566  2   male yes 1 2.390  4
## 567  2   male yes 0 1.180  0
## 568  2   male yes 2 4.540  2
## 569  2 female yes 2 3.850 47
## 570  2   male yes 2 2.960 21
## 571  2 female yes 0 3.360  8
## 572  2 female yes 0 3.190  5
## 573  2 female yes 1 3.690 15
## 574  2   male yes 0 1.630  8
## 575  2   male yes 0 1.720  1
## 576  2 female yes 0 2.580  5
## 577  2   male yes 0 1.520  5
## 579  2 female yes 2 1.220  4
## 582  2   male yes 2 2.870 20
## 583  2   male yes 1 3.150  7
## 585  2   male yes 1 1.760  7
## 586  2   male yes 1 1.520  3
## 588  2   male yes 2 4.290 10
## 589  2   male yes 1 2.560  5
## 591  2 female yes 0 1.860  5
## 593  2 female yes 0 3.920  7
## 595  2   male yes 1 4.290 14
## 596  2 female yes 1 3.690 10
## 597  2   male yes 2 1.970  0
## 598  2   male yes 1 3.190 10
## 601  2   male yes 0 2.830  1
## 602  2   male yes 3 4.340  7
## 606  2   male yes 0 4.290 24
## 607  2   male yes 1 2.760  8
## 608  2 female yes 0 3.750  0
## 609  2   male yes 1 4.290 12
## 610  2   male yes 2 2.210 12
## 611  2   male yes 0 3.540 21
## 612  2   male yes 0 2.960  2
## 613  2 female yes 0 2.120  2
## 617  2 female yes 0 4.540  9
## 619  2   male yes 0 1.760  0
## 620  2   male yes 2 4.340 17
## 621  2 female yes 0 2.520 16
## 622  2   male yes 1 2.560  7
## 624  2 female yes 0 1.400  0
## 625  2   male yes 2 3.320 27
## 626  2   male yes 0 2.510  5
## 627  2 female yes 2 2.580  3
## 628  2   male yes 2 3.540 16
## 629  2   male yes 0 4.540 11
## 631  2   male yes 0 4.340  5
## 632  2 female yes 1 3.470  4
## 634  2   male yes 2 2.500  5
## 635  2   male yes 3 2.000  8
## 637  2 female yes 0 4.620 23
## 642  2   male yes 0 3.690  5
## 643  2   male yes 0 4.290 17
## 645  2   male yes 0 4.290 13
## 646  2 female yes 1 3.210  7
## 648  2   male yes 0 2.500  0
## 650  2 female yes 0 3.750  4
## 652  2   male yes 0 3.190 11
## 653  2 female yes 1 2.000  7
## 654  2 female yes 0 3.090  1
## 655  2 female yes 1 3.590  2
## 656  2 female yes 0 4.340 11
## 658  2   male yes 0 2.100  2
## 660  2   male yes 1 2.100  3
## 661  2   male yes 1 1.780  1
## 662  2   male yes 0 2.510  0
## 663  2   male yes 1 2.520 10
## 664  2 female yes 1 3.400  4
## 665  2 female yes 1 3.090  3
## 666  2   male yes 0 4.290 13
## 667  2 female yes 0 2.960  8
## 668  2 female yes 2 3.590 11
## 670  2 female yes 0 3.590 11
## 671  2   male yes 1 3.420  3
## 672  2 female yes 1 4.290  4
## 674  2 female yes 1 4.290 11
## 675  2   male yes 0 4.620  3
## 676  2   male yes 2 1.860  6
## 677  2   male yes 0 4.620  8
## 678  2 female yes 2 4.540 48
## 679  2 female yes 0 3.750  8
## 680  2   male yes 0 1.760  0
## 681  2 female yes 0 3.410 31
## 682  2   male yes 0 2.550 24
## 683  2   male yes 1 1.250  2
## 684  2 female yes 0 1.480  9
## 685  2 female yes 0 2.830  3
## 686  2 female yes 0 4.290  6
## 689  2 female yes 2 3.210  2
## 691  2 female yes 0 1.450  7
## 692  2 female yes 1 3.340  4
## 694  2   male yes 2 4.290 30
## 697  2 female yes 1 4.540  7
## 698  2   male yes 1 4.540  6
## 703  3   male yes 2 4.540 31
## 704  3   male yes 0 3.090  5
## 705  3   male yes 1 1.950 14
## 706  3 female yes 1 3.590  3
## 707  3   male yes 1 2.610  5
## 710  3 female yes 0 3.410 19
## 711  3 female yes 1 2.320  5
## 712  3 female yes 0 2.120  3
## 713  3   male yes 0 4.540 37
## 714  3   male yes 0 2.960  8
## 716  3   male yes 0 2.320  4
## 717  3   male yes 2 1.800  6
## 719  3 female yes 1 4.620 14
## 721  3   male yes 0 4.540  5
## 723  3   male yes 2 4.290  0
## 724  3   male yes 1 2.960  5
## 725  3   male yes 2 4.290 25
## 726  3   male yes 1 4.290 18
## 727  3   male yes 1 2.540  6
## 731  3 female yes 0 3.750  6
## 732  3   male yes 2 1.950  3
## 733  3   male yes 1 1.800  4
## 734  3   male yes 0 2.760  8
## 736  3   male yes 0 4.250 20
## 737  3   male yes 2 2.830  7
## 739  3 female yes 0 1.180  0
## 740  3 female yes 0 3.360 11
## 741  3 female yes 0 4.290 21
## 742  3 female yes 1 4.620 49
## 744  3   male yes 0 3.690 24
## 745  3   male yes 0 2.260 12
## 747  3   male yes 1 4.290 19
## 748  3   male yes 0 1.420  3
## 749  3 female yes 2 1.890 16
## 750  3   male yes 0 3.690 26
## 751  3 female yes 0 2.960 22
## 752  3 female yes 1 1.860  1
## 753  3 female yes 0 2.260  6
## 754  3   male yes 0 4.290 15
## 755  3 female yes 0 3.150  4
## 756  3   male yes 0 2.610  0
## 758  3   male yes 1 2.210 10
## 759  3   male yes 0 1.780  0
## 760  3   male yes 1 3.620  5
## 761  3   male yes 0 3.920  0
## 762  3 female yes 0 4.620 10
## 763  3   male yes 0 2.610  5
## 764  3 female yes 1 3.360  3
## 765  3 female yes 0 3.690 12
## 766  3   male yes 0 3.470 14
## 767  3   male yes 0 1.250  4
## 768  3   male yes 0 4.620 18
## 769  3   male yes 1 3.590 14
## 771  3   male yes 0 4.290 38
## 773  3   male yes 2 2.580  2
## 775  3   male yes 0 3.470  8
## 776  3 female yes 0 4.620 14
## 778  3   male yes 2 2.100  4
## 779  3   male yes 2 1.380  8
## 780  3   male yes 1 3.090  5
## 781  3   male yes 3 2.860  3
## 783  3 female yes 1 1.220  3
## 784  4   male yes 0 2.830  5
## 785  4 female yes 0 4.540 16
## 786  4   male yes 0 4.290 22
## 788  4   male yes 0 3.540  9
## 791  4 female yes 0 4.340  6
## 792  4 female yes 1 2.510  2
## 793  4   male yes 0 4.290  2
## 794  4   male yes 1 2.960  0
## 797  4 female yes 0 3.400  5
## 799  4   male yes 1 2.960 57
## 800  4 female yes 0 3.540  5
## 801  4   male yes 2 1.720  2
## 802  4   male yes 2 2.860 15
## 803  4   male yes 2 4.540 66
## 804  4   male yes 1 1.760 11
## 805  4   male yes 2 1.860 15
## 806  4   male yes 0 3.470  4
## 808  4   male yes 0 1.810 10
## 809  4   male yes 2 2.050 13
## 811  4 female yes 0 2.260  3
## 812  4   male yes 1 1.860 47
## 813  4 female yes 1 4.290  4
## 814  4   male yes 2 3.540  2
## 815  4   male yes 0 4.290 30
## 816  4   male yes 0 2.540 11
## 817  4 female yes 0 4.250 13
## 819  4 female yes 1 3.540 12
## 820  4 female yes 0 3.190  8
## 821  4   male yes 2 4.540 21
## 823  4 female yes 0 2.580 14
## 824  4 female yes 0 1.280  4
## 825  4 female yes 0 3.210 14
## 832  4   male yes 1 2.550 21
## 834  4 female yes 0 2.360  5
## 835  4   male yes 1 4.250 29
## 836  4   male yes 1 4.290  5
## 837  4 female yes 0 3.190  7
## 840  4   male yes 0 1.760  7
## 841  4   male yes 1 2.580 25
## 842  4 female yes 0 3.410  4
## 844  4 female yes 0 1.780  4
## 846  4   male yes 2 3.690 16
## 847  4   male yes 0 3.620  5
## 848  4   male yes 0 1.505  4
## 849  4   male yes 2 2.580  6
## 851  5 female yes 0 2.260 16
## 853  5   male yes 2 3.850 15
## 854  5   male yes 1 3.150  5
## 855  5   male yes 1 3.150 27
## 856  5   male yes 0 4.340  6
## 857  5   male yes 0 4.250 12
## 860  5   male yes 1 2.580 25
## 861  5   male yes 1 3.590 21
## 862  5   male yes 1 2.960  4
## 863  5   male yes 0 4.540 13
## 864  5   male yes 0 4.290 30
## 866  5 female yes 0 4.540 15
## 867  5 female yes 1 3.850  1
## 868  5   male yes 0 2.500  4
## 869  5   male yes 1 3.470  0
## 870  5 female yes 0 2.860 24
## 871  5 female yes 0 4.620  0
## 872  5   male yes 1 4.540 53
## 873  5   male yes 0 1.250  2
## 874  5 female yes 0 3.210 19
## 875  5   male yes 1 1.760 11
## 878  6   male yes 1 4.620  8
## 879  6 female yes 0 2.100 36
## 880  6 female yes 2 1.860 38
## 881  6   male yes 0 4.340  9
## 882  6 female yes 0 4.290 24
## 883  6   male yes 2 2.510 11
## 884  6   male yes 1 2.960 13
## 888  6   male yes 1 3.850 16
## 892  6 female yes 0 4.290  1
## 895  7   male yes 0 3.590  1
## 898  7   male yes 1 1.970  0
## 902  7   male yes 0 3.690  9
## 905  7   male yes 1 3.590 27
## 907  8   male yes 0 2.510 11
## 908  9   male yes 1 2.960 23
## 909  9   male yes 1 1.860 47
## 910 10 female yes 0 3.590 18
## 911 11   male yes 2 2.860  7
## 912 12   male yes 1 4.290 35
## 913 12   male yes 1 1.860  5
## 914 16   male yes 0 1.740 21
## 915 19   male yes 0 1.860 42

Ngược lại, ta lọc lấy dữ liệu của những nghiên cứu sinh chưa kết hôn và có 309 người chưa kết hôn (34%)

no <- p[p$ma== 'no',]
head(no)
##    a      g ma k   pr  m
## 2  0 female no 0 2.05  6
## 3  0 female no 0 3.75  6
## 5  0 female no 0 3.75 26
## 7  0 female no 0 3.19  3
## 9  0   male no 0 4.62  6
## 11 0   male no 0 2.96 14

5.3 Thống kê biến

Ta dùng lệnh summary tóm tắt thống kê dữ liệu. Ta có thể biết các thông tin về min, max, trung bình, trung vị, tứ phân vị của các biến trong tập dữ liệu.

summary(p)
##        a               g         ma            k                pr       
##  Min.   : 0.000   male  :494   no :309   Min.   :0.0000   Min.   :0.755  
##  1st Qu.: 0.000   female:421   yes:606   1st Qu.:0.0000   1st Qu.:2.260  
##  Median : 1.000                          Median :0.0000   Median :3.150  
##  Mean   : 1.693                          Mean   :0.4951   Mean   :3.103  
##  3rd Qu.: 2.000                          3rd Qu.:1.0000   3rd Qu.:3.920  
##  Max.   :19.000                          Max.   :3.0000   Max.   :4.620  
##        m         
##  Min.   : 0.000  
##  1st Qu.: 3.000  
##  Median : 6.000  
##  Mean   : 8.767  
##  3rd Qu.:12.000  
##  Max.   :77.000

Ta cũng có thể sử dụng các lệnh thống kê để phân tích biến a (số bài báo cáo)

Kết quả cho thấy:

-Trung bình số bài báo cáo của 1 nghiên cứu sinh là gần được 2 bài

-Trung vị là 1 cho biết có 50% số nghiên cứu sinh có số bài báo cáo ít hơn 1

-Độ lệch chuẩn của biến a là 1.92

-Phương sai của biến a là 3.7

-Hàm Quantile cho biết 70% nghiên cứu sinh có số lượng bài báo cáo ít hơn 2

mean(p$a)
## [1] 1.692896
median(p$a)
## [1] 1
sd(p$a)
## [1] 1.926069
var(p$a)
## [1] 3.709742
quantile(p$a,0.7)
## 70% 
##   2

Đầu tiên, ta nhìn tổng quan biến a (số bài báo cáo)

Chia số bài báo cáo thành 3 tổ khác nhau

Sau đó, lập bảng thống kê với biến a

  • Ta thấy, tổ it là tổ có số bài báo cáo từ 1 bài đến 6 bài có số lượng nghiên cứu sinh nhiều nhất là 619 người(67%)

  • Tổ trungbinh là tổ có số bài báo cáo từ 6 đến 12 bài có số lượng nghiên cứu sinh chiếm thứ 2 là 19 người (2%)

  • Tổ nhieu là tổ có số bài báo cáo từ 12 bài trở lên có số lượng nghiên cứu sinh chiếm ít nhất là 2 người(0.2%)

  • Phần còn lại là số nghiên cứu sinh không có bài báo cáo nào với 275 người.

summary(p$a)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   0.000   0.000   1.000   1.693   2.000  19.000
sbbc <- cut(p$a, breaks = c(0,6,12,19), labels = c('it','trungbinh','nhieu'))
table(sbbc)
## sbbc
##        it trungbinh     nhieu 
##       619        19         2

Thống kê tổng hợp dữ liệu của biến a theo biến g và tính trung bình của các biến trong g theo a bằng lệnh aggregate

  • Từ kết quả ta thấy, những nam nghiên cứu sinh trung bình làm khoảng 2 bài báo cáo

  • Còn những nữ nghiên cứu sinh trung bình làm được 1 bài báo cáo

aggregate(p$a, list(p$g), FUN = 'mean')
##   Group.1        x
## 1    male 1.882591
## 2  female 1.470309

Ta dùng lệnh “group_by” để phân nhóm dữ liệu theo giới tính

Bên cạnh đó, có thể dùng lệnh summarise để tính trung bình số bài báo cáo các nghiên cứu sinh làm được theo giới tính

library(tidyverse)
p %>% group_by(g)
## # A tibble: 915 × 6
## # Groups:   g [2]
##        a g      ma        k    pr     m
##    <int> <fct>  <fct> <int> <dbl> <int>
##  1     0 male   yes       0  2.52     7
##  2     0 female no        0  2.05     6
##  3     0 female no        0  3.75     6
##  4     0 male   yes       1  1.18     3
##  5     0 female no        0  3.75    26
##  6     0 female yes       2  3.59     2
##  7     0 female no        0  3.19     3
##  8     0 male   yes       2  2.96     4
##  9     0 male   no        0  4.62     6
## 10     0 female yes       0  1.25     0
## # ℹ 905 more rows
group_by(p,g)
## # A tibble: 915 × 6
## # Groups:   g [2]
##        a g      ma        k    pr     m
##    <int> <fct>  <fct> <int> <dbl> <int>
##  1     0 male   yes       0  2.52     7
##  2     0 female no        0  2.05     6
##  3     0 female no        0  3.75     6
##  4     0 male   yes       1  1.18     3
##  5     0 female no        0  3.75    26
##  6     0 female yes       2  3.59     2
##  7     0 female no        0  3.19     3
##  8     0 male   yes       2  2.96     4
##  9     0 male   no        0  4.62     6
## 10     0 female yes       0  1.25     0
## # ℹ 905 more rows
p %>% group_by(g) %>%  summarise(n = mean(a))
## # A tibble: 2 × 2
##   g          n
##   <fct>  <dbl>
## 1 male    1.88
## 2 female  1.47

6 BÀI TẬP VỀ NHÀ 1

6.1 Giải thích dữ liệu

Tập dữ liệu PhDPublications được thu thập vào năm 1997 nói về số bài báo cáo của các nghiên cứu sinh trong lĩnh vực hóa sinh.

Dữ liệu gồm 915 quan sát và có 6 biến:

  • articles: số bài báo cáo được đăng trong 3 năm gần đây

  • gender: giới tính của nghiên cứu sinh

  • married: tình trạng hôn nhân của nghiên cứu sinh

  • kids: số con dưới 6 tuổi của nghiên cứu sinh

  • prestige: chất lượng của chương trình đào tạo

  • mentor: số bài báo cáo được đăng của người hướng dẫn nghiên cứu sinh

6.2 Lấy dữ liệu từ package

library(AER)
data("PhDPublications")

Gán dữ liệu vào p

p <- PhDPublications

Xem cấu trúc dữ liệu

str(p)
## 'data.frame':    915 obs. of  6 variables:
##  $ articles: int  0 0 0 0 0 0 0 0 0 0 ...
##  $ gender  : Factor w/ 2 levels "male","female": 1 2 2 1 2 2 2 1 1 2 ...
##  $ married : Factor w/ 2 levels "no","yes": 2 1 1 2 1 2 1 2 1 2 ...
##  $ kids    : int  0 0 0 1 0 2 0 2 0 0 ...
##  $ prestige: num  2.52 2.05 3.75 1.18 3.75 ...
##  $ mentor  : int  7 6 6 3 26 2 3 4 6 0 ...
##  - attr(*, "datalabel")= chr "Academic Biochemists / S Long"
##  - attr(*, "time.stamp")= chr "30 Jan 2001 10:49"
##  - attr(*, "formats")= chr [1:6] "%9.0g" "%9.0g" "%9.0g" "%9.0g" ...
##  - attr(*, "types")= int [1:6] 98 98 98 98 102 98
##  - attr(*, "val.labels")= chr [1:6] "" "sexlbl" "marlbl" "" ...
##  - attr(*, "var.labels")= chr [1:6] "Articles in last 3 yrs of PhD" "Gender: 1=female 0=male" "Married: 1=yes 0=no" "Number of children < 6" ...
##  - attr(*, "version")= int 6
##  - attr(*, "label.table")=List of 6
##   ..$ marlbl: Named num [1:2] 0 1
##   .. ..- attr(*, "names")= chr [1:2] "Single" "Married"
##   ..$ sexlbl: Named num [1:2] 0 1
##   .. ..- attr(*, "names")= chr [1:2] "Men" "Women"
##   ..$       : NULL
##   ..$       : NULL
##   ..$       : NULL
##   ..$       : NULL

Xem các quan sát đầu của tập dữ liệu

head(p)
##   articles gender married kids prestige mentor
## 1        0   male     yes    0     2.52      7
## 2        0 female      no    0     2.05      6
## 3        0 female      no    0     3.75      6
## 4        0   male     yes    1     1.18      3
## 5        0 female      no    0     3.75     26
## 6        0 female     yes    2     3.59      2

Xem các quan sát cuối của tập dữ liệu

tail(p)
##     articles gender married kids prestige mentor
## 910       10 female     yes    0     3.59     18
## 911       11   male     yes    2     2.86      7
## 912       12   male     yes    1     4.29     35
## 913       12   male     yes    1     1.86      5
## 914       16   male     yes    0     1.74     21
## 915       19   male     yes    0     1.86     42

Đặt tên các biến

names(p) <- c('a','g','ma','k','pr','m')

6.3 Lọc dữ liệu

Gán biến a vào sobaibc

Lọc số nghiên cứu sinh có số bài báo cáo từ 5 đến 10 bài

  • Từ kết quả, ta thấy có 32 nghiên cứu sinh có số bài báo nằm trong khoảng này (chiếm 3.5%)
sobaibc <- p$a
sobaibc510 <- sobaibc[sobaibc>5 & sobaibc<10]
sobaibc510
##  [1] 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 7 7 7 7 7 7 7 7 7 7 7 7 8 9 9

Lọc số nghiên cứu sinh có số bài báo cáo nhiều hơn 1 và có hơn 1 con

  • Từ kết quả cho thấy có khá ít người (48 người) có số bài báo cáo nhiều hơn 1 và có hơn 1 con (chiếm 5,24%)
sobaibcs <- p[p$a>1&p$k>1,]
sobaibcs
##      a      g  ma k   pr  m
## 533  2   male yes 2 2.96  8
## 546  2   male yes 2 2.96 46
## 550  2   male yes 2 4.29  8
## 558  2   male yes 2 1.80  6
## 568  2   male yes 2 4.54  2
## 569  2 female yes 2 3.85 47
## 570  2   male yes 2 2.96 21
## 579  2 female yes 2 1.22  4
## 582  2   male yes 2 2.87 20
## 588  2   male yes 2 4.29 10
## 597  2   male yes 2 1.97  0
## 602  2   male yes 3 4.34  7
## 610  2   male yes 2 2.21 12
## 620  2   male yes 2 4.34 17
## 625  2   male yes 2 3.32 27
## 627  2 female yes 2 2.58  3
## 628  2   male yes 2 3.54 16
## 634  2   male yes 2 2.50  5
## 635  2   male yes 3 2.00  8
## 668  2 female yes 2 3.59 11
## 676  2   male yes 2 1.86  6
## 678  2 female yes 2 4.54 48
## 689  2 female yes 2 3.21  2
## 694  2   male yes 2 4.29 30
## 703  3   male yes 2 4.54 31
## 717  3   male yes 2 1.80  6
## 723  3   male yes 2 4.29  0
## 725  3   male yes 2 4.29 25
## 732  3   male yes 2 1.95  3
## 737  3   male yes 2 2.83  7
## 749  3 female yes 2 1.89 16
## 773  3   male yes 2 2.58  2
## 778  3   male yes 2 2.10  4
## 779  3   male yes 2 1.38  8
## 781  3   male yes 3 2.86  3
## 801  4   male yes 2 1.72  2
## 802  4   male yes 2 2.86 15
## 803  4   male yes 2 4.54 66
## 805  4   male yes 2 1.86 15
## 809  4   male yes 2 2.05 13
## 814  4   male yes 2 3.54  2
## 821  4   male yes 2 4.54 21
## 846  4   male yes 2 3.69 16
## 849  4   male yes 2 2.58  6
## 853  5   male yes 2 3.85 15
## 880  6 female yes 2 1.86 38
## 883  6   male yes 2 2.51 11
## 911 11   male yes 2 2.86  7

6.4 Lập bảng

Chia biến a thành 4 tổ và lập bảng tần số

  • Số lượng bài báo cáo dưới 5 bài chiếm số lượng nhiều nhất với 850 nghiên cứu sinh (chiếm 93%)

  • Tổ từ 5 đến 10 bài báo cáo có 59 nghiên cứu sinh( chiếm 6.4%)

  • Tổ từ 10 đến 15 bài báo cáo có 4 nghiên cứu sinh (chiếm 0.4%)

  • Số lượng nghiên cứu sinh có từ 15 đến 19 bài báo cáo chiếm số lượng ít nhất với 2 người (chiếm 0.2%)

tablesa <- table(cut(p$a,4))
prop.table(tablesa)
## 
## (-0.019,4.75]    (4.75,9.5]    (9.5,14.2]     (14.2,19] 
##   0.928961749   0.064480874   0.004371585   0.002185792

Lập bảng tần số của số bài báo cáo theo giới tính

  • Ta thấy trong 915 nghiên cứu sinh thì nam chiếm nhiều hơn với 494 người (chiếm 54%) tuy nghiên không có sự cách biệt quá lớn so với nữ (chiếm 46%).

  • Số lượng bài báo cáo dưới 5 chiếm nhiều nhất (93%) với 450 bài là của nam nghiên cứu sinh và 400 bài của nữ nghiên cứu sinh.

table(cut(p$a,4),p$g)
##                
##                 male female
##   (-0.019,4.75]  450    400
##   (4.75,9.5]      39     20
##   (9.5,14.2]       3      1
##   (14.2,19]        2      0

Lập bảng tần số của số bài báo cáo theo số con

  • Từ kết quả cho thấy, số nghiên cứu sinh không có con chiếm số lượng nhiều nhất, 599 người (65%) và số nghiên cứu sinh có 3 con chiếm thấp nhất, chỉ có 16 người (khoảng 1,7%). Như vậy, ta thấy những nghiên cứu sinh càng có nhiều bài báo cáo thì số con họ có càng ít.
table(cut(p$a,4),p$k)
##                
##                   0   1   2   3
##   (-0.019,4.75] 556 177 101  16
##   (4.75,9.5]     40  16   3   0
##   (9.5,14.2]      1   2   1   0
##   (14.2,19]       2   0   0   0