1 BÀI TẬP VỀ NHÀ TUẦN 4

1.1 Bộ dữ liệu

Tương tự như các tuần trước, em sẽ thực hiện các thao tác liên quan đến trực quan hóa dữ liệu. Đầu tiên để làm được thao tác này cần gọi lên các packages cần thiết. Sau đó, lấy dữ liệu gán qua một bộ dữ liệu mới có tên là BUK. lệnh datatable trong packages “DT” sẽ hiển thị bảng dữ liệu mà ta có, với lệnh options = list(scrollX = TRUE) để kích hoạt cuộn ngang thì bài báo cáo trở nên gọn gàng và đẹp hơn.

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()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(DT)
## Warning: package 'DT' was built under R version 4.2.3
library(Ecdat)
## Warning: package 'Ecdat' was built under R version 4.2.3
## Loading required package: Ecfun
## Warning: package 'Ecfun' was built under R version 4.2.3
## 
## Attaching package: 'Ecfun'
## 
## The following object is masked from 'package:base':
## 
##     sign
## 
## 
## Attaching package: 'Ecdat'
## 
## The following object is masked from 'package:datasets':
## 
##     Orange
library(ggplot2)
library(scales)
## Warning: package 'scales' was built under R version 4.2.3
## 
## Attaching package: 'scales'
## 
## The following object is masked from 'package:purrr':
## 
##     discard
## 
## The following object is masked from 'package:readr':
## 
##     col_factor
library(utf8)
## Warning: package 'utf8' was built under R version 4.2.3
BUK <- BudgetUK
datatable(BUK, options = list(scrollX = TRUE))

Để thao tác trên các biến, cũng như các tuần trước em thực hiện đổi tên lại mục đích là làm cho các biến gọn gàng và dễ thực hiện hơn: wfood = ‘TP’, wfuel = ‘NL’, wcloth = ‘QA’, walc =‘R’, wtrans = ‘PT’, wother = ‘K’, totexp = ‘TC’, income = ‘TT’, age = ‘T’, children = ‘TE’. Và thêm một cột biến mới vào dữ liệu bằng cách, phân tổ biến tuổi của chủ hộ gia đình 3 tổ (độ tuổi [19-30] gọi là trẻ tuổi, độ tuổi (30-50] gọi là trung niên, độ tuổi (50-60] gọi là cao tuổi). Ngoài ra, em còn biến đổi thêm các cột mới như là TP1, NL1, QA1, R1, PT1, K1 chính là các mức tiền chi tiêu cho thực phẩm, nhiên liệu, quần áo, rượu, phương tiện và các chi tiêu khác bằng cách lấy tỉ lệ % ban đầu mà bộ data cung cấp nhân cho tổng chi tiêu.

names(BUK) <- c('TP','NL','QA','R','PT','K','TC','TT','T','TE')
BUK$Tcoded <- cut(BUK$T, breaks=c(18.95,30,50,60),labels=c('trẻ tuổi','trung niên','cao tuổi'))
BUK <- BUK %>% mutate(across(c(TP, NL, QA, R, PT, K),~ . * TC,.names = "{.col}1"))
datatable(BUK, options = list(scrollX = TRUE, pageLength = 5))

1.2 Đồ thị Scatter lot

1.2.1 Biểu đồ phân tán thể hiện mối quan hệ giữa tổng thu nhập và tổng chi tiêu

BUK %>% ggplot(aes(x = TT, y =TC )) +
  geom_point(color="green") +
  geom_smooth(formula = y ~ x, method = "lm", color= "pink") +
  xlab("Tổng thu nhập") +
  ylab("Tổng chi tiêu") +
  ggtitle("ĐỒ THỊ TỔNG THU NHẬP VÀ TỔNG CHI TIÊU CÁC HỘ GIA ĐÌNH")

cor(BUK$TT,BUK$TC)
## [1] 0.4487403

Nhận xét: Đường hồi quy dốc và thẳng cho thấy có mối quan hệ tuyến tính giữa hai biến này, xu hướng khi tổng thu nhập tăng lên thì tổng chi tiêu của một số hộ gia đình tăng theo. Khi tính hệ số tương quan hai biến là 0.4487403 mức tương quan này tương đối thấp và nó cũng được thể hiện qua việc tập trung các điểm dày đặc ở phần đầu đường hồi quy.

1.3 Đồ thị scatter cho tổng thu nhập và chi tiêu dựa trên từng nhóm tuổi

BUK %>% ggplot(aes(x=TT,y=TC,shape=Tcoded))+
  geom_point(color="green",size=2)+
  labs(x="Tổng thu nhập",y="Tổng chi tiêu",title="ĐỒ THỊ TỔNG THU NHẬP VÀ TỔNG CHI TIÊU THEO NHÓM TUỔI ( Shape)")

Nhận xét: Đồ thị biểu thị các chấm tròn là thuộc nhóm trẻ tuổi, hình tam giác là độ tuổi trung niên, và ô vuông là nhóm cao tuổi. Để nhận xét chi tiết sự phụ thuộc của chi tiêu vào thu nhập của từng nhóm thì ta cần vẽ thêm đường hồi quy.

1.4 Đồ thị scatter plot đa biến

Đoạn mã sau sẽ tạo ra một biểu đồ ma trận tương quan với đồ thị phân tán (scatterplots) trong tam giác trên và đồ thị histogram trên đường chéo chính. Đối số histogram = TRUE đảm bảo rằng đồ thị histogram được bao gồm trong biểu đồ. Đối số pch = 19 thiết lập ký hiệu được sử dụng để vẽ các điểm trong đồ thị phân tán.

library("PerformanceAnalytics")
## Loading required package: xts
## Loading required package: zoo
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
## 
## ######################### Warning from 'xts' package ##########################
## #                                                                             #
## # The dplyr lag() function breaks how base R's lag() function is supposed to  #
## # work, which breaks lag(my_xts). Calls to lag(my_xts) that you type or       #
## # source() into this session won't work correctly.                            #
## #                                                                             #
## # Use stats::lag() to make sure you're not using dplyr::lag(), or you can add #
## # conflictRules('dplyr', exclude = 'lag') to your .Rprofile to stop           #
## # dplyr from breaking base R's lag() function.                                #
## #                                                                             #
## # Code in packages is not affected. It's protected by R's namespace mechanism #
## # Set `options(xts.warn_dplyr_breaks_lag = FALSE)` to suppress this warning.  #
## #                                                                             #
## ###############################################################################
## 
## Attaching package: 'xts'
## The following objects are masked from 'package:dplyr':
## 
##     first, last
## 
## Attaching package: 'PerformanceAnalytics'
## The following object is masked from 'package:graphics':
## 
##     legend
mydata <- BUK[,c("TP1","NL1","QA1","R1","PT1","K1","TT","TC")]
chart.Correlation(mydata, histogram=TRUE, pch=19)

Nhìn vào đồ thị trên thì ta có thể nhận xét được hệ số tương quan của từng cặp biến với nhau ví dụ hệ số tương quan giữa biến TP1 và TC là 0.61 cho thấy mức độ tương quan tương đối giữa hai biến này và hai biến này cũng có mối quan hệ tuyên tính khi đường hồi quy trong đồ thị là đường thẳng dốc. Tóm lại, nhìn vào đồ thị trên ta có thể nhìn xem giữa các biến có mối quan hệ tuyến tính hay không. mức độ tương quan.

1.5 Biểu đồ ma trận tương quan

