1 BÀI TẬP TUẦN 4

1.1 Mô tả dữ liệu

Tiếp tục ở tuần 3, em vẫn sử dụng lại bộ dữ liệu của dataset Prestige

Khung dữ liệu Uy tín có 102 hàng và 6 cột. Các quan sát là nghề nghiệp.

  • Giải thích các biến:

  • education: Trình độ học vấn trung bình của những người đương nhiệm trong nghề nghiệp, các năm, vào năm 1971.

  • income: Thu nhập trung bình của những người đương nhiệm, đô la, năm 1971.

  • women: Tỷ lệ người đương nhiệm là phụ nữ.

  • prestige: Điểm uy tín của Pineo-Porter cho nghề nghiệp, từ một cuộc khảo sát xã hội được thực hiện vào giữa những năm 1960.

  • census: Điều tra dân số Canada mã nghề nghiệp

  • type: Loại nghề nghiệp. Một yếu tố với các cấp độ (lưu ý: không theo thứ tự): bc, Blue Collar; prof, Professional, Managerial, and Technical; wc, Cổ trắng.

library(AER)
## Warning: package 'AER' was built under R version 4.2.3
## Loading required package: car
## Warning: package 'car' was built under R version 4.2.3
## Loading required package: carData
## Warning: package 'carData' was built under R version 4.2.3
## Loading required package: lmtest
## Warning: package 'lmtest' was built under R version 4.2.3
## Loading required package: zoo
## Warning: package 'zoo' was built under R version 4.2.3
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
## Loading required package: sandwich
## Warning: package 'sandwich' was built under R version 4.2.3
## Loading required package: survival
library(tidyverse)
## Warning: package 'tidyverse' was built under R version 4.2.3
## Warning: package 'ggplot2' was built under R version 4.2.3
## Warning: package 'tibble' was built under R version 4.2.3
## Warning: package 'tidyr' was built under R version 4.2.3
## Warning: package 'readr' was built under R version 4.2.3
## Warning: package 'purrr' was built under R version 4.2.3
## Warning: package 'dplyr' was built under R version 4.2.3
## Warning: package 'stringr' was built under R version 4.2.3
## Warning: package 'forcats' was built under R version 4.2.3
## Warning: package 'lubridate' was built under R version 4.2.3
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.2     ✔ readr     2.1.4
## ✔ forcats   1.0.0     ✔ stringr   1.5.0
## ✔ ggplot2   3.4.2     ✔ tibble    3.2.1
## ✔ lubridate 1.9.2     ✔ tidyr     1.3.0
## ✔ purrr     1.0.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ✖ dplyr::recode() masks car::recode()
## ✖ purrr::some()   masks car::some()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(corrplot)
## Warning: package 'corrplot' was built under R version 4.2.3
## corrplot 0.92 loaded
data("Prestige")
pres <- Prestige
head(pres)
##                     education income women prestige census type
## gov.administrators      13.11  12351 11.16     68.8   1113 prof
## general.managers        12.26  25879  4.02     69.1   1130 prof
## accountants             12.77   9271 15.70     63.4   1171 prof
## purchasing.officers     11.42   8865  9.11     56.8   1175 prof
## chemists                14.62   8403 11.68     73.5   2111 prof
## physicists              15.64  11030  5.13     77.6   2113 prof

Đặt tên lại các biến

names(pres) <- c("e","i","w","p","c","t" )

1.2 Ma trận tương quan trên Bộ dữ liệu uy tín

Hãy xác định các biến có tương quan cao với biến uy tín

Mối tương quan của Bộ dữ liệu uy tín trên các biến số

cor(pres[,-6])
##             e          i           w          p          c
## e  1.00000000  0.5775802  0.06185286  0.8501769 -0.8230882
## i  0.57758023  1.0000000 -0.44105927  0.7149057 -0.3610023
## w  0.06185286 -0.4410593  1.00000000 -0.1183342 -0.2270028
## p  0.85017689  0.7149057 -0.11833419  1.0000000 -0.6345103
## c -0.82308821 -0.3610023 -0.22700277 -0.6345103  1.0000000
  • Vẽ ma trận tương quan
corrplot(cor(pres[,-6]) , method = "number")

Bạn có thể nhận thấy rằng các biến số về thu nhập và giáo dục có mối tương quan thuận chiều với uy tín. Ngoài ra, điều tra dân số có tương quan nghịch với uy tín trong khi phụ nữ không có mối tương quan.

1.3 Hồi quy

hq <- lm(pres$e~pres$i)
summary(hq)
## 
## Call:
## lm(formula = pres$e ~ pres$i)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -5.5601 -1.9279 -0.0718  1.7333  4.5458 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 8.215e+00  4.199e-01  19.566  < 2e-16 ***
## pres$i      3.712e-04  5.246e-05   7.075 2.08e-10 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 2.238 on 100 degrees of freedom
## Multiple R-squared:  0.3336, Adjusted R-squared:  0.3269 
## F-statistic: 50.06 on 1 and 100 DF,  p-value: 2.079e-10

Kiểm định sự phù hợp mô hình: ta có F= 50.06>C nên mô hình trên là phù hợp

Kiểm định biến giá gói thay đổi ảnh hưởng đến biến số gói: ta có t-value=7.075>C nên biến education thay đổi dẫn đến sự thay đổi của biến income

1.3.1 Vẽ đường hồi quy tuyến tính tương ứng với dataset Prestige

pres |> ggplot(map = aes(x = e, y = i)) + geom_point(color="red") + xlab("Area") + ylab("Peri") + labs(title = 'Đồ thị scatter thể hiện mối liên hệ giữa biến education và biến income') + geom_smooth(formula = y ~ x, method = 'lm', color = 'yellow')

Giữa biến education và biến income có sự tương quan dương với nhau, cụ thể khi giá trị của biến education tăng thì giá trị của biến income cũng tăng theo.

1.4 Đồ thị thể hiện sự tương quan giữa điểm uy tín của nghề nghiệp và mã nghề nghiệp

pres |> ggplot(map = aes(x = p, y = c )) + geom_point(color="red") + xlab("điểm uy tín") + ylab("mã nghề nghiệp") + geom_smooth(formula = y ~ x, method = 'lm', color = 'black') + labs(title = 'Đồ Thị thể hiện sự tương quan giữa điểm uy tín của nghề nghiệp và mã nghề nghiệp')

- Kết luận: giữa 2 biến điểm uy tín của nghề nghiệp và mã nghề nghiệp có quan hệ tuyến tính với nhau và cả hai biến cùng giảm

1.5 Đồ thị dạng scatter

Với dataset pres ta vẽ được đồ thị scatter như sau

Đồ thị scatter có thể cho ta thấy được mối liên hệ biến education và biến income như sau:

pres |> ggplot(map = aes(x = e, y = i)) + geom_point(color="blue") + xlab("e") + ylab("i") + labs(title = 'Đồ thị scatter thể hiện mối liên hệ giữa biến education và biến income')

Chúng ta cũng có thể nối các điểm trong đồ thị dạng scatter của 2 biến education (e) và income (i) lại với nhau bằng những đoạn thẳng như sau:

pres |> ggplot(aes(x = e, y = i)) +
  geom_point(color = 'blue') +
  geom_line(color = 'red')

Nhận xét: Bốn đồ thị phân tán (scatter) trên đều thể hiện sự phân tán của trình độ học vấn và mức thu nhập. Từ đồ thị ta có thể thấy:

Nhóm người có trình độ học vấn trung bình tập trung nhiều nhất ở khoảng 12 đến 16. Trong những người có trình độ học vấn, nhóm người trong khoảng 9 cho đến 10 chiếm ít nhất. Thu nhập người có trình độ thấp nhỏ nhất thì gần bằng 2500 và lớn nhất là hơn 25000. Người có mức thu nhập là hơn 25000 ứng với trình độ là 12

pres %>% ggplot(aes(x = e, y=i)) + geom_point(aes(color = p), na.rm = TRUE) + geom_smooth(aes(color = p), method = lm, formula = y~x, na.rm = TRUE) + xlab('Trình độ')+ylab('Mức thu nhập trung bình')
## Warning: The following aesthetics were dropped during statistical transformation: colour
## ℹ This can happen when ggplot fails to infer the correct grouping structure in
##   the data.
## ℹ Did you forget to specify a `group` aesthetic or to convert a numerical
##   variable into a factor?

## Biểu đồ

1.5.1 Sử dụng biểu đồ tròn phân tích biến type

