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))
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.
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.
Đ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.
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.
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.
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 đồ.
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.
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ế)
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 ...
Để 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.
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
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
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
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
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)
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)
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
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")
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"
Đây là dữ liệu về 3 loại rượu (Barbera, Barolo và Grignolino) ở vùng Piedmont, Ý, gồm:
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
names(wine)
## [1] "class" "V1" "V2" "V3" "V4" "V5" "V6" "V7" "V8"
## [10] "V9" "V10" "V11" "V12" "V13"
data(wine)
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\) và \(315\) nm.
Thống kê số lượng 3 loại rượu trong mẫu:
table(wine$vintage)
## < table of extent 0 >
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
p <- wine
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ị
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