Ma trận tương quan cho các biến cụ thể (TP1, NL1, QA1, R1, PT1, K1, TC, TT, T, TE) trong khung dữ liệu BUK. Hàm cor() tính toán ma trận tương quan cho các biến đã chọn trong dữ liệu BUK. Hàm as.table() chuyển đổi ma trận tương quan thành định dạng bảng. Hàm as.data.frame() chuyển đổi bảng thành dữ liệu. Hàm colnames() đặt tên cột của khung dữ liệu là “Var1”, “Var2” và “Correlation”. Hàm geom_tile() thêm các ô vào đồ thị, biểu thị sự tương quan giữa các biến. Hàm geom_text() thêm nhãn văn bản vào các ô, hiển thị giá trị tương quan đã làm tròn. Hàm scale_fill_gradient2() đặt gradient màu cho các ô, từ màu xanh (tương quan thấp) đến màu đỏ (tương quan cao), với màu trung điểm là màu trắng. Hàm theme_minimal() đặt kiểu đồ thị với giao diện tối giản

cor_matrix <- cor(BUK[, c("TP1","NL1","QA1","R1","PT1","K1","TC","TT","T","TE")])
cor_data <- as.data.frame(as.table(cor_matrix))
colnames(cor_data) <- c("Var1", "Var2", "Correlation")
ggplot(data = cor_data, aes(x = Var1, y = Var2)) +
  geom_tile(aes(fill = Correlation)) +
  geom_text(aes(label = round(Correlation, 2)), color = "white", size = 3) +
  scale_fill_gradient2(low = "green", mid = "red", high = "orange", midpoint = 0) +
  theme_minimal()

Dựa vào ma trận tương quan của các biến, ta có thể đọc và kết luận được mức độ tương quan mạnh yếu giữa các biến khác nhau: Hệ số ma trận tương quan của biến tổng chi tiêu (TC) và biến thực phẩm (TP1) là 0.61 con số này cho thấy giá trị này là dương và có giá trị tương đối cao, điều này cho thấy rằng mức chi tiêu cho thực phẩm có xu hướng tăng cùng với mức tổng chi tiêu của hộ gia đình. Hệ số ma trận tương quan của biến tổng chi tiêu (TC) và biến mức chi ngân sách cho nhiên liệu(NL1) là 0.3 giá trị này là dương và có giá trị tương đối trung bình, điều này cho thấy rằng mức chi tiêu cho nhiên liệu có xu hướng tăng cùng với mức tổng chi tiêu của hộ gia đình, tuy nhiên mức độ tương quan không mạnH. Tương tự ta có thể đọc được kết quả của từng cặp biến khác để phù hợp kết quả nghiên cứu.

1.6 Biểu đồ cột

table(BUK$Tcoded)
## 
##   trẻ tuổi trung niên   cao tuổi 
##        400       1046         73
BUK %>% ggplot(aes(Tcoded))+
  geom_bar(fill="purple")+
  xlab("Nhóm tuổi")+
  ylab("Số hộ gia đình")

Trong đoạn mã trên, chúng ta sử dụng dữ liệu từ dataframe BUK và tạo biểu đồ cột bằng cách sử dụng ggplot(). Biến Tcoded được sử dụng trong aes() để xác định trục x của biểu đồ cột. Hàm geom_bar() được sử dụng để tạo các cột trong biểu đồ. Chúng ta đặt màu cho các cột bằng fill = “skyblue”. xlab() và ylab() được sử dụng để đặt nhãn cho trục x và trục y tương ứng. Đoạn mã trên sẽ tạo ra biểu đồ cột với trục x là “Nhóm tuổi” và trục y là “Số hộ gia đình”. Màu sắc của cột được đặt là “skyblue”. Nhìn vào đồ thị thì ta có thể nhận thấy nhóm tuổi trung niên chiếm số đông nằm trong khoảng hơn 1000 hộ gia đình, tiếp theo là nhóm tuổi trẻ tuổi và ít nhất là nhóm cao tuổi. Để tính cụ thể thì ta sẽ dùng lệnh table ta có thể tính chính xác được trong bộ data có 1046 hộ gia đình có chủ hộ thuộc nhóm tuổi trung niên, có 400 chủ hộ thuộc nhóm trẻ tuổi và nhóm cao tuổi chỉ có 73 người.

Biểu đồ cột ngang

BUK %>% count(Tcoded) %>% 
  mutate(pc=percent(n/sum(n)),accuracy=0.01) %>% 
  ggplot(aes(x=Tcoded,y=n))+
  geom_col(fill="yellow")+
  geom_text(aes(label=pc), color="black",hjust=1.25,size=5)+
  labs(x = "Nhóm tuổi", y = "Số hộ gia đình")+
  coord_flip()

Biểu đồ cột đôi

df <- BUK %>% count(Tcoded,TE) %>% mutate(pc=prop.table(n))
ggplot(df, aes(x = Tcoded, y = n, fill = factor(TE))) +
  geom_col(position = "dodge") +
  geom_text(aes(label=percent(pc, accuracy = .01)), position = position_dodge(1), vjust = -.5, size = 3)+
  labs(title = "Biểu đồ cột đôi",
       x = "Nhóm tuổi",
       y = "Số lượng",
       fill = "TE") +
  theme_minimal()

Một dạng khác của biểu đồ cột thì biểu đồ cột đôi cho ta so sánh được ở cùng một nhóm tuổi có sự khác nhau về số lượng hộ gia đình có 1 con và 2 con là như thế nào. Ở nhóm trẻ tuổi thì số lượng hộ gia đình có hai con ít hơn và ít hơn xấp xỉ 2%, ở nhóm tuổi trung niên thì số lượng hộ gia đình có hai con nhiều hơn và nhiều hơn 25.42%, ở nhóm cao tuổi thì số lượng hộ gia đình có 1 con cao hơn và cao hơn gần gấp 2 lần số hộ gia đình có 2 con.

1.7 Biểu đồ Pie chart

BUK_summary <- BUK %>%
  group_by(Tcoded) %>%
  summarise(n = n()) %>%
  mutate(percentage = n/sum(n))
ggplot(BUK_summary, aes(x = "", y = percentage, fill = Tcoded)) +
  geom_bar(stat = "identity", width = 1) +
  geom_text(aes(label = paste0(round(percentage*100), "%")), position = position_stack(vjust = 0.5))+
  coord_polar("y", start = 0) +
  scale_fill_manual(values = c("red", "black", "pink"), name = "Nhóm tuổi") +
  labs(title = "BIỂU ĐỒ PHÂN BỐ NHÓM TUỔI") +
  theme_minimal() +
  theme(legend.position = "bottom")

Giải thích: Em tính tỷ lệ phần trăm của mỗi nhóm Tcoded bằng cách sử dụng group_by, summarise, và mutate từ gói dplyr. ggplot() để tạo một đối tượng biểu đồ với aes(). geom_bar(stat = “identity”, width = 1) để vẽ các thanh trong biểu đồ tròn. Tham số stat = “identity” cho phép sử dụng giá trị y đã được tính toán. Tham số width = 1 xác định chiều rộng của các thanh. coord_polar(“y”, start = 0) để chuyển sang hệ tọa độ polar và đặt góc bắt đầu là 0. scale_fill_manual() để tùy chỉnh màu sắc cho các nhóm Tcoded. labs() để đặt tiêu đề cho biểu đồ. theme_minimal() để chọn giao diện biểu đồ là minimal. theme(legend.position = “bottom”) để di chuyển chú thích xuống dưới biểu đồ.

1.8 Biểu đồ Boxplots

data <- BUK[,c("TP1")]
boxplot(data)