pie(table(pres$t),col = rainbow(3), main = "Biểu đồ tròn của loại nghề nghiệp")

Biểu đồ tròn này thể hiện lần lượt ba biểu hiện của biến loại nghề nghiệp type. Biểu đồ này thể hiện bc, Blue Collar chiếm phần nhiều nhât, tiếp đó là prof, Professional, Managerial, and Technical, và ít nhất là wc, Cổ trắng.

1.5.2 Sử dụng biểu đồ cột phân tích hai biến type và prestige

table(pres$t)
## 
##   bc prof   wc 
##   44   31   23
pres |> ggplot(aes(x = t, y = after_stat(count))) + geom_bar(fill = 'blue') + geom_text(aes(label = scales::percent(after_stat(count/sum(count)))), stat = 'count', color = 'red', vjust = - .4)  + theme_classic() + labs(title = 'Đồ Thị thể hiện loại nghề nghiệp', x = 'Loại nghề nghiệp', y = 'Điểm uy tín')

Việc lập bảng và thống kê trên biểu đồ cột thể hiện loại nghề nghiệp theo điểm uy tín của nghề nghiệp đó thì có 44 (chiếm 43,1%) loại bc ,có 31 (chiếm 30,4%), có 23 (chiếm 22,5%) và loại không xác định chiếm 3,9% số lượng tham gia vào cuộc khảo sát. Tại đây, số lượng các khảo suất chênh lệch nhau không nhiều lần lượt là 12,7 ; 7,9

1.5.3 Biểu đồ cột đôi theo biến điểm uy tín và loại nghề nghiệp

prety1 <- ggplot(pres, aes(x = p, fill = t)) +
  geom_bar(position = "stack", stat = "count") +
  labs(x = "ĐIỂM UY TÍN", y = "TỔNG", title = "BIỂU ĐỒ ĐIỂM UY TÍN THEO LOẠI NGHỀ NGHIỆP") +
  theme_minimal()
print(prety1)

Biểu đồ cột thu nhập theo biến “điểm uy tín” và “loại nghề nghiệp” từ dữ liệu “Prestige”. Biểu đồ này thể hiện phân bố số lượng người theo điểm uy tín của loại nghề nghiệp đó của họ, được phân theo điểm uy tín và loại nghề nghiệp tương ứng.

Trục x của biểu đồ là biến “điểm uy tín” (prestige), biểu thị điểm uy tín của nghề nghiệp mà người đó tạo nên. Trục y là loại nghiệp nghiệp của từng người.

Mỗi cột trong biểu đồ đại diện cho một loại nghề nghiệp, được phân theo các loại gồm bc,prof,wc, loại khác. Các cột được xếp chồng lên nhau, cho thấy tỷ lệ phân bố của điểm uy tín theo từng loại nghề nghiệp.

1.5.4 Biểu đồ độ lệch chuẩn thu nhập theo loại nghề nghiệp

ict2 <- ggplot(pres, aes(x = p, y = i, fill = p)) +
  geom_bar(stat = "summary", fun = sd, position = "dodge", color = "blue") +
  labs(x = "LOẠI NGHỀ NGHIỆP", y = "ĐỘ LỆCH CHUẨN CỦA THU NHẬP", title = "ĐỘ LỆCH CHUẨN CỦA THU NHẬP THEO LOẠI NGHỀ NGHIỆP")
# Hiển thị số liệu trên đỉnh của biểu đồ
ict<- ict2 + geom_text(stat = "summary", fun = sd, position = position_dodge(width = 0.9),
                         aes(label = round(..y.., 2)), vjust = -0.5)
ict
## Warning: The dot-dot notation (`..y..`) was deprecated in ggplot2 3.4.0.
## ℹ Please use `after_stat(y)` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
## Warning: `position_dodge()` requires non-overlapping x intervals
## Warning: Removed 84 rows containing missing values (`geom_bar()`).
## Warning: Removed 84 rows containing missing values (`geom_text()`).

Giải thích:

Trục x: Biểu diễn loại nghề nghiệp, với các mức nằm trong khoảng từ 20 đến 80. Trục y: Biểu diễn độ lệch chuẩn của thu nhập.Nhận xét:

Loại nghề nghiệp: Biểu đồ cho thấy sự khác biệt về độ lệch chuẩn của mức thu nhập giữa các loại nghề nghiệp. Độ lệch chuẩn: Độ lệch chuẩn được biểu diễn bằng độ dài của cột. Các cột dài hơn cho thấy sự biến động mạnh hơn trong mức thu nhập, trong khi các cột ngắn hơn cho thấy sự ổn định hơn. Số liệu trên đỉnh cột: Số liệu trên đỉnh mỗi cột biểu thị giá trị độ lệch chuẩn tương ứng của từng nhóm. Số liệu này giúp hiểu rõ hơn về mức độ biến động của mức lương trong từng nhóm giới tính.

ggplot(pres, aes(x = e, y = i, color = p)) +
  geom_line() +
  labs(x = "Trình độ học vấn", y = "Thu nhập", color = "Loại nghề nghiệp") +
  theme_minimal()

Biểu đồ đường thu nhập theo biến trình độ học vấn cho thấy xu hướng tăng trưởng thu nhập theo trình độ học vấn và có sự khác biệt giữa các loại nghề nghiệp. Dựa vào biểu đồ, ta có thể rút ra một số nhận xét sau:

Thu nhập tăng theo trình độ: Đối với trình độ, có một xu hướng tăng thu nhập khi trình độ tăng lên. Điều này cho thấy tính công bằng trong việc tăng thu nhập dựa trên trình độ học vấn.

Độ biến động: Biểu đồ cho thấy độ biến động của thu nhập tăng dần theo trình độ. Điều này có thể là do các yếu tố khác nhau như thăng tiến trong sự nghiệp, đổi việc, hoặc sự tăng trưởng của ngành nghề.

Xu hướng chung: Dựa vào các đường đồng thời, ta có thể nhận thấy xu hướng chung của thu nhập theo trình độ. Tuy nhiên, có sự biến động đáng kể giữa các loại nghề nghiệp.

1.6 Hệ số tương quan

1.6.1 Hệ số tương quan Person

  • Hệ số tương quan Pearson còn được gọi là hệ số Pearson (Pearson Correlation Coefficient) trong thống kê được định nghĩa là thước đo mối quan hệ thống kê giữa hai biến và sự liên kết của chúng với nhau
ed <- pres$e
ic <- pres$i
cor.test(ed,ic)
## 
##  Pearson's product-moment correlation
## 
## data:  ed and ic
## t = 7.0753, df = 100, p-value = 2.079e-10
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  0.4315828 0.6940914
## sample estimates:
##       cor 
## 0.5775802

Kết luận: ta có p-value = 2.079e-10 < alpha=0.05 nên hai biến trình độ học vấn và thu nhập có quan hệ tương quan tuyến tính với nhau.

1.6.2 Hệ số tương quan Spearman

Ý nghĩa: Hệ số tương quan Pearson chỉ hợp lí nếu biến số x và y tuân theo luật phân phối chuẩn. Nếu x và y không tuân theo luật phân phối chuẩn, chúng ta phải sử dụng một hệ số tương quan khác tên là Spearman, một phương pháp phân tích phi tham số. Hệ số này được ước tính bằng cách biến đổi hai biến số x và y thành thứ bậc (rank), và xem độ tương quan giữa hai dãy số bậc. Do đó, hệ số còn có tên tiếng Anh là Spearman’s Rank correlation

-Giả sử trình độ học vấn và mức thu nhập không có phân phối chuẩn, ta có:

 cor.test(ed,ic,  method="spearman") 
## Warning in cor.test.default(ed, ic, method = "spearman"): Cannot compute exact
## p-value with ties
## 
##  Spearman's rank correlation rho
## 
## data:  ed and ic
## S = 75339, p-value = 2.847e-10
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
##      rho 
## 0.573999

Kết luận: ta có p-value = 2.847e-10 < alpha=0.05 nên hai biến trình độ học vấn và thu nhập có quan hệ tương quan tuyến tính với nhau.

1.6.3 Hệ số tương quan Kendall

Ý nghĩa: Hệ số tương quan Kendall (cũng là một phương pháp phân tích phi tham số) được ước tính bằng cách tìm các cặp số (x, y) “song hành” với nhau. Một cặp (x, y) song hành ở đây được định nghĩa là hiệu (độ khác biệt) trên trục hoành có cùng dấu hiệu (dương hay âm) với hiệu trên trục tung. Nếu hai biến số x và y không có liên hệ với nhau, thì số cặp song hành bằng hay tương đương với số cặp không song hành.