ggplot(BUK, aes(Tcoded, TP1, colour = Tcoded)) + geom_boxplot(show.legend = F)

Biểu đồ hộp cho ta biết được tứ phân vị, các điểm ngoại lai, dự đoán được xem có phân phối chuẩn hay không. Nghĩa là chúng ta sẽ có 50% số quan sát nằm trong khoảng từ phân vị thứ nhất Q1 đến phân vị thứ ba Q3 . Còn Q2 chính là trung vị (median). Nếu Q2 – Q1 > Q3 – Q2 thì phân phối sẽ méo về phía dương (positive skewness) và ngược lại. Nếu Q2 nằm chính giữa thì chúng ta có phân phối chuẩn.ví dụ trên ta có thể đọc được mức chi tiêu trung bình dành cho thực phẩm ở nhóm cao tuổi là cao nhất, ở nhóm trẻ tuổi là thấp nhất. Ở nhóm cao tuổi sẽ có phân phối méo về phía dương. Và nhóm trẻ tuổi gần như là có phân phối chuẩn.

2 BÀI TẬP VỀ NHÀ TUẦN 3

2.1 Lời mở đầu

Bộ data mà tuần này tôi đưa đến cho người xem báo cáo đó là bộ dataset “Journals” nằm trong package AER. Nó cung cấp cho ta thông tin về việc đăng ký tạp chí kinh tế ỏ thư viện Hoa Kỳ vào khoảng năm 2000.

Đây là bộ dữ liệu chứa 180 quan sát với 10 biến bao gồm:

title: tiêu đề

publisher: tên nhà xuất bản

society: yếu tố xã hội. Có lẽ nào tạp chí được xuất bản bởi một tác giả học thuật làm việc ở xã hội

price: giá mà khi ta đăng ký sách tại thư viện

pages: số trang giấy

charpp: ký tự ở trên trang

ciations: tổng số trích dẫn

foundingyear: năm tạp chí được thành lập

subs: số lượng đăng ký ở thư viện

field: yếu tố về mô tả thực địa(địa bàn trên thực tế)

2.2 Thục hành dữ liệu

2.2.1 Đầu tiên tôi sẽ gọi bộ dữ liệu Journals trong package AER bằng các lệnh như bên dưới

2.2.1.1 Gán data “Journals” vào biến có tên jo, rồi sau đó đặt tên lần lượt cho 10 biến trong bộ dữ liệu theo thứ tự là “t”, “pu”, “so”, “pr”, “pa”, “ch”, “ci”, “fo”, “su”, “fi” bằng lệnh names

jou <- Journals
names(jou) <- c("t", "pu", "so", "pr", "pa", "ch", "ci", "fo", "su", "fi")

Tiếp đến ta dùng lệnh summary để nhìn tổng quát dữ liệu

summary(jou)
##       t                                 pu       so            pr        
##  Length:180         Elsevier             :42   no :164   Min.   :  20.0  
##  Class :character   Blackwell            :26   yes: 16   1st Qu.: 134.5  
##  Mode  :character   Kluwer               :16             Median : 282.0  
##                     Springer             :10             Mean   : 417.7  
##                     Academic Press       : 9             3rd Qu.: 540.8  
##                     Univ of Chicago Press: 7             Max.   :2120.0  
##                     (Other)              :70                             
##        pa               ch             ci                fo      
##  Min.   : 167.0   Min.   :1782   Min.   :  21.00   Min.   :1844  
##  1st Qu.: 548.8   1st Qu.:2715   1st Qu.:  97.75   1st Qu.:1963  
##  Median : 693.0   Median :3010   Median : 262.50   Median :1973  
##  Mean   : 827.7   Mean   :3233   Mean   : 647.06   Mean   :1967  
##  3rd Qu.: 974.2   3rd Qu.:3477   3rd Qu.: 656.00   3rd Qu.:1982  
##  Max.   :2632.0   Max.   :6859   Max.   :8999.00   Max.   :1996  
##                                                                  
##        su                          fi    
##  Min.   :   2.0   General           :40  
##  1st Qu.:  52.0   Specialized       :14  
##  Median : 122.5   Public Finance    :12  
##  Mean   : 196.9   Development       :11  
##  3rd Qu.: 268.2   Finance           :11  
##  Max.   :1098.0   Urban and Regional: 8  
##                   (Other)           :84

Muốn xem 6 dòng đầu và 6 dòng cuối của dữ liệu bao gồm các thông tin về tiêu đề,tên nxb, yếu tố xã hội, giá, số trang giấy, kí tự, tổng số trích dẫn, năm của tạp chí, số lượng đăng ký và yếu tố mô tả thuộc địa ta sử dụng lệnh head và tail

head(jou)
##                                                          t
## APEL                     Asian-Pacific Economic Literature
## SAJoEH           South African Journal of Economic History
## CE                                 Computational Economics
## MEPiTE MOCT-MOST Economic Policy in Transitional Economics
## JoSE                            Journal of Socio-Economics
## LabEc                                     Labour Economics
##                            pu so  pr  pa   ch ci   fo su                fi
## APEL                Blackwell no 123 440 3822 21 1986 14           General
## SAJoEH So Afr ec history assn no  20 309 1782 22 1986 59  Economic History
## CE                     Kluwer no 443 567 2924 22 1987 17       Specialized
## MEPiTE                 Kluwer no 276 520 3234 22 1991  2      Area Studies
## JoSE                 Elsevier no 295 791 3024 24 1972 96 Interdisciplinary
## LabEc                Elsevier no 344 609 2967 24 1994 15             Labor
tail(jou)
##                                                       t                    pu
## JASA    Journal of the American Statistical Association  Am. Statistical Assn
## JoFi                                 Journal of Finance      Am. Finance Assn
## QJoE                     Quarterly Journal of Economics             MIT press
## JoPolEc                    Journal of Political Economy Univ of Chicago Press
## Ecnmt                                      Econometrica             Blackwell
## AER                            American Economic Review            Am Ec Assn
##          so  pr   pa   ch   ci   fo   su           fi
## JASA    yes 310 1260 5664 2800 1971  487 Econometrics
## JoFi    yes 226 2272 3036 3791 1945  799      Finance
## QJoE     no 148 1467 2184 4138 1886  660      General
## JoPolEc  no 159 1669 2640 6697 1892  737      General
## Ecnmt   yes 178 1482 2992 7943 1932  346      General
## AER     yes  47 1867 3900 8999 1911 1098      General

Qua đó để muốn phân tích được dữ liệu, ta sẽ xem qua cấu trúc của dữ liệu

str(jou)
## 'data.frame':    180 obs. of  10 variables:
##  $ t : chr  "Asian-Pacific Economic Literature" "South African Journal of Economic History" "Computational Economics" "MOCT-MOST Economic Policy in Transitional Economics" ...
##  $ pu: Factor w/ 52 levels "ANU Press","Academic Press",..: 11 45 28 28 18 18 13 18 28 11 ...
##  $ so: Factor w/ 2 levels "no","yes": 1 1 1 1 1 1 1 1 1 1 ...
##  $ pr: int  123 20 443 276 295 344 90 242 226 262 ...
##  $ pa: int  440 309 567 520 791 609 602 665 243 386 ...
##  $ ch: int  3822 1782 2924 3234 3024 2967 3185 2688 3010 2501 ...
##  $ ci: int  21 22 22 22 24 24 24 27 28 30 ...
##  $ fo: int  1986 1986 1987 1991 1972 1994 1995 1968 1987 1949 ...
##  $ su: int  14 59 17 2 96 15 14 202 46 46 ...
##  $ fi: Factor w/ 24 levels "General","Economic History",..: 1 2 3 4 5 6 7 3 4 1 ...

2.3 Đào sâu vào bộ dữ liệu

Để nhóm dữ liệu từ biến jo theo tên nhà xuất bản, tôi dùng lệnh group_by, tiếp theo tôi sẽ dùng hàm summarise để thực hiện tổ hợp các phép tính sau khi nhóm cụ thể là phép tính tổng cho biến price(pr). Bảng kết quả sẽ gán vào total để thực hiện các thao tác tiếp theo.

total<- jou %>%  group_by(pu) %>%
summarise(sum=sum(pr))
total
## # A tibble: 52 × 2
##    pu                     sum
##    <fct>                <int>
##  1 ANU Press               54
##  2 Academic Press        4625
##  3 Agric. Econ. Society    96
##  4 Am Ec Assn             141
##  5 Am Stat Assn            90
##  6 Am. Ag. Econ Assn       81
##  7 Am. Finance Assn       226
##  8 Am. Risk & Ins. Assn    90
##  9 Am. Statistical Assn   310
## 10 Assn Ev. Economics      45
## # ℹ 42 more rows
jou <- Journals

Qua kết quả ở bảng trên, tôi sẽ phân tích cụ thể dữ liêu đã thu được, ở nhà xuất bản Academic Press có giá đăng ký cao nhất tại thư viện là 4625 đô la, Còn nhà xuất bản Assn Ev. Economics có giá đăng ký tại thư viện thấp nhất là 45 đô la

Sau đó tôi vẽ biểu đồ cho bảng kết quả trên, tôi sử dụng lệnh ggplot. Trong đó,trục x là các nhà xuất bản, trục y là tổng giá.

library(ggplot2)
ggplot(total,aes(x=pu,y=sum,fill = pu) )+ geom_col() + labs(x = "nhaxuatban", y = "giatri", fill = "nhaxuatban") + theme_minimal()

Tương tự, tính tổng số trích dẫn của tất cả các nhà xuất bản được nhóm theo năm sau đó gán vào biến y

Tạo bảng

Lập bảng tổng số trích dẫn của các nhà xuất bản theo năm và phân làm 3 nhóm sau đó gán vào các tên

t <- table(cut(jou$su, breaks = c(2,24,222,1098 ),labels = c("it","vua","nhieu")),jou$fo) 
t
##        
##         1844 1852 1865 1886 1890 1892 1898 1911 1918 1919 1922 1925 1928 1930
##   it       0    0    0    0    0    0    0    0    0    0    0    0    0    0
##   vua      1    1    1    0    0    0    1    0    0    0    1    1    0    1
##   nhieu    0    0    0    1    1    1    0    1    1    1    0    1    1    0
##        
##         1932 1933 1939 1941 1943 1945 1947 1948 1949 1952 1953 1954 1958 1960
##   it       0    0    0    0    0    0    0    0    0    0    0    0    0    0
##   vua      0    0    1    0    1    1    0    2    1    0    1    0    1    0
##   nhieu    2    2    0    2    0    1    2    2    1    1    1    1    0    2
##        
##         1961 1962 1963 1964 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975
##   it       0    0    0    1    0    0    0    0    0    0    0    0    1    0
##   vua      1    1    3    2    1    4    1    3    2    4    4    4    3    3
##   nhieu    2    1    1    3    2    2    1    2    4    1    1    1    3    0
##        
##         1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989
##   it       1    0    0    0    0    0    1    1    0    0    2    1    0    1
##   vua      1    3    4    4    4    6    6    2    3    4    3    4    3    1
##   nhieu    0    0    1    0    0    1    1    1    0    0    0    1    0    0
##        
##         1990 1991 1992 1994 1995 1996
##   it       0    1    1    2    1    1
##   vua      3    2    4    1    0    1
##   nhieu    0    0    0    0    0    0

Đồ thị trên cho biết được là ứng với từng mức giá đăng ký tại thư viện thì sẽ có bao nhiêu nhà xuất bản được đăng ký tại thư viện. Khi đọc kết quả đồ thị, ta thấy rằng có nhiều người tham gia khảo sát nhất trả lời rằng họ chi ra mức chi phí khoảng đơn vị cho việc đăng ký này.

2.3.0.1 Trục tọa độ

geom_bar sẽ hiểu các trục tọa độ dưới đây:

x: Trục x y: Trục y alpha: chỉ số alpha colour: màu sắc fill: màu sắc cột group: Phân nhóm để tô màu theo nhóm. linetype: kiểu đường viền size: Kích thước cột

  • Bằng những thao tác đã học ở tuần trước, phân tổ biến foundingyear thành ba nhóm ít, vừa và nhiều. Từ đó ta quan sát được kết quả dữ liệu được tổng hợp lại một cách nhìn sâu hơn.

2.4 PIVOT

2.4.1 Pivot_longer

2.4.1.1 Trình bày dữ liệu bằng lệnh pivot_longer để trình bày dữ liệu từ hàng thành cột(rút gọn bộ dữ liệu)

mp <- jou |> pivot_longer(cols = starts_with('su'),names_to = 'subs', values_to = 'rank')
mp <- jou |> pivot_longer(cols = starts_with('su'),names_to = 'subs', values_to = 'rank', values_drop_na = T)
mp <- jou|> pivot_longer(cols = starts_with('su'),names_to = 'subs', values_to = 'rank', values_drop_na = T) |>mutate(subs = parse_number(subs))
## Warning: There was 1 warning in `mutate()`.
## ℹ In argument: `subs = parse_number(subs)`.
## Caused by warning:
## ! 180 parsing failures.
## row col expected actual
##   1  -- a number   subs
##   2  -- a number   subs
##   3  -- a number   subs
##   4  -- a number   subs
##   5  -- a number   subs
## ... ... ........ ......
## See problems(...) for more details.
View(mp)
view(billboard)
data(billboard)
bill <- billboard
  • Trong câu lệnh này tôi tiến hành trình bày lại cột dữ liệu subs (số lượt đăng ký ở thư viện) từ 2 đến 1098 thành 1 cột dữ liệu và đặt tên cho cột dữ liệu mới này là rank

2.5 MUTATE_ Hàm mutate có tác dụng tạo thêm một cột biến mới thỏa mãn một điều kiện nào đó hoặc đơn thuần là tạo ra cột biến mới dựa theo một công thức tính toán nào đó.

  • Ta dùng lệnh mutate để mã hóa dữ liệu của biến