cor.test(ed, ic,method="kendall")
## 
##  Kendall's rank correlation tau
## 
## data:  ed and ic
## z = 6.0952, p-value = 1.093e-09
## alternative hypothesis: true tau is not equal to 0
## sample estimates:
##      tau 
## 0.409559

Kết luận: ta có p-value = 1.093e-09 < alpha=0.05 nên hai biến trình độ học vấn và thu nhập có quan hệ tương quan tuyến tính với nhau.

1.7 Hồi quy tuyến tính đơn biến

1.7.1 Viết hàm hồi quy tuyến tính mẫu SRF

Hàm lm (viết tắt từ linear model) trong R có thể tính toán các giá trị của α và β trong mô hình hồi quy đơn: α + β.X

lm(ic ~ ed)
## 
## Call:
## lm(formula = ic ~ ed)
## 
## Coefficients:
## (Intercept)           ed  
##     -2853.6        898.8

Kết quả: như vậy mô hình hồi quy đơn có dạng là: (SRF): Y= -2853.6 + 898.8X

1.7.2 Kiểm định các giả thuyết

bangthongke <- lm(ic~ed)
summary(bangthongke)
## 
## Call:
## lm(formula = ic ~ ed)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -5493.2 -2433.8   -41.9  1491.5 17713.1 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  -2853.6     1407.0  -2.028   0.0452 *  
## ed             898.8      127.0   7.075 2.08e-10 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 3483 on 100 degrees of freedom
## Multiple R-squared:  0.3336, Adjusted R-squared:  0.3269 
## F-statistic: 50.06 on 1 and 100 DF,  p-value: 2.079e-10

Kiểm định sự phù hợp mô hình: ta có F= 50.06>C nên mô hình trên là phù hợp

Kiểm định biến giá gói thay đổi ảnh hưởng đến biến số gói: ta có t-value=7.075>C nên biến education thay đổi dẫn đến sự thay đổi của biến income

1.7.3 Dự báo mô hình hồi quy đơn

Ta dự đoán khi giá trị của biến education = 50 vào hàm hồi quy tuyến tính mẫu (SRF): Y= -2853.6 + 898.8X

ketqua <- -2853.6 + 898.8*50
ketqua
## [1] 42086.4

=> Vậy kết quả khi giá trị của biến education = 50 thì trung bình giá trị của biến income = 42086.4

2 BÀI TẬP TUẦN 3

Package: AER - Dataset: Prestige (Uy tín của Nghề nghiệp Canada)

Mô tả dữ liệu: Khung dữ liệu Uy tín có 102 hàng và 6 cột. Các quan sát là nghề nghiệp.

  • Giải thích các biến:

  • education: Trình độ học vấn trung bình của những người đương nhiệm trong nghề nghiệp, các năm, vào năm 1971.

  • income: Thu nhập trung bình của những người đương nhiệm, đô la, năm 1971.

  • women: Tỷ lệ người đương nhiệm là phụ nữ.

  • prestige: Điểm uy tín của Pineo-Porter cho nghề nghiệp, từ một cuộc khảo sát xã hội được thực hiện vào giữa những năm 1960.

  • census: Điều tra dân số Canada mã nghề nghiệp

  • type: Loại nghề nghiệp. Một yếu tố với các cấp độ (lưu ý: không theo thứ tự): bc, Blue Collar; prof, Professional, Managerial, and Technical; wc, Cổ trắng.

2.1 Tổng quan dữ liệu

Gọi bộ dữ liệu Prestige trong package AER bằng lệnh library và gán nó cho biến Pre để tạo thành một bộ dữ liệu mới. Sau đó, gán data Prestige vào biến có tên là Pre.

library(AER)
library(tidyverse)
data("Prestige")
Pre <- Prestige

Sau đó đặt tên lần lượt cho 6 biến trong bộ dữ liệu là “e”,“i”,“w”,“p”,“c”,“t” bằng lệnh names

names(Pre) <- c("e","i","w","p","c","t" )

Dùng lệnh summary để tổng quan dữ liệu

summary(Pre)
##        e                i               w                p        
##  Min.   : 6.380   Min.   :  611   Min.   : 0.000   Min.   :14.80  
##  1st Qu.: 8.445   1st Qu.: 4106   1st Qu.: 3.592   1st Qu.:35.23  
##  Median :10.540   Median : 5930   Median :13.600   Median :43.60  
##  Mean   :10.738   Mean   : 6798   Mean   :28.979   Mean   :46.83  
##  3rd Qu.:12.648   3rd Qu.: 8187   3rd Qu.:52.203   3rd Qu.:59.27  
##  Max.   :15.970   Max.   :25879   Max.   :97.510   Max.   :87.20  
##        c           t     
##  Min.   :1113   bc  :44  
##  1st Qu.:3120   prof:31  
##  Median :5135   wc  :23  
##  Mean   :5402   NA's: 4  
##  3rd Qu.:8312            
##  Max.   :9517

Để xem qua 6 dòng đầu và 6 dòng cuối của dữ liệu bao gồm các thông tin về trình độ học vấn trung bình,thu nhập trung bình,tỷ lệ người đương nhiệm là phụ nữ, điểm uy tín của Pineo-Porter cho nghề nghiệp, điều tra dân số Canada mã nghề nghiệp, loại nghề nghiệp ta sử dụng lệnh head và tail

head(Pre)
##                         e     i     w    p    c    t
## gov.administrators  13.11 12351 11.16 68.8 1113 prof
## general.managers    12.26 25879  4.02 69.1 1130 prof
## accountants         12.77  9271 15.70 63.4 1171 prof
## purchasing.officers 11.42  8865  9.11 56.8 1175 prof
## chemists            14.62  8403 11.68 73.5 2111 prof
## physicists          15.64 11030  5.13 77.6 2113 prof
tail(Pre)
##                     e    i     w    p    c  t
## train.engineers  8.49 8845  0.00 48.9 9131 bc
## bus.drivers      7.58 5562  9.47 35.9 9171 bc
## taxi.drivers     7.93 4224  3.59 25.1 9173 bc
## longshoremen     8.37 4753  0.00 26.1 9313 bc
## typesetters     10.00 6462 13.58 42.2 9511 bc
## bookbinders      8.55 3617 70.87 35.2 9517 bc

Trước khi thực hiện phân tích bộ dữ liệu thì cũng cần xem qua cấu trúc của nó. Ta dùng lệnh str

str(Pre)
## 'data.frame':    102 obs. of  6 variables:
##  $ e: num  13.1 12.3 12.8 11.4 14.6 ...
##  $ i: int  12351 25879 9271 8865 8403 11030 8258 14163 11377 11023 ...
##  $ w: num  11.16 4.02 15.7 9.11 11.68 ...
##  $ p: num  68.8 69.1 63.4 56.8 73.5 77.6 72.6 78.1 73.1 68.8 ...
##  $ c: int  1113 1130 1171 1175 2111 2113 2133 2141 2143 2153 ...
##  $ t: Factor w/ 3 levels "bc","prof","wc": 2 2 2 2 2 2 2 2 2 2 ...

2.2 Lệnh Pivot_longer

Lệnh pivot_longer giúp chuyển đổi bảng dữ liệu rộng thành dài.

  • Chuyển đổi dữ liệu dạng rộng income (thu nhập trung bình của những người đương nhiệm) sang dạng dài
ttd <- Pre %>% pivot_longer(cols = c('i','w'),names_to = "h1",values_to = "value")
  • Biến đổi dữ liệu từ rộng sang dài, giúp phân tích dữ liệu và thực hiện tính toán dễ dàng hơn. Thực hiện lệnh pivot_longer cho các biến liên quan đến thu nhập trung bình của những người đương nhiệm gồm “i”, tỷ lệ người đương nhiệm là phụ nữ “w” để chuyển trình bày nhữug biến này từ hàng sang cột. Lệnh name_to =“h1” được sử dụng để chỉ định tên của cột mới được tạo ra sau khi chuyển đổi. Lệnh values_to = “value” để chỉ định tên của cột chứa giá trị được tạo ra sau khi chuyển đổi.
table(ttd$h1)
## 
##   i   w 
## 102 102

Kết quả thu được là tập dữ liệu ttd với 204 quan sát và 6 biến, dài gấp đôi so với tập dữ liệu gốc ban đầu.