jou <- jou 
mp$aa <- seq(1,1,length = length(mp$society))
mp <- mutate(mp,bb = mp$rank + mp$aa)
mp <- mutate(mp,bb = rank + aa)
str(mp)
## tibble [180 × 13] (S3: tbl_df/tbl/data.frame)
##  $ title       : chr [1:180] "Asian-Pacific Economic Literature" "South African Journal of Economic History" "Computational Economics" "MOCT-MOST Economic Policy in Transitional Economics" ...
##  $ publisher   : Factor w/ 52 levels "ANU Press","Academic Press",..: 11 45 28 28 18 18 13 18 28 11 ...
##  $ society     : Factor w/ 2 levels "no","yes": 1 1 1 1 1 1 1 1 1 1 ...
##  $ price       : int [1:180] 123 20 443 276 295 344 90 242 226 262 ...
##  $ pages       : int [1:180] 440 309 567 520 791 609 602 665 243 386 ...
##  $ charpp      : int [1:180] 3822 1782 2924 3234 3024 2967 3185 2688 3010 2501 ...
##  $ citations   : int [1:180] 21 22 22 22 24 24 24 27 28 30 ...
##  $ foundingyear: int [1:180] 1986 1986 1987 1991 1972 1994 1995 1968 1987 1949 ...
##  $ field       : Factor w/ 24 levels "General","Economic History",..: 1 2 3 4 5 6 7 3 4 1 ...
##  $ subs        : num [1:180] NA NA NA NA NA NA NA NA NA NA ...
##   ..- attr(*, "problems")= tibble [180 × 4] (S3: tbl_df/tbl/data.frame)
##   .. ..$ row     : int [1:180] 1 2 3 4 5 6 7 8 9 10 ...
##   .. ..$ col     : int [1:180] NA NA NA NA NA NA NA NA NA NA ...
##   .. ..$ expected: chr [1:180] "a number" "a number" "a number" "a number" ...
##   .. ..$ actual  : chr [1:180] "subs" "subs" "subs" "subs" ...
##  $ rank        : int [1:180] 14 59 17 2 96 15 14 202 46 46 ...
##  $ aa          : num [1:180] 1 1 1 1 1 1 1 1 1 1 ...
##  $ bb          : num [1:180] 15 60 18 3 97 16 15 203 47 47 ...

jour <- jou %>% select(pages,charpp,ptice) %% pivot_wider(names_from = charpp,values_from = price, values_fn = list) jour

2.6 Pivot_wider

Chuyển đổi từ dữ liệu dài sang dữ liệu rộng dựa trên biến foundingyear và giá trị page, citations, subs trong bộ dữ liệu Journals. Với câu lệnh đầu tiên, tạo ra bảng dữ liệu “jodex” với các cột là các năm(cột “foundingyear”) và số trang của tạp chí (“cột page”). Câu lệnh thứ hai, tạo một bảng dữ liệu rộng “joupom” với các cột mới là các năm và các giá trị là ký tự trên các tạp chí được đăng ký của từng nhà xuất bản. Câu lệnh thứ ba tạo ra bảng dữ liệu về subs của từng nhà xuất bản tương ứng. Các bảng có cấu trúc dạng rộng, với mỗi nhà xuất bản (cột “publisher”) và tiêu đề của tạp chí (cột “title”) chỉ xuất hiện một lần và được kết hợp các giá trị giá đăng ký tại thư viện, lượng đăng ký, số trang của tạp chí theo năm của các nhà xuất bản và leenhk arrange sắp xếp theo từng

mp <- mp %%pivot_wider(names_from = society , values_from = number ) mp

2.6.1 Tạo thêm cột cho biến

Sau khi câu lệnh được thực hiện chứng ta có thể thấy trên bảng được tạo thêm một cột mang tên resp thực hiên việc chuyển đổi các dữ liệu của biến case thành số từ ‘no’ tương đương với 0, từ ‘perhaps’ tương dương với 1 và từ ‘yes’ cững là 1.

data(“VerbAgg”) view(VerbAgg) table(VerbAgg\(item) levels(VerbAgg\)item) summary(VerbAgg) VerbAgg <- VerbAgg %>% mutate(respn = case_when(resp == “no” ~ 0,resp == “perhaps” ~ 1, resp == “yes” ~ 1)) library(tidyverse) VerbAgg <- VerbAgg %>% mutate(respn = case_when(resp == “no” ~ 0,resp == “perhaps” ~ 1, resp == “yes” ~ 1)) table(VerbAgg\(resp) VerbAgg <- VerbAgg %>% mutate(respn = case_when(resp == "no" ~ 0,resp == "perhaps" ~ 1, resp == "yes" ~ 1)) table(VerbAgg\)respn) respn_wide <- VerbAgg %>% select(id, item, respn) %>%pivot_wider(names_from = item, values_from = respn) tmp <- VerbAgg %>% select(id, item, respn) respn_wide <- VerbAgg %>% select(id, item, respn) %>%pivot_wider(names_from = item, values_from = respn)

  • Trong câu lệnh select(), chúng ta đã tạo ra một bảng dữ liệu mới với 25 cột xây dựng từ cột item (các mục trên bảng câu hỏi) và 316 hàng là các dữ liệu của id (các chủ đề cần phân tích). Và dữ liệu được thể hiện ở đây là các dữ liệu của biên mới tạo respn.Ý nghĩa của bảng là thể hiện mức độ phản ứng của người tham gia khảo sát tại các mục trên bảng cấu hỏi với các chủ đề phân tích khác nhau.

3 BÀI TẬP VỀ NHÀ TUẦN 2

library("HDclassif")
## Warning: package 'HDclassif' was built under R version 4.2.3
## Loading required package: MASS
## Warning: package 'MASS' was built under R version 4.2.3
## 
## Attaching package: 'MASS'
## The following object is masked from 'package:Ecdat':
## 
##     SP500
## The following object is masked from 'package:dplyr':
## 
##     select
data("wine")
dat <- wine
dat <- na.omit(dat)

3.1 Trích lọc dữ liệu

ca <- dat[dat$class == 3,]
table(dat$class)
## 
##  1  2  3 
## 59 71 48
table(dat$class)/178*100
## 
##        1        2        3 
## 33.14607 39.88764 26.96629

Sau khi thao tác bộ dữ liệu này để có bảng tần suất thì ta chia cho tổng số quan sát và kết quả nhận thấy:

  • Tên loại rượu nho thứ hai chiếm nhiều nhất là 71 loại chiếm khoảng 39,88%

  • Tên loại rượu thứ ba chiếm tỉ lệ thấp nhất đạt khoảng 29,97% với 48 loại.

Tỉ lệ phần trăm của các khoảng trong biến V3

prop.table(table(wine$V3))
## 
##        1.36         1.7        1.71        1.75        1.82        1.88 
## 0.005617978 0.011235955 0.005617978 0.005617978 0.005617978 0.005617978 
##         1.9        1.92        1.94        1.95        1.98        1.99 
## 0.005617978 0.016853933 0.005617978 0.005617978 0.016853933 0.005617978 
##           2        2.02        2.04         2.1        2.12        2.13 
## 0.011235955 0.005617978 0.005617978 0.022471910 0.016853933 0.005617978 
##        2.14        2.15        2.16        2.17        2.19         2.2 
## 0.011235955 0.005617978 0.005617978 0.016853933 0.011235955 0.028089888 
##        2.21        2.22        2.23        2.24        2.25        2.26 
## 0.016853933 0.005617978 0.011235955 0.011235955 0.011235955 0.016853933 
##        2.27        2.28        2.29         2.3        2.31        2.32 
## 0.016853933 0.039325843 0.011235955 0.039325843 0.011235955 0.033707865 
##        2.35        2.36        2.37        2.38        2.39         2.4 
## 0.016853933 0.033707865 0.005617978 0.028089888 0.011235955 0.022471910 
##        2.41        2.42        2.43        2.44        2.45        2.46 
## 0.011235955 0.016853933 0.005617978 0.005617978 0.016853933 0.016853933 
##        2.48         2.5        2.51        2.52        2.53        2.54 
## 0.028089888 0.022471910 0.011235955 0.005617978 0.005617978 0.011235955 
##        2.55        2.56        2.58        2.59         2.6        2.61 
## 0.005617978 0.011235955 0.011235955 0.005617978 0.016853933 0.016853933 
##        2.62        2.64        2.65        2.67        2.68        2.69 
## 0.022471910 0.016853933 0.011235955 0.011235955 0.011235955 0.005617978 
##         2.7        2.72        2.73        2.74        2.75        2.78 
## 0.033707865 0.011235955 0.005617978 0.011235955 0.005617978 0.005617978 
##         2.8        2.84        2.86        2.87        2.92        3.22 
## 0.005617978 0.005617978 0.005617978 0.005617978 0.005617978 0.005617978 
##        3.23 
## 0.005617978

3.2 Một số lệnh thao tác đặc trưng đo lường cơ bản

3.3 Tính trung bình(mean),độ lệch chuẩn(sd), quantile(phân vị) của biến

mean(wine$V5)
## [1] 99.74157
median(wine$V5)
## [1] 98
sd(wine$V5)
## [1] 14.28248
quantile(wine$V5, 0.95)
##   95% 
## 124.3

Sau đó tôi tạo biểu histogram của biên V5 để xem sự phân bổ dữ liệu của chúng

hist(wine$V5)

Rồi đến bước thực hiện phép tính tổng hợp dữ liệu của biến V5 theo bến class. Ý nghĩa cho biết:

  • Nồng độ cồn nếu phân loại theo tên rượu nho thứ nhất thì trung bình là 106.339% + Nồng độ cồn theo tên rượu nho thứ hai thì trung bình là 94.5493%

  • Nồng độ cồn theo tên rượu nho thứ ba thì trung bình là 99.3125%

aggregate(V5 ~ class, wine, FUN=mean)
##   class       V5
## 1     1 106.3390
## 2     2  94.5493
## 3     3  99.3125
library(tidyverse)



c <- dat$V1
c1 <- c[13.05:14.83]
c2 <- c[11.46:12.88]
case1 <- data.frame(nongdo = c1, ruouthunhat="A")
case2 <- data.frame(nongdo= c2, ruouthuhai="B")

4 BÀI TẬP VỀ NHÀ TUẦN 1

Sau đây tôi sẽ trình bày về bộ dataset mà tôi chọn làm để phân tích nó. Tên dataset: wine, data này nằm trong package HDclassif. Bộ dữ liệu là được lấy từ kết quả phân tích hóa học của các loại rượu vang được trồng ở cùng một vùng ở Ý nhưng có nguồn gốc từ ba giống cây trồng khác nhau. Đầu tiên tôi muốn dùng dữ liệu wine tôi phải gọi package HDclassif lên

library("HDclassif")
data("wine")
str("HDclassif")
##  chr "HDclassif"

4.1 Mô tả dữ liệu

Đây là dữ liệu về 3 loại rượu (Barbera, Barolo và Grignolino) ở vùng Piedmont, Ý, gồm:

  • 14 biến (variables)
  • 178 quan sát (observations)

Rượu Barolo được làm từ nho Nebbiolo, hai loại rượu còn lại được làm từ loại nho có cùng tên với chúng.

head(wine) 
##   class    V1   V2   V3   V4  V5   V6   V7   V8   V9  V10  V11  V12  V13
## 1     1 14.23 1.71 2.43 15.6 127 2.80 3.06 0.28 2.29 5.64 1.04 3.92 1065
## 2     1 13.20 1.78 2.14 11.2 100 2.65 2.76 0.26 1.28 4.38 1.05 3.40 1050
## 3     1 13.16 2.36 2.67 18.6 101 2.80 3.24 0.30 2.81 5.68 1.03 3.17 1185
## 4     1 14.37 1.95 2.50 16.8 113 3.85 3.49 0.24 2.18 7.80 0.86 3.45 1480
## 5     1 13.24 2.59 2.87 21.0 118 2.80 2.69 0.39 1.82 4.32 1.04 2.93  735
## 6     1 14.20 1.76 2.45 15.2 112 3.27 3.39 0.34 1.97 6.75 1.05 2.85 1450

4.2 Trình bày 10 hàng đầu của data.frame wines

names(wine)
##  [1] "class" "V1"    "V2"    "V3"    "V4"    "V5"    "V6"    "V7"    "V8"   
## [10] "V9"    "V10"   "V11"   "V12"   "V13"
data(wine)

4.3 Cho biết tên các biến trong data.frame wines

Trong 14 biến:

  • Biến \(vintages\) là biến nhãn cho biết tên loại rượu của từng quan trắc tương ứng.

  • Ngoại trừ các biến \(col..int\), \(col..hue\), \(OD.ratio\), các biến còn lại đều là các biến mô tả nồng độ (concentration). \(col..int\) = color intensity, \(col..hue\) = color hue và \(OD.ration\) = tỷ số giữa sự hấp thụ (absorbance) tại các bước sóng \(280\)\(315\) nm.

Thống kê số lượng 3 loại rượu trong mẫu:

table(wine$vintage)
## < table of extent 0 >

4.4 Thống kê mô tả

Trước tiên, ta tạo một data.frame mới gồm 13 cột đầu tiên của data.frame wine (gồm các biến định lượng) để thực hiện thống kê mô tả (biến thứ 14 là vintages là biến định tính):

dat_wine <- wine[ , 1:13]

Tính trung bình mẫu của các biến:

apply(dat_wine, 2, mean) 
##      class         V1         V2         V3         V4         V5         V6 
##  1.9382022 13.0006180  2.3363483  2.3665169 19.4949438 99.7415730  2.2951124 
##         V7         V8         V9        V10        V11        V12 
##  2.0292697  0.3618539  1.5908989  5.0580899  0.9574494  2.6116854

Tính phương sai mẫu của các biến:

apply(dat_wine, 2, var)
##        class           V1           V2           V3           V4           V5 
##   0.60067924   0.65906233   1.24801540   0.07526464  11.15268616 203.98933536 
##           V6           V7           V8           V9          V10          V11 
##   0.39168954   0.99771867   0.01548863   0.32759467   5.37444938   0.05224496 
##          V12 
##   0.50408641
apply(dat_wine, 2, range)
##      class    V1   V2   V3   V4  V5   V6   V7   V8   V9   V10  V11  V12
## [1,]     1 11.03 0.74 1.36 10.6  70 0.98 0.34 0.13 0.41  1.28 0.48 1.27
## [2,]     3 14.83 5.80 3.23 30.0 162 3.88 5.08 0.66 3.58 13.00 1.71 4.00

Tính ma trận hiệp phương sai (covariance matrix) và ma trận hệ số tương quan (correlation matrix):