tts <- Pre %>% pivot_longer(cols = starts_with('e'),names_to = "e", values_to = 'al')
tts
## # A tibble: 102 × 7
##        i     w     p     c t     e        al
##    <int> <dbl> <dbl> <int> <fct> <chr> <dbl>
##  1 12351 11.2   68.8  1113 prof  e      13.1
##  2 25879  4.02  69.1  1130 prof  e      12.3
##  3  9271 15.7   63.4  1171 prof  e      12.8
##  4  8865  9.11  56.8  1175 prof  e      11.4
##  5  8403 11.7   73.5  2111 prof  e      14.6
##  6 11030  5.13  77.6  2113 prof  e      15.6
##  7  8258 25.6   72.6  2133 prof  e      15.1
##  8 14163  2.69  78.1  2141 prof  e      15.4
##  9 11377  1.03  73.1  2143 prof  e      14.5
## 10 11023  0.94  68.8  2153 prof  e      14.6
## # ℹ 92 more rows

Trong câu lệnh này, chúng ta tiến hành trình bày lại cột dữ liệu education (trình độ học vấn trung bình của những người đương nhiệm trong nghề nghiệp, các năm, vào năm 1971) thành một cột dữ liệu và đặt tên cho cột dữ liệu mới này là e, các giá trị của e đã được đưa vào một cột mới và cột này được đặt tên là al.

2.3 Lệnh Pivot_wider

  • Chuyển dữ liệu từ dạng dài sang dạng rộng ta sử dụng lệnh pivot_wider, bộ dữ liệu được chọn là Pre, sau đây là Bảng tổng hợp dạng rộng thu nhập trung bình của Canada theo trình độ học vấn:
ei <- Pre %>% pivot_wider(names_from = i, values_from = e)
ei
## # A tibble: 102 × 104
##        w     p     c t     `12351` `25879` `9271` `8865` `8403` `11030` `8258`
##    <dbl> <dbl> <int> <fct>   <dbl>   <dbl>  <dbl>  <dbl>  <dbl>   <dbl>  <dbl>
##  1 11.2   68.8  1113 prof     13.1    NA     NA     NA     NA      NA     NA  
##  2  4.02  69.1  1130 prof     NA      12.3   NA     NA     NA      NA     NA  
##  3 15.7   63.4  1171 prof     NA      NA     12.8   NA     NA      NA     NA  
##  4  9.11  56.8  1175 prof     NA      NA     NA     11.4   NA      NA     NA  
##  5 11.7   73.5  2111 prof     NA      NA     NA     NA     14.6    NA     NA  
##  6  5.13  77.6  2113 prof     NA      NA     NA     NA     NA      15.6   NA  
##  7 25.6   72.6  2133 prof     NA      NA     NA     NA     NA      NA     15.1
##  8  2.69  78.1  2141 prof     NA      NA     NA     NA     NA      NA     NA  
##  9  1.03  73.1  2143 prof     NA      NA     NA     NA     NA      NA     NA  
## 10  0.94  68.8  2153 prof     NA      NA     NA     NA     NA      NA     NA  
## # ℹ 92 more rows
## # ℹ 93 more variables: `14163` <dbl>, `11377` <dbl>, `11023` <dbl>,
## #   `5902` <dbl>, `7059` <dbl>, `8425` <dbl>, `8049` <dbl>, `7405` <dbl>,
## #   `6336` <dbl>, `19263` <dbl>, `6112` <dbl>, `9593` <dbl>, `4686` <dbl>,
## #   `12480` <dbl>, `5648` <dbl>, `8034` <dbl>, `25308` <dbl>, `14558` <dbl>,
## #   `17498` <dbl>, `4614` <dbl>, `3485` <dbl>, `5092` <dbl>, `10432` <dbl>,
## #   `5180` <dbl>, `6197` <dbl>, `7562` <dbl>, `8206` <dbl>, `4036` <dbl>, …
  • Từ dữ liệu ban đầu, tính tổng thu nhập trung bình theo trình độ học vấn và điểm uy tín của Pineo-Porter cho nghề nghiệp. Sau đó, chuyển dữ liệu i từ dạng rộng sang dài theo điểm uy tính Pineo-Porter cho nghề nghiệp như bảng tổng hợp dưới đây
ip <- Pre %>% group_by(e,p) %>% summarise(sgh=sum(i),.groups = 'drop') %>% pivot_wider(names_from = p, values_from = sgh)
ip
## # A tibble: 96 × 93
##        e `28.2` `36.2` `27.3` `33.3` `28.8` `44.1` `38.9` `17.3` `20.8` `23.2`
##    <dbl>  <int>  <int>  <int>  <int>  <int>  <int>  <int>  <int>  <int>  <int>
##  1  6.38   2847     NA     NA     NA     NA     NA     NA     NA     NA     NA
##  2  6.6      NA   5959     NA     NA     NA     NA     NA     NA     NA     NA
##  3  6.67     NA     NA   4696     NA     NA     NA     NA     NA     NA     NA
##  4  6.69     NA     NA     NA   4443     NA     NA     NA     NA     NA     NA
##  5  6.74     NA     NA     NA     NA   3485     NA     NA     NA     NA     NA
##  6  6.84     NA     NA     NA     NA     NA   3643     NA     NA     NA     NA
##  7  6.92     NA     NA     NA     NA     NA     NA   5299     NA     NA     NA
##  8  7.11     NA     NA     NA     NA     NA     NA     NA   3472     NA     NA
##  9  7.33     NA     NA     NA     NA     NA     NA     NA     NA   3000     NA
## 10  7.42     NA     NA     NA     NA     NA     NA     NA     NA     NA   1890
## # ℹ 86 more rows
## # ℹ 82 more variables: `26.5` <int>, `20.1` <int>, `35.9` <int>, `25.2` <int>,
## #   `34.8` <int>, `29.7` <int>, `29.9` <int>, `41.8` <int>, `25.1` <int>,
## #   `38.1` <int>, `51.1` <int>, `42.9` <int>, `26.1` <int>, `48.9` <int>,
## #   `20.2` <int>, `35.2` <int>, `21.5` <int>, `50.8` <int>, `43.7` <int>,
## #   `44.2` <int>, `35.3` <int>, `40.9` <int>, `30.9` <int>, `36.1` <int>,
## #   `34.9` <int>, `25.9` <int>, `43.5` <int>, `14.8` <int>, `41.5` <int>, …

2.4 Lệnh Mutate

  • Từ cột trình độ ban đầu có thể tạo thêm hai cột mới là level, edu bằng lệnh mutate. Trong đó, cột level sẽ lấy 4 giá trị đầu tiền trong cột education và cột edu lấy 4 giá trị cuối.