cov_wine <- cov(dat_wine) 
# Ma trận hiệp phương sai tính từ dữ liệu chưa chuẩn hóa 
cov_wine
##             class          V1          V2            V3         V4          V5
## class  0.60067924 -0.20651527  0.37903860 -0.0105554498  1.3403637  -2.3154955
## V1    -0.20651527  0.65906233  0.08561131  0.0471151590 -0.8410929   3.1398781
## V2     0.37903860  0.08561131  1.24801540  0.0502770393  1.0763317  -0.8707795
## V3    -0.01055545  0.04711516  0.05027704  0.0752646353  0.4062083   1.1229366
## V4     1.34036374 -0.84109290  1.07633171  0.4062082778 11.1526862  -3.9747604
## V5    -2.31549546  3.13987812 -0.87077953  1.1229365835 -3.9747604 203.9893354
## V6    -0.34883483  0.14688722 -0.23433772  0.0221455913 -0.6711491   1.9164699
## V7    -0.65609059  0.19203322 -0.45863037  0.0315347299 -1.1720828   2.7930870
## V8     0.04717736 -0.01575426  0.04073336  0.0063584714  0.1504219  -0.4555634
## V9    -0.22141306  0.06351752 -0.14114698  0.0015155780 -0.3771762   1.9328325
## V10    0.47733891  1.02828254  0.64483818  0.1646543266  0.1450242   6.6205206
## V11   -0.10936755 -0.01331344 -0.14332564 -0.0046821545 -0.2091181   0.1808513
## V12   -0.43373707  0.04169782 -0.29244748  0.0007618358 -0.6562344   0.6693081
##                V6          V7           V8           V9         V10
## class -0.34883483 -0.65609059  0.047177363 -0.221413064  0.47733891
## V1     0.14688722  0.19203322 -0.015754260  0.063517520  1.02828254
## V2    -0.23433772 -0.45863037  0.040733362 -0.141146982  0.64483818
## V3     0.02214559  0.03153473  0.006358471  0.001515578  0.16465433
## V4    -0.67114915 -1.17208281  0.150421856 -0.377176220  0.14502419
## V5     1.91646988  2.79308703 -0.455563385  1.932832476  6.62052061
## V6     0.39168954  0.54047042 -0.035045125  0.219373345 -0.07999752
## V7     0.54047042  0.99771867 -0.066867000  0.373147553 -0.39916863
## V8    -0.03504512 -0.06686700  0.015488634 -0.026059868  0.04012051
## V9     0.21937334  0.37314755 -0.026059868  0.327594668 -0.03350392
## V10   -0.07999752 -0.39916863  0.040120510 -0.033503918  5.37444938
## V11    0.06203888  0.12408197 -0.007471177  0.038664565 -0.27650580
## V12    0.31102128  0.55826225 -0.044469244  0.210932940 -0.70581258
##                V11           V12
## class -0.109367549 -0.4337370660
## V1    -0.013313443  0.0416978226
## V2    -0.143325638 -0.2924474830
## V3    -0.004682155  0.0007618358
## V4    -0.209118054 -0.6562343681
## V5     0.180851266  0.6693080683
## V6     0.062038876  0.3110212785
## V7     0.124081969  0.5582622548
## V8    -0.007471177 -0.0444692440
## V9     0.038664565  0.2109329398
## V10   -0.276505801 -0.7058125762
## V11    0.052244961  0.0917662439
## V12    0.091766244  0.5040864089
corr_wine <- cor(dat_wine) 
corr_wine
##             class          V1          V2           V3          V4          V5
## class  1.00000000 -0.32822194  0.43777620 -0.049643221  0.51785911 -0.20917939
## V1    -0.32822194  1.00000000  0.09439694  0.211544596 -0.31023514  0.27079823
## V2     0.43777620  0.09439694  1.00000000  0.164045470  0.28850040 -0.05457510
## V3    -0.04964322  0.21154460  0.16404547  1.000000000  0.44336719  0.28658669
## V4     0.51785911 -0.31023514  0.28850040  0.443367187  1.00000000 -0.08333309
## V5    -0.20917939  0.27079823 -0.05457510  0.286586691 -0.08333309  1.00000000
## V6    -0.71916334  0.28910112 -0.33516700  0.128979538 -0.32111332  0.21440123
## V7    -0.84749754  0.23681493 -0.41100659  0.115077279 -0.35136986  0.19578377
## V8     0.48910916 -0.15592947  0.29297713  0.186230446  0.36192172 -0.25629405
## V9    -0.49912982  0.13669791 -0.22074619  0.009651935 -0.19732684  0.23644061
## V10    0.26566757  0.54636420  0.24898534  0.258887259  0.01873198  0.19995001
## V11   -0.61736921 -0.07174720 -0.56129569 -0.074666889 -0.27395522  0.05539820
## V12   -0.78822959  0.07234319 -0.36871043  0.003911231 -0.27676855  0.06600394
##                V6         V7         V8           V9         V10         V11
## class -0.71916334 -0.8474975  0.4891092 -0.499129824  0.26566757 -0.61736921
## V1     0.28910112  0.2368149 -0.1559295  0.136697912  0.54636420 -0.07174720
## V2    -0.33516700 -0.4110066  0.2929771 -0.220746187  0.24898534 -0.56129569
## V3     0.12897954  0.1150773  0.1862304  0.009651935  0.25888726 -0.07466689
## V4    -0.32111332 -0.3513699  0.3619217 -0.197326836  0.01873198 -0.27395522
## V5     0.21440123  0.1957838 -0.2562940  0.236440610  0.19995001  0.05539820
## V6     1.00000000  0.8645635 -0.4499353  0.612413084 -0.05513642  0.43368134
## V7     0.86456350  1.0000000 -0.5378996  0.652691769 -0.17237940  0.54347857
## V8    -0.44993530 -0.5378996  1.0000000 -0.365845099  0.13905701 -0.26263963
## V9     0.61241308  0.6526918 -0.3658451  1.000000000 -0.02524993  0.29554425
## V10   -0.05513642 -0.1723794  0.1390570 -0.025249931  1.00000000 -0.52181319
## V11    0.43368134  0.5434786 -0.2626396  0.295544253 -0.52181319  1.00000000
## V12    0.69994936  0.7871939 -0.5032696  0.519067096 -0.42881494  0.56546829
##                V12
## class -0.788229589
## V1     0.072343187
## V2    -0.368710428
## V3     0.003911231
## V4    -0.276768549
## V5     0.066003936
## V6     0.699949365
## V7     0.787193902
## V8    -0.503269596
## V9     0.519067096
## V10   -0.428814942
## V11    0.565468293
## V12    1.000000000

Phần tiếp theo, tôi dùng lệnh str để xem cấu trúc của bộ dữ liệu

Kết quả cung cấp cho ta thông tin về số lượng quan sát, số biến và tên của các biến, loại dữ liệu của từng biến

str(wine)
## 'data.frame':    178 obs. of  14 variables:
##  $ class: int  1 1 1 1 1 1 1 1 1 1 ...
##  $ V1   : num  14.2 13.2 13.2 14.4 13.2 ...
##  $ V2   : num  1.71 1.78 2.36 1.95 2.59 1.76 1.87 2.15 1.64 1.35 ...
##  $ V3   : num  2.43 2.14 2.67 2.5 2.87 2.45 2.45 2.61 2.17 2.27 ...
##  $ V4   : num  15.6 11.2 18.6 16.8 21 15.2 14.6 17.6 14 16 ...
##  $ V5   : int  127 100 101 113 118 112 96 121 97 98 ...
##  $ V6   : num  2.8 2.65 2.8 3.85 2.8 3.27 2.5 2.6 2.8 2.98 ...
##  $ V7   : num  3.06 2.76 3.24 3.49 2.69 3.39 2.52 2.51 2.98 3.15 ...
##  $ V8   : num  0.28 0.26 0.3 0.24 0.39 0.34 0.3 0.31 0.29 0.22 ...
##  $ V9   : num  2.29 1.28 2.81 2.18 1.82 1.97 1.98 1.25 1.98 1.85 ...
##  $ V10  : num  5.64 4.38 5.68 7.8 4.32 6.75 5.25 5.05 5.2 7.22 ...
##  $ V11  : num  1.04 1.05 1.03 0.86 1.04 1.05 1.02 1.06 1.08 1.01 ...
##  $ V12  : num  3.92 3.4 3.17 3.45 2.93 2.85 3.58 3.58 2.85 3.55 ...
##  $ V13  : int  1065 1050 1185 1480 735 1450 1290 1295 1045 1045 ...

Kế đến tôi dùng lệnh summary để tạo ra phần tóm tắt các thông tin thống kê mô tả của các biến. Kết quả dưới đây cho ta biết về trung bình, min, max, trung vị, các tứ phân vị của các biến. Ta có thể hiểu được việc này nó mô tả như nào dựa vào kết quả dưới đây. Chẳng hạn một ví dụ cụ thể về biến bất kì, ta lấy biến V10 để ví dụ rằng nhìn vào biến V10(tỷ số sự hấp thụ) thấy được rằng độ hấp thụ lớn nhất là 13%, bé nhất là 1,28%, trung bình sự hấp thụ của các loại rượu này dao động khoảng 5,058%, tứ phân vị thứ nhất biểu diễn con số 3,22%, trung vị thì lại cho thấy tỉ số hấp thụ là 4,69 và tứ phân vị thứ ba lại cho kết quả hấp thụ với tỷ số là 6,2

summary(wine)
##      class             V1              V2              V3       
##  Min.   :1.000   Min.   :11.03   Min.   :0.740   Min.   :1.360  
##  1st Qu.:1.000   1st Qu.:12.36   1st Qu.:1.603   1st Qu.:2.210  
##  Median :2.000   Median :13.05   Median :1.865   Median :2.360  
##  Mean   :1.938   Mean   :13.00   Mean   :2.336   Mean   :2.367  
##  3rd Qu.:3.000   3rd Qu.:13.68   3rd Qu.:3.083   3rd Qu.:2.558  
##  Max.   :3.000   Max.   :14.83   Max.   :5.800   Max.   :3.230  
##        V4              V5               V6              V7       
##  Min.   :10.60   Min.   : 70.00   Min.   :0.980   Min.   :0.340  
##  1st Qu.:17.20   1st Qu.: 88.00   1st Qu.:1.742   1st Qu.:1.205  
##  Median :19.50   Median : 98.00   Median :2.355   Median :2.135  
##  Mean   :19.49   Mean   : 99.74   Mean   :2.295   Mean   :2.029  
##  3rd Qu.:21.50   3rd Qu.:107.00   3rd Qu.:2.800   3rd Qu.:2.875  
##  Max.   :30.00   Max.   :162.00   Max.   :3.880   Max.   :5.080  
##        V8               V9             V10              V11        
##  Min.   :0.1300   Min.   :0.410   Min.   : 1.280   Min.   :0.4800  
##  1st Qu.:0.2700   1st Qu.:1.250   1st Qu.: 3.220   1st Qu.:0.7825  
##  Median :0.3400   Median :1.555   Median : 4.690   Median :0.9650  
##  Mean   :0.3619   Mean   :1.591   Mean   : 5.058   Mean   :0.9574  
##  3rd Qu.:0.4375   3rd Qu.:1.950   3rd Qu.: 6.200   3rd Qu.:1.1200  
##  Max.   :0.6600   Max.   :3.580   Max.   :13.000   Max.   :1.7100  
##       V12             V13        
##  Min.   :1.270   Min.   : 278.0  
##  1st Qu.:1.938   1st Qu.: 500.5  
##  Median :2.780   Median : 673.5  
##  Mean   :2.612   Mean   : 746.9  
##  3rd Qu.:3.170   3rd Qu.: 985.0  
##  Max.   :4.000   Max.   :1680.0

Kế đó ta sẽ sử dụng lệnh head để xem các quan sát đầu của dat và lệnh tail để xem một vài quan sát cuối

head(wine)
##   class    V1   V2   V3   V4  V5   V6   V7   V8   V9  V10  V11  V12  V13
## 1     1 14.23 1.71 2.43 15.6 127 2.80 3.06 0.28 2.29 5.64 1.04 3.92 1065
## 2     1 13.20 1.78 2.14 11.2 100 2.65 2.76 0.26 1.28 4.38 1.05 3.40 1050
## 3     1 13.16 2.36 2.67 18.6 101 2.80 3.24 0.30 2.81 5.68 1.03 3.17 1185
## 4     1 14.37 1.95 2.50 16.8 113 3.85 3.49 0.24 2.18 7.80 0.86 3.45 1480
## 5     1 13.24 2.59 2.87 21.0 118 2.80 2.69 0.39 1.82 4.32 1.04 2.93  735
## 6     1 14.20 1.76 2.45 15.2 112 3.27 3.39 0.34 1.97 6.75 1.05 2.85 1450
tail(wine)
##     class    V1   V2   V3   V4  V5   V6   V7   V8   V9  V10  V11  V12 V13
## 173     3 14.16 2.51 2.48 20.0  91 1.68 0.70 0.44 1.24  9.7 0.62 1.71 660
## 174     3 13.71 5.65 2.45 20.5  95 1.68 0.61 0.52 1.06  7.7 0.64 1.74 740
## 175     3 13.40 3.91 2.48 23.0 102 1.80 0.75 0.43 1.41  7.3 0.70 1.56 750
## 176     3 13.27 4.28 2.26 20.0 120 1.59 0.69 0.43 1.35 10.2 0.59 1.56 835
## 177     3 13.17 2.59 2.37 20.0 120 1.65 0.68 0.53 1.46  9.3 0.60 1.62 840
## 178     3 14.13 4.10 2.74 24.5  96 2.05 0.76 0.56 1.35  9.2 0.61 1.60 560

4.5 Gán tên mới là p cho object wine

p <- wine

4.6 Phân tổ dữ liệu

pt <- cut(p$V1,4)
table(pt)
## pt
##     (11,12]   (12,12.9] (12.9,13.9] (13.9,14.8] 
##          19          65          68          26

Từ kết quả trên ta thấy được, biến V1(nồng độ) cho 3 loại rượu đã được phân tổ làm 4 tổ có khoảng cách đều nhau, cụ thể hơn là:

  • Nồng độ từ 11 đến 12 có 19 giá trị

  • Nồng độ từ 12 đến 12.9 có 65 giá trị

  • Nồng độ từ 12.9 đến 13.9 có 68 giá trị

  • Nồng độ từ 13.9 đến 14.8 có 26 giá trị

4.7 Lấy những đối tượng có nồng độ cồn có các giá trị lớn hơn là 12.5.

p1 <- p$V1
p2 <- p1[p1>12.5]
table(p2)
## p2
## 12.51 12.52 12.53 12.58  12.6 12.64 12.67 12.69  12.7 12.72 12.77 12.79 12.81 
##     2     1     1     1     2     1     1     1     2     2     2     1     1 
## 12.82 12.84 12.85 12.86 12.87 12.88 12.93 12.96 12.99 13.03 13.05 13.07 13.08 
##     1     1     2     1     1     1     2     1     1     1     6     1     1 
## 13.11 13.16 13.17  13.2 13.23 13.24 13.27 13.28 13.29  13.3 13.32 13.34 13.36 
##     2     2     2     1     1     2     1     1     1     1     1     1     1 
## 13.39  13.4 13.41 13.45 13.48 13.49  13.5 13.51 13.52 13.56 13.58 13.62 13.63 
##     1     2     1     1     2     2     2     1     1     2     2     1     1 
## 13.64 13.67 13.68 13.69 13.71 13.72 13.73 13.74 13.75 13.76 13.77 13.78 13.82 
##     1     1     1     1     2     1     2     1     1     1     1     1     1 
## 13.83 13.84 13.86 13.87 13.88  13.9 13.94 14.02 14.06  14.1 14.12 14.13 14.16 
##     2     1     2     1     2     1     1     1     2     2     1     1     1 
## 14.19  14.2 14.21 14.22 14.23  14.3 14.34 14.37 14.38 14.39 14.75 14.83 
##     1     1     1     2     1     1     1     1     2     1     1     1