e4 <- Pre %>% mutate (level = substr(e,1,4),edu= substr(e,5,8))
print(e4)
##                               e     i     w    p    c    t level edu
## gov.administrators        13.11 12351 11.16 68.8 1113 prof  13.1   1
## general.managers          12.26 25879  4.02 69.1 1130 prof  12.2   6
## accountants               12.77  9271 15.70 63.4 1171 prof  12.7   7
## purchasing.officers       11.42  8865  9.11 56.8 1175 prof  11.4   2
## chemists                  14.62  8403 11.68 73.5 2111 prof  14.6   2
## physicists                15.64 11030  5.13 77.6 2113 prof  15.6   4
## biologists                15.09  8258 25.65 72.6 2133 prof  15.0   9
## architects                15.44 14163  2.69 78.1 2141 prof  15.4   4
## civil.engineers           14.52 11377  1.03 73.1 2143 prof  14.5   2
## mining.engineers          14.64 11023  0.94 68.8 2153 prof  14.6   4
## surveyors                 12.39  5902  1.91 62.0 2161 prof  12.3   9
## draughtsmen               12.30  7059  7.83 60.0 2163 prof  12.3    
## computer.programers       13.83  8425 15.33 53.8 2183 prof  13.8   3
## economists                14.44  8049 57.31 62.2 2311 prof  14.4   4
## psychologists             14.36  7405 48.28 74.9 2315 prof  14.3   6
## social.workers            14.21  6336 54.77 55.1 2331 prof  14.2   1
## lawyers                   15.77 19263  5.13 82.3 2343 prof  15.7   7
## librarians                14.15  6112 77.10 58.1 2351 prof  14.1   5
## vocational.counsellors    15.22  9593 34.89 58.3 2391 prof  15.2   2
## ministers                 14.50  4686  4.14 72.8 2511 prof  14.5    
## university.teachers       15.97 12480 19.59 84.6 2711 prof  15.9   7
## primary.school.teachers   13.62  5648 83.78 59.6 2731 prof  13.6   2
## secondary.school.teachers 15.08  8034 46.80 66.1 2733 prof  15.0   8
## physicians                15.96 25308 10.56 87.2 3111 prof  15.9   6
## veterinarians             15.94 14558  4.32 66.7 3115 prof  15.9   4
## osteopaths.chiropractors  14.71 17498  6.91 68.4 3117 prof  14.7   1
## nurses                    12.46  4614 96.12 64.7 3131 prof  12.4   6
## nursing.aides              9.45  3485 76.14 34.9 3135   bc  9.45    
## physio.therapsts          13.62  5092 82.66 72.1 3137 prof  13.6   2
## pharmacists               15.21 10432 24.71 69.3 3151 prof  15.2   1
## medical.technicians       12.79  5180 76.04 67.5 3156   wc  12.7   9
## commercial.artists        11.09  6197 21.03 57.2 3314 prof  11.0   9
## radio.tv.announcers       12.71  7562 11.15 57.6 3337   wc  12.7   1
## athletes                  11.44  8206  8.13 54.1 3373 <NA>  11.4   4
## secretaries               11.59  4036 97.51 46.0 4111   wc  11.5   9
## typists                   11.49  3148 95.97 41.9 4113   wc  11.4   9
## bookkeepers               11.32  4348 68.24 49.4 4131   wc  11.3   2
## tellers.cashiers          10.64  2448 91.76 42.3 4133   wc  10.6   4
## computer.operators        11.36  4330 75.92 47.7 4143   wc  11.3   6
## shipping.clerks            9.17  4761 11.37 30.9 4153   wc  9.17    
## file.clerks               12.09  3016 83.19 32.7 4161   wc  12.0   9
## receptionsts              11.04  2901 92.86 38.7 4171   wc  11.0   4
## mail.carriers              9.22  5511  7.62 36.1 4172   wc  9.22    
## postal.clerks             10.07  3739 52.27 37.2 4173   wc  10.0   7
## telephone.operators       10.51  3161 96.14 38.1 4175   wc  10.5   1
## collectors                11.20  4741 47.06 29.4 4191   wc  11.2    
## claim.adjustors           11.13  5052 56.10 51.1 4192   wc  11.1   3
## travel.clerks             11.43  6259 39.17 35.7 4193   wc  11.4   3
## office.clerks             11.00  4075 63.23 35.6 4197   wc    11    
## sales.supervisors          9.84  7482 17.04 41.5 5130   wc  9.84    
## commercial.travellers     11.13  8780  3.16 40.2 5133   wc  11.1   3
## sales.clerks              10.05  2594 67.82 26.5 5137   wc  10.0   5
## newsboys                   9.62   918  7.00 14.8 5143 <NA>  9.62    
## service.station.attendant  9.93  2370  3.69 23.3 5145   bc  9.93    
## insurance.agents          11.60  8131 13.09 47.3 5171   wc  11.6    
## real.estate.salesmen      11.09  6992 24.44 47.1 5172   wc  11.0   9
## buyers                    11.03  7956 23.88 51.1 5191   wc  11.0   3
## firefighters               9.47  8895  0.00 43.5 6111   bc  9.47    
## policemen                 10.93  8891  1.65 51.6 6112   bc  10.9   3
## cooks                      7.74  3116 52.00 29.7 6121   bc  7.74    
## bartenders                 8.50  3930 15.51 20.2 6123   bc   8.5    
## funeral.directors         10.57  7869  6.01 54.9 6141   bc  10.5   7
## babysitters                9.46   611 96.53 25.9 6147 <NA>  9.46    
## launderers                 7.33  3000 69.31 20.8 6162   bc  7.33    
## janitors                   7.11  3472 33.57 17.3 6191   bc  7.11    
## elevator.operators         7.58  3582 30.08 20.1 6193   bc  7.58    
## farmers                    6.84  3643  3.60 44.1 7112 <NA>  6.84    
## farm.workers               8.60  1656 27.75 21.5 7182   bc   8.6    
## rotary.well.drillers       8.88  6860  0.00 35.3 7711   bc  8.88    
## bakers                     7.54  4199 33.30 38.9 8213   bc  7.54    
## slaughterers.1             7.64  5134 17.26 25.2 8215   bc  7.64    
## slaughterers.2             7.64  5134 17.26 34.8 8215   bc  7.64    
## canners                    7.42  1890 72.24 23.2 8221   bc  7.42    
## textile.weavers            6.69  4443 31.36 33.3 8267   bc  6.69    
## textile.labourers          6.74  3485 39.48 28.8 8278   bc  6.74    
## tool.die.makers           10.09  8043  1.50 42.5 8311   bc  10.0   9
## machinists                 8.81  6686  4.28 44.2 8313   bc  8.81    
## sheet.metal.workers        8.40  6565  2.30 35.9 8333   bc   8.4    
## welders                    7.92  6477  5.17 41.8 8335   bc  7.92    
## auto.workers               8.43  5811 13.62 35.9 8513   bc  8.43    
## aircraft.workers           8.78  6573  5.78 43.7 8515   bc  8.78    
## electronic.workers         8.76  3942 74.54 50.8 8534   bc  8.76    
## radio.tv.repairmen        10.29  5449  2.92 37.2 8537   bc  10.2   9
## sewing.mach.operators      6.38  2847 90.67 28.2 8563   bc  6.38    
## auto.repairmen             8.10  5795  0.81 38.1 8581   bc   8.1    
## aircraft.repairmen        10.10  7716  0.78 50.3 8582   bc  10.1    
## railway.sectionmen         6.67  4696  0.00 27.3 8715   bc  6.67    
## electrical.linemen         9.05  8316  1.34 40.9 8731   bc  9.05    
## electricians               9.93  7147  0.99 50.2 8733   bc  9.93    
## construction.foremen       8.24  8880  0.65 51.1 8780   bc  8.24    
## carpenters                 6.92  5299  0.56 38.9 8781   bc  6.92    
## masons                     6.60  5959  0.52 36.2 8782   bc   6.6    
## house.painters             7.81  4549  2.46 29.9 8785   bc  7.81    
## plumbers                   8.33  6928  0.61 42.9 8791   bc  8.33    
## construction.labourers     7.52  3910  1.09 26.5 8798   bc  7.52    
## pilots                    12.27 14032  0.58 66.1 9111 prof  12.2   7
## train.engineers            8.49  8845  0.00 48.9 9131   bc  8.49    
## bus.drivers                7.58  5562  9.47 35.9 9171   bc  7.58    
## taxi.drivers               7.93  4224  3.59 25.1 9173   bc  7.93    
## longshoremen               8.37  4753  0.00 26.1 9313   bc  8.37    
## typesetters               10.00  6462 13.58 42.2 9511   bc    10    
## bookbinders                8.55  3617 70.87 35.2 9517   bc  8.55

2.5 Ma trận tương quan

m <- cor (Pre[,c("e","i","w")])
print(m)
##            e          i           w
## e 1.00000000  0.5775802  0.06185286
## i 0.57758023  1.0000000 -0.44105927
## w 0.06185286 -0.4410593  1.00000000

3 BÀI TẬP TUẦN 2

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

  • Ta sẽ gọi dữ liệu longley

  • Sau đó sẽ gán dataset longley vào lony

-Sử dụng lệnh names để đặt tên cho 7 biến trong bộ dữ liệu lony

data("longley")
l <- longley
names(l) <- c('Gd','G','U','A','P','Y','E')

3.2 Tính toán các thống kê biến

3.2.1 Dùng hàm summary

Dùng hàm summary để tóm tắt thống kê cho toàn bộ dữ liệu. Qua đó, ta có thể đọc được các giá trị về giá trị nhỏ nhất, giá trị lớn nhất, tứ phân vị, trung bình, trung vị cho từng biến có trong bộ data. Nếu muốn quan sát riêng, thì ta dùng $ để gọi biến có trong data đó.

summary(l$G)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   234.3   317.9   381.4   387.7   454.1   554.9
  • Khi thực hiện dòng lệnh summary(l$G) ta thu được giá trị nhỏ nhất của tổng sản lưởng quốc gia là 234.3, giá trị lớn nhất là 554.9, mức trung bình là 387.7, có 25% tống sản lượng quốc nhỏ hơn 317.9, có 50 % tổng sản lượng quốc gia dưới 381.4 và có 75% tổng sản lượng quốc gia nhỏ hơn 454.1 (tính theo đơn vị nghìn đô).
summary(l$E)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   60.17   62.71   65.50   65.32   68.29   70.55
  • Tương tự, dòng lệnh summary(l$E) cho ta biết được số người trung bình có việc làm nhỏ nhất là 60.17, số người trung bình có việc làm lớn nhất là 70.55, mức trung bình là 65.32, có 25% số người trung bình có việc làm dưới 62,71, có 50% số người trung bình có việc làm dưới 65.5 và có 75% số người trung bình có việc làm dưới 68.29
summary(l$U)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   187.0   234.8   314.4   319.3   384.2   480.6
  • Số người thất nghiệp trung bình nhỏ nhất là 187, lớn nhất là 480.6, có 25% số người thất nghiệp trung bình nhỏ hơn 234.8, có 50% số người thất nghiệp trung bình nhỏ hơn 314.4, có 75% số người thất nghiệp trung bình nhỏ hơn 319.3. Số người thất nghiệp trung bình trong khảo sát là 319.3.

3.2.2 Các hàm mean để tính trung bình, var để tính phương sai, quantile

mean(l$G)
## [1] 387.6984
mean(l$E)
## [1] 65.317

Tổng sản lượng quốc gia trung bình là 387.6984. Tổng số người có việc làm trung bình là 65.317

var (l$G)
## [1] 9879.354
var (l$U)
## [1] 8732.234

9879.354 đại diện cho mức độ phân tán của các giá trị về sản lượng quốc gia quanh giá trị trung bình; 8732.234 đại diện cho mức độ phân tán của các giá trị số người thất nghiệp quanh giá trị trung bình.

sd(l$Gd)
## [1] 10.79155

10.79155: Độ lệch chuẩn đo lường mức độ phân tán của các giá trị của biến Gd.

quantile(l$G, 0.65)
##      65% 
## 436.8718
quantile(l$A, 0.46)
##    46% 
## 263.05

Có 65% quốc gia có tổng sản lượng quốc gia dưới mức 436.8718. Có 46% quốc gia có số người trong lực lượng vũ trang dưới 263.05

3.2.3 Dùng hàm sum

Dùng sum để tính toán tổng chỉ số giảm phát giá ngầm định GNP, sản phẩm quốc gia, số người thất nghiệp, số người trong lực lượng vũ trang, dân số ‘phi thể chế hóa’≥ 14 tuổi, số người có việc làm.

sum(l$Gd)
## [1] 1626.9
sum(l$G)
## [1] 6203.175
sum(l$E)
## [1] 1045.072
sum(l$A)
## [1] 4170.7
sum(l$U)
## [1] 5109.3
sum(l$P)
## [1] 1878.784

Qua đó, ta thấy được biến G (tổng sản lượng quốc gia) là cao nhất, thấp nhất là số người có việc làm

3.3 Phân tích sự khác biệt giữa số người có việc làm và số người thất nghiệp theo từng năm

3.4 Hàm aggregate - Toán tử %>%

3.4.1 Hàm aggregate

Hàm aggregate giúp tổng hợp dữ liệu theo nhóm. Các câu lệnh phía trên sẽ trả về kết quả tổng hợp mức chỉ số giảm phát giá ngầm định GNP, sản phẩm quốc gia, số người thất nghiệp, số người trong lực lượng vũ trang, dân số ‘phi thể chế hóa’≥ 14 tuổi, số người có việc làm theo các năm khác nhau

aggregate(l$Y,list(l$Gd),FUN ='mean')
##    Group.1    x
## 1     83.0 1947
## 2     88.2 1949
## 3     88.5 1948
## 4     89.5 1950
## 5     96.2 1951
## 6     98.1 1952
## 7     99.0 1953
## 8    100.0 1954
## 9    101.2 1955
## 10   104.6 1956
## 11   108.4 1957
## 12   110.8 1958
## 13   112.6 1959
## 14   114.2 1960
## 15   115.7 1961
## 16   116.9 1962

Kết quả trên hiển thị cho mức chỉ số giảm phát giá ngầm định GNP theo từng năm. Năm có chỉ số thấp nhất là năm 1947 với 83, năm có chỉ số cao nhất là năm 1962 với 116.9

aggregate(l$Y,list(l$G),FUN ='mean')
##    Group.1    x
## 1  234.289 1947
## 2  258.054 1949
## 3  259.426 1948
## 4  284.599 1950
## 5  328.975 1951
## 6  346.999 1952
## 7  363.112 1954
## 8  365.385 1953
## 9  397.469 1955
## 10 419.180 1956
## 11 442.769 1957
## 12 444.546 1958
## 13 482.704 1959
## 14 502.601 1960
## 15 518.173 1961
## 16 554.894 1962

Kết quả trên hiển thị cho mức tổng sản lượng quốc gia theo từng năm. Năm có tổng sản lượng thấp nhất là năm 1947 với 234.289, năm có tổng sản lượng cao nhất là năm 1962 với 554.894

aggregate(l$Y,list(l$E),FUN ='mean')
##    Group.1    x
## 1   60.171 1949
## 2   60.323 1947
## 3   61.122 1948
## 4   61.187 1950
## 5   63.221 1951
## 6   63.639 1952
## 7   63.761 1954
## 8   64.989 1953
## 9   66.019 1955
## 10  66.513 1958
## 11  67.857 1956
## 12  68.169 1957
## 13  68.655 1959
## 14  69.331 1961
## 15  69.564 1960
## 16  70.551 1962
aggregate(l$Y,list(l$U),FUN ='mean')
##    Group.1    x
## 1    187.0 1953
## 2    193.2 1952
## 3    209.9 1951
## 4    232.5 1948
## 5    235.6 1947
## 6    282.2 1956
## 7    290.4 1955
## 8    293.6 1957
## 9    335.1 1950
## 10   357.8 1954
## 11   368.2 1949
## 12   381.3 1959
## 13   393.1 1960
## 14   400.7 1962
## 15   468.1 1958
## 16   480.6 1961
aggregate(l$Y,list(l$A),FUN ='mean')
##    Group.1    x
## 1    145.6 1948
## 2    159.0 1947
## 3    161.6 1949
## 4    165.0 1950
## 5    251.4 1960
## 6    255.2 1959
## 7    257.2 1961
## 8    263.7 1958
## 9    279.8 1957
## 10   282.7 1962
## 11   285.7 1956
## 12   304.8 1955
## 13   309.9 1951
## 14   335.0 1954
## 15   354.7 1953
## 16   359.4 1952
aggregate(l$Y,list(l$P),FUN ='mean')
##    Group.1    x
## 1  107.608 1947
## 2  108.632 1948
## 3  109.773 1949
## 4  110.929 1950
## 5  112.075 1951
## 6  113.270 1952
## 7  115.094 1953
## 8  116.219 1954
## 9  117.388 1955
## 10 118.734 1956
## 11 120.445 1957
## 12 121.950 1958
## 13 123.366 1959
## 14 125.368 1960
## 15 127.852 1961
## 16 130.081 1962

3.5 Vẽ đồ thị

  • Chúng ta tạo biểu đồ histogram của biến los để xem phân bố dữ liệu, ta dùng lênh hist
hist(l$G)

hist(l$E,breaks =3.5)

hist(l$Gd,counts =2)
## Warning in plot.window(xlim, ylim, "", ...): "counts" is not a graphical
## parameter
## Warning in title(main = main, sub = sub, xlab = xlab, ylab = ylab, ...):
## "counts" is not a graphical parameter
## Warning in axis(1, ...): "counts" is not a graphical parameter
## Warning in axis(2, at = yt, ...): "counts" is not a graphical parameter

4 BÀI TẬP TUẦN 1

Giải thích: Data(longley): Longley’s Economic Regression Data

Description: The Longley dataset contains various US macroeconomic variables that are known to be highly collinear. It has been used to appraise the accuracy of least squares routines.

4.1 Giải thích các biến

  1. GNP.deflator: Chỉ số giảm phát giá ngầm định GNP (1954 = 100).

  2. GNP: Tổng sản phẩm quốc gia.

  3. Unemployed: số người thất nghiệp.

  4. Armed.Forces: số người trong lực lượng vũ trang.

  5. Population: dân số ‘phi thể chế hóa’≥ 14 tuổi

  6. Year: số năm (thời gian)

  7. Employed: số người có việc làm.

4.1.1 Ta chạy dữ liệu cho dataset longley

data("longley")

4.1.2 Gán dữ liệu longley vào l

l <- longley

Sau đó ta thể hiện cấu trúc của dataset (longley) gồm mấy biến và có những biến nào:

4.1.3 Cấu trúc của dataset(longley)

str(longley)
## 'data.frame':    16 obs. of  7 variables:
##  $ GNP.deflator: num  83 88.5 88.2 89.5 96.2 ...
##  $ GNP         : num  234 259 258 285 329 ...
##  $ Unemployed  : num  236 232 368 335 210 ...
##  $ Armed.Forces: num  159 146 162 165 310 ...
##  $ Population  : num  108 109 110 111 112 ...
##  $ Year        : int  1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 ...
##  $ Employed    : num  60.3 61.1 60.2 61.2 63.2 ...

4.1.4 Ta đặt tên cho các biến trong dataset vừa khai báo:

names(l) <- c('Gd','G','U','A','P','Y','E')

4.1.5 Sau đó, lấy 6 dòng đầu tiên của data sets

head(l)
##        Gd       G     U     A       P    Y      E
## 1947 83.0 234.289 235.6 159.0 107.608 1947 60.323
## 1948 88.5 259.426 232.5 145.6 108.632 1948 61.122
## 1949 88.2 258.054 368.2 161.6 109.773 1949 60.171
## 1950 89.5 284.599 335.1 165.0 110.929 1950 61.187
## 1951 96.2 328.975 209.9 309.9 112.075 1951 63.221
## 1952 98.1 346.999 193.2 359.4 113.270 1952 63.639

4.1.6 Gán biến Y trong data(l) vào YEAR

Year <- l$Y
Year
##  [1] 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961
## [16] 1962

4.1.7 Ta lấy dữ liệu của biến year từ năm 1950 đến năm 1960

Year50_60 <- Year[Year>1950&Year<1960]
Year50_60
## [1] 1951 1952 1953 1954 1955 1956 1957 1958 1959

4.1.8 Gán biến E trong data(l) vào EMPLOYED

EMPLOYED <- l$E
EMPLOYED
##  [1] 60.323 61.122 60.171 61.187 63.221 63.639 64.989 63.761 66.019 67.857
## [11] 68.169 66.513 68.655 69.564 69.331 70.551

4.1.9 Ta lấy dữ liệu của biến Year có số năm lớn hơn 1955 và biến Employed mà số người có việc làm trên 62 người

YEAR55EMPLOYED62 <- l[l$Y>1955|l$E>62,]
YEAR55EMPLOYED62
##         Gd       G     U     A       P    Y      E
## 1951  96.2 328.975 209.9 309.9 112.075 1951 63.221
## 1952  98.1 346.999 193.2 359.4 113.270 1952 63.639
## 1953  99.0 365.385 187.0 354.7 115.094 1953 64.989
## 1954 100.0 363.112 357.8 335.0 116.219 1954 63.761
## 1955 101.2 397.469 290.4 304.8 117.388 1955 66.019
## 1956 104.6 419.180 282.2 285.7 118.734 1956 67.857
## 1957 108.4 442.769 293.6 279.8 120.445 1957 68.169
## 1958 110.8 444.546 468.1 263.7 121.950 1958 66.513
## 1959 112.6 482.704 381.3 255.2 123.366 1959 68.655
## 1960 114.2 502.601 393.1 251.4 125.368 1960 69.564
## 1961 115.7 518.173 480.6 257.2 127.852 1961 69.331
## 1962 116.9 554.894 400.7 282.7 130.081 1962 70.551

4.1.10 Chia dữ liệu YEAR thành 4 tố và lập bảng tần số

cut(Year,4)
##  [1] (1947,1951] (1947,1951] (1947,1951] (1947,1951] (1951,1954] (1951,1954]
##  [7] (1951,1954] (1951,1954] (1954,1958] (1954,1958] (1954,1958] (1954,1958]
## [13] (1958,1962] (1958,1962] (1958,1962] (1958,1962]
## Levels: (1947,1951] (1951,1954] (1954,1958] (1958,1962]
table(cut(Year,4))
## 
## (1947,1951] (1951,1954] (1954,1958] (1958,1962] 
##           4           4           4           4

Giải thích: trong bảng tần số trên của biến YEAR thì các nhóm (1947,1951],(1951,1954],(1954,1958],(1958,1962] đều có 4 giá trị chiếm tỷ trọng 25%

4.1.11 Lập bảng tần số của YEAR được chia thành 4 tố với lần lượt các biến GNP.deflator, GNP, Unemployed và Employed

table(cut(Year,4),l$Gd)
##              
##               83 88.2 88.5 89.5 96.2 98.1 99 100 101.2 104.6 108.4 110.8 112.6
##   (1947,1951]  1    1    1    1    0    0  0   0     0     0     0     0     0
##   (1951,1954]  0    0    0    0    1    1  1   1     0     0     0     0     0
##   (1954,1958]  0    0    0    0    0    0  0   0     1     1     1     1     0
##   (1958,1962]  0    0    0    0    0    0  0   0     0     0     0     0     1
##              
##               114.2 115.7 116.9
##   (1947,1951]     0     0     0
##   (1951,1954]     0     0     0
##   (1954,1958]     0     0     0
##   (1958,1962]     1     1     1

Giải thích: bảng tần số của biến Year theo biến GNP.deflator thì nhóm năm từ (1947,1951] có chỉ số giảm phát giá ngầm định GNP từ 83 đến 89.5, nhóm năm từ (1951,1954] có chỉ số giảm phát giá ngầm định GNP từ 96.2 đến 100, nhóm năm từ (1954,1958] có chỉ số giảm phát giá ngầm định GNP từ 101.2 đến 110.8, nhóm năm từ (1958,1962] có chỉ số giảm phát giá ngầm định GNP từ 112.6 đến 116.9

table(cut(Year,4),l$G)
##              
##               234.289 258.054 259.426 284.599 328.975 346.999 363.112 365.385
##   (1947,1951]       1       1       1       1       0       0       0       0
##   (1951,1954]       0       0       0       0       1       1       1       1
##   (1954,1958]       0       0       0       0       0       0       0       0
##   (1958,1962]       0       0       0       0       0       0       0       0
##              
##               397.469 419.18 442.769 444.546 482.704 502.601 518.173 554.894
##   (1947,1951]       0      0       0       0       0       0       0       0
##   (1951,1954]       0      0       0       0       0       0       0       0
##   (1954,1958]       1      1       1       1       0       0       0       0
##   (1958,1962]       0      0       0       0       1       1       1       1

Giải thích: bảng tần số của biến Year theo biến GNP thì nhóm năm từ (1947,1951] có tổng sản phẩm quốc gia từ 234.239 đến 584.599, nhóm năm từ (1951,1954] có tổng sản phẩm quốc gia từ 328.975 đến 365.385, nhóm năm từ (1954,1958] có tổng sản phẩm quốc gia từ 397.469 đến 444.546, nhóm năm từ (1958,1962] có tổng sản phẩm quốc gia từ 482.704 đến 554.894

table(cut(Year,4),l$U)
##              
##               187 193.2 209.9 232.5 235.6 282.2 290.4 293.6 335.1 357.8 368.2
##   (1947,1951]   0     0     0     1     1     0     0     0     1     0     1
##   (1951,1954]   1     1     1     0     0     0     0     0     0     1     0
##   (1954,1958]   0     0     0     0     0     1     1     1     0     0     0
##   (1958,1962]   0     0     0     0     0     0     0     0     0     0     0
##              
##               381.3 393.1 400.7 468.1 480.6
##   (1947,1951]     0     0     0     0     0
##   (1951,1954]     0     0     0     0     0
##   (1954,1958]     0     0     0     1     0
##   (1958,1962]     1     1     1     0     1

Giải thích: bảng tần số của biến Year theo biến Unemployed thì nhóm năm từ (1947,1951] có số người thất nghiệp là 232.5 , 235.6 , 335.1 , 368.2 ; nhóm năm từ (1951,1954] có số người thất nghiệp từ 187 đến 209.9 và 357.8, nhóm năm từ (1954,1958] có số người thất nghiệp từ 282.2 đến 293.6 và 468.1, nhóm năm từ (1958,1962] có số người thất nghiệp từ 381.3 đến 4007.7 và 480.6

table(cut(Year,4),l$E)
##              
##               60.171 60.323 61.122 61.187 63.221 63.639 63.761 64.989 66.019
##   (1947,1951]      1      1      1      1      0      0      0      0      0
##   (1951,1954]      0      0      0      0      1      1      1      1      0
##   (1954,1958]      0      0      0      0      0      0      0      0      1
##   (1958,1962]      0      0      0      0      0      0      0      0      0
##              
##               66.513 67.857 68.169 68.655 69.331 69.564 70.551
##   (1947,1951]      0      0      0      0      0      0      0
##   (1951,1954]      0      0      0      0      0      0      0
##   (1954,1958]      1      1      1      0      0      0      0
##   (1958,1962]      0      0      0      1      1      1      1

Giải thích: bảng tần số của biến Year theo biến Employed thì nhóm năm từ (1947,1951] có số người có việc làm là 60.171 đến 61.187 ; nhóm năm từ (1951,1954] có số người có việc làm từ 187 đến 63.221 và 64.989, nhóm năm từ (1954,1958] có số người có việc làm từ 66.019 đến 68.169, nhóm năm từ (1958,1962] có số người có việc làm từ 68.655 đến 70.551

4.1.12 Ta chia dữ liệu của biến EMPLOYED và biến ARM thành 4 tổ và lập các bảng tần số phụ thuộc của biến EMPLOYED và ARM

4.1.12.1 Chia dữ liệu của biến EMPLOYED thành 4 tổ và lập bảng

cut(EMPLOYED,4)
##  [1] (60.2,62.8] (60.2,62.8] (60.2,62.8] (60.2,62.8] (62.8,65.4] (62.8,65.4]
##  [7] (62.8,65.4] (62.8,65.4] (65.4,68]   (65.4,68]   (68,70.6]   (65.4,68]  
## [13] (68,70.6]   (68,70.6]   (68,70.6]   (68,70.6]  
## Levels: (60.2,62.8] (62.8,65.4] (65.4,68] (68,70.6]
table(cut(EMPLOYED,4))
## 
## (60.2,62.8] (62.8,65.4]   (65.4,68]   (68,70.6] 
##           4           4           3           5

Giải thích: trong bảng tần số của biến Employed thì các nhóm (60.2,62.8],(62.8,65.4] đều có 4 giá trị (chiếm 25%) ;(65.4,68] có 3 giá trị (chiếm 18,75%),(68,70.6] có 5 giá trị (chiếm 31,25%)

4.1.13 Gán biến A của data(l) vào Arm, chia dữ liệu Arm thành 4 tổ và lập bảng

Arm <- l$A
cut(Arm,4)
##  [1] (145,199] (145,199] (145,199] (145,199] (306,360] (306,360] (306,360]
##  [8] (306,360] (252,306] (252,306] (252,306] (252,306] (252,306] (199,252]
## [15] (252,306] (252,306]
## Levels: (145,199] (199,252] (252,306] (306,360]

4.1.14 Ta chia dữ liệu của biến Arm thành 4 tổ bao gồm các tổ là (145,199], (199,252], (252,306], (306,360]. Sau đó ta lập bảng tần số để hiển thị giá trị của biến Arm từ các tổ đã phân

table(cut(Arm,4))
## 
## (145,199] (199,252] (252,306] (306,360] 
##         4         1         7         4

Giải thích: trong bảng tần số của biến Arm thì các nhóm (145,199],(306,360] đều có 4 giá trị (chiếm 25%) ;(199,252] có 1 giá trị (chiếm 6,25%),(252,306] có 7 giá trị (chiếm 43,75%)

4.1.15 Lập bảng tần số của dữ liệu EMPLOYED (số người có việc làm) với lần lượt các biến GNP (tổng sản phẩm quốc gia), Population (dân số)

##Bảng tần số giữ số người có việc làm với tổng sản lượng quốc gia

table(cut(l$E,4),cut(l$G,4))
##              
##               (234,314] (314,395] (395,475] (475,555]
##   (60.2,62.8]         4         0         0         0
##   (62.8,65.4]         0         4         0         0
##   (65.4,68]           0         0         3         0
##   (68,70.6]           0         0         1         4

Nhận xét:

  • Có tổng cộng 4 giá trị mà số người có việc làm nằm trong nhóm (60.2,62.8] chiếm 25%, Có 4 giá trị mà số người có việc làm nằm trong nhóm (62.8,65.4] chiếm 25%, Có 3 giá trị mà số người có việc làm nằm trong nhóm (65.4,68]chiếm 18,75%, Có 5 giá trị mà số người có việc làm nằm trong nhóm (68,70.6] chiếm 31,25%

  • Ở mỗi mức tổng sản lượng quốc gia đều có 4 giá trị nằm ở các mức là (234,314], (314,395], (395,475], (475,555] đều chiếm 25%

##Bảng tần số giữ số người có việc làm với dân số

table(cut(l$E,4),cut(l$P,4))
##              
##               (108,113] (113,119] (119,124] (124,130]
##   (60.2,62.8]         4         0         0         0
##   (62.8,65.4]         1         3         0         0
##   (65.4,68]           0         2         1         0
##   (68,70.6]           0         0         2         3

Nhận xét:

  • Có tổng cộng 4 giá trị mà số người có việc làm nằm trong nhóm (60.2,62.8] chiếm 25%, Có 4 giá trị mà số người có việc làm nằm trong nhóm (62.8,65.4] chiếm 25%, Có 3 giá trị mà số người có việc làm nằm trong nhóm (65.4,68]chiếm 18,75%, Có 5 giá trị mà số người có việc làm nằm trong nhóm (68,70.6] chiếm 25%

  • Có 2 mức có dân số từ (108,113] và từ (113,119] chiếm 5 (mỗi tổ sẽ có tỷ trọng là 31.25%), Có 2 mức có dân số từ (119,124] và từ (124,130] chiếm 3 (mỗi tổ sẽ có tỷ trọng là 18.75%)

##Tính toán tần suất bảng tần số
x=table(cut(l$Y,4),EMPLOYED)
prop.table(x)
##              EMPLOYED
##               60.171 60.323 61.122 61.187 63.221 63.639 63.761 64.989 66.019
##   (1947,1951] 0.0625 0.0625 0.0625 0.0625 0.0000 0.0000 0.0000 0.0000 0.0000
##   (1951,1954] 0.0000 0.0000 0.0000 0.0000 0.0625 0.0625 0.0625 0.0625 0.0000
##   (1954,1958] 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0625
##   (1958,1962] 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
##              EMPLOYED
##               66.513 67.857 68.169 68.655 69.331 69.564 70.551
##   (1947,1951] 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
##   (1951,1954] 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
##   (1954,1958] 0.0625 0.0625 0.0625 0.0000 0.0000 0.0000 0.0000
##   (1958,1962] 0.0000 0.0000 0.0000 0.0625 0.0625 0.0625 0.0625

4.1.16 Lấy ra các dòng có biến YEAR > 1955 hoặc UNEMPLOYED = 290.4

YEAR55UNEMPLOYED290.4 <- l[l$Y>1955|l$U==290.4,]
dim(YEAR55UNEMPLOYED290.4)
## [1] 8 7

Nhận xét: có số năm lớn hơn 1955 chiếm 8, số người thất nghiệp trong những năm lơn hơn 1955 và có số người gần bằng 290 chiếm 10

#Xem dữ liệu dòng 12 biến ARM
l$A[12]
## [1] 263.7

4.1.17 Lấy ngẫu nhiên 2 dòng

l1 <- l[sample(nrow(l),2),]
l1
##         Gd       G     U     A       P    Y      E
## 1955 101.2 397.469 290.4 304.8 117.388 1955 66.019
## 1950  89.5 284.599 335.1 165.0 110.929 1950 61.187

4.1.18 Tính logarit của các biến EMPLOYED, UNEMPLOYED, ARM trong data(l)

l$logE <- log(l$E)
l$logE
##  [1] 4.099713 4.112872 4.097191 4.113935 4.146637 4.153226 4.174218 4.155142
##  [9] 4.189943 4.217403 4.221990 4.197397 4.229094 4.242247 4.238892 4.256336
l$logU <- log(l$U)
l$logU
##  [1] 5.462135 5.448890 5.908626 5.814429 5.346631 5.263726 5.231109 5.879974
##  [9] 5.671259 5.642616 5.682218 6.148682 5.943586 5.974064 6.175035 5.993213
l$logA <- log(l$A)
l$logA
##  [1] 5.068904 4.980863 5.085124 5.105945 5.736250 5.884436 5.871272 5.814131
##  [9] 5.719656 5.654942 5.634075 5.574812 5.542048 5.527045 5.549854 5.644386