1 Bài tập về nhà tuần 3

1.1 Dataset: Economics - Package: ggplot2

Bộ dữ liệu kinh tế là một bộ dữ liệu nó chứa thông tin về số người thất nghiệp, tỷ lệ tiết kiệm cá nhân và tiêu dùng cá nhân theo năm và tháng. Bộ dữ liệu này được tạo ra từ dữ liệu chuỗi thời gian kinh tế của Hoa Kỳ có sẵn từ Ngân hàng Dự trữ Liên Bang St. Louis.

Dữ liệu trên bao gồm 574 quan sát và chứa 6 biến:

  • date: Ngày tháng năm thu nhập
  • pce: Chi tiêu tiêu dùng cho cá nhân (đơn vị tính bằng tỷ đô la)
  • pop: Tổng dân số (đơn vị nghìn người)
  • psavert: Tỷ lệ tiết kiệm cá nhân
  • uempmed: Thời gian thất nghiệp trung bình (Đơn vị tính: tuần)
  • unemploy: Số người thất nghiệp (đơn vị tính: nghìn người)

1.2 Tổng quan dữ liệu

1.2.1 Đọc dữ liệu từ file package ggplot2 và gán chúng cho biến Eco

library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.2.3
data("economics")
Eco <- economics

1.2.2 Dùng summary để có cái nhìn tổng quan dữ liệu

summary(Eco)
##       date                 pce               pop            psavert      
##  Min.   :1967-07-01   Min.   :  506.7   Min.   :198712   Min.   : 2.200  
##  1st Qu.:1979-06-08   1st Qu.: 1578.3   1st Qu.:224896   1st Qu.: 6.400  
##  Median :1991-05-16   Median : 3936.8   Median :253060   Median : 8.400  
##  Mean   :1991-05-17   Mean   : 4820.1   Mean   :257160   Mean   : 8.567  
##  3rd Qu.:2003-04-23   3rd Qu.: 7626.3   3rd Qu.:290291   3rd Qu.:11.100  
##  Max.   :2015-04-01   Max.   :12193.8   Max.   :320402   Max.   :17.300  
##     uempmed          unemploy    
##  Min.   : 4.000   Min.   : 2685  
##  1st Qu.: 6.000   1st Qu.: 6284  
##  Median : 7.500   Median : 7494  
##  Mean   : 8.609   Mean   : 7771  
##  3rd Qu.: 9.100   3rd Qu.: 8686  
##  Max.   :25.200   Max.   :15352

1.2.3 Dùng lệnh head và tail để xem 6 dòng đầu và 6 dòng cuối của dữ liệu

head(Eco)
## # A tibble: 6 × 6
##   date         pce    pop psavert uempmed unemploy
##   <date>     <dbl>  <dbl>   <dbl>   <dbl>    <dbl>
## 1 1967-07-01  507. 198712    12.6     4.5     2944
## 2 1967-08-01  510. 198911    12.6     4.7     2945
## 3 1967-09-01  516. 199113    11.9     4.6     2958
## 4 1967-10-01  512. 199311    12.9     4.9     3143
## 5 1967-11-01  517. 199498    12.8     4.7     3066
## 6 1967-12-01  525. 199657    11.8     4.8     3018
tail(Eco)
## # A tibble: 6 × 6
##   date          pce     pop psavert uempmed unemploy
##   <date>      <dbl>   <dbl>   <dbl>   <dbl>    <dbl>
## 1 2014-11-01 12051. 319564.     7.3    13       9090
## 2 2014-12-01 12062  319746.     7.6    12.9     8717
## 3 2015-01-01 12046  319929.     7.7    13.2     8903
## 4 2015-02-01 12082. 320075.     7.9    12.9     8610
## 5 2015-03-01 12158. 320231.     7.4    12       8504
## 6 2015-04-01 12194. 320402.     7.6    11.5     8526

1.2.4 Dùng lệnh str để xem qua cấu trúc của bộ dữ liệu

str(Eco)
## spc_tbl_ [574 × 6] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
##  $ date    : Date[1:574], format: "1967-07-01" "1967-08-01" ...
##  $ pce     : num [1:574] 507 510 516 512 517 ...
##  $ pop     : num [1:574] 198712 198911 199113 199311 199498 ...
##  $ psavert : num [1:574] 12.6 12.6 11.9 12.9 12.8 11.8 11.7 12.3 11.7 12.3 ...
##  $ uempmed : num [1:574] 4.5 4.7 4.6 4.9 4.7 4.8 5.1 4.5 4.1 4.6 ...
##  $ unemploy: num [1:574] 2944 2945 2958 3143 3066 ...

1.3 Vẽ biểu đồ

1.3.1 Vẽ biểu đồ số người thất nghiệp tính bằng nghìn người theo thời gian.

`

ggplot(data = economics, aes(x = date, y = unemploy)) +
  geom_point(aes(color =uempmed)) +
  labs(x = "Date",
       y = "Unemployment",
       title = "Số người thất nghiệp theo thời gian") +
  theme_bw()

Nhận xét: Qua biểu đồ ta thấy có các chấm sáng hơn là thể hiện thời gian thất nghiệp dài hơn, đơn vị tính cho thời gian thất nghiệp trung bình tính bằng tuần. Từ năm 2007-2010 có sự tăng trưởng ở mức cao nhất có nghĩa là thời gian thất nghiệp dài hơn trong thời kỳ suy thoái.

1.3.2 Vẽ biểu đồ thể hiện tỷ lệ tiết kiệm của dân số mỗi năm

ggplot(data = economics) +
  geom_bar(aes(x = date, y = psavert, fill = pop), stat = 'identity') +
  labs(x = "Date",
       y = "Personal Savings Rate",
       fill = 'population',
       title = "Tỷ lệ tiết kiệm của dân số mỗi năm") +
  theme_bw()

Nhận xét: Tỷ lệ tiết kiệm là số tiền mà một cá nhân tiết kiệm được qua mỗi năm theo tỷ lệ phần trăm. Qua biểu đồ ta thấy được dân số đang tăng qua mỗi năm cho thấy theo thời gian thì dân số không ảnh hưởng đến tỷ lệ tiết kiệm của dân số qua mỗi năm. ## Sử dụng lệnh pivot_wider để xoay khung dữ liệu từ dạng dài sang dạng rộng

1.4 Kiểm định sự tương quan

1.4.1 Kiểm định xem giữa chi tiêu của cá nhân có ảnh hưởng đến tỷ lệ tiết kiệm

cor.test(economics$pce,economics$psavert)
## 
##  Pearson's product-moment correlation
## 
## data:  economics$pce and economics$psavert
## t = -31.116, df = 572, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  -0.8213959 -0.7603523
## sample estimates:
##        cor 
## -0.7928546

Nhận xét: Qua bảng số liệu ta thấy p-value < 2.2e-16 < 0,05. Suy ra bác bỏ H0. Vậy chi tiêu của cá nhân có ảnh hưởng đến tỷ lệ tiết kiệm

Dataset: HousePrices - Package AER. Dữ liệu “HousePrices” được lấy từ gói AER. Trong bộ dữ trên liên quan đến giá bán của 546 căn nhà ở thành phố Windsor, Canada trong tháng 7,8,9 của năm 1987.

Dữ liệu trên bao gồm 12 biến:

  • Price: Giá bán của ngôi nhà (nghìn đô)
  • Lotsize: Diện tích của ngôi nhà là bao nhiêu mét vuông
  • Bedrooms: Số phòng ngủ của ngôi nhà
  • Bathrooms: Số phòng tắm của ngôi nhà
  • Stories: Nhà có bao nhiêu tầng bao gồm tầng hầm
  • Driveway: Khu vực đó có đường cho xe chạy vào nhà hay không
  • Recreation: Ở trong nhà có phòng giải trí không
  • Fullbase: Tầng hầm của ngôi nhà đã được hoàn thiện hay chưa
  • Gasheat: Nhà có sử dụng hệ thống sưởi bằng gas không
  • Aircon: Nhà có sử dụng máy lạnh không
  • Garage: Số chỗ để xe
  • Prefer: Ngôi nhà có nằm trong khu phố ưu thích của thành phố hay không

2 Bài tập về nhà tuần 2

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
data("HousePrices")
mk <- HousePrices

Ở tuần này tôi sẽ thực hiện tính toán các thống kê mô tả

Đánh giá được độ tập trung và phân tán của dữ liệu. Dùng đồ thị để thể hiện tần số của các biến. Kiểm định rằng càng biến có quan hệ phụ thuộc nhau hay không và phân tích quan hệ ấy bằng đồ thị đơn giản ## Phân tổ không đều Ở mục này tôi bắt đầu phân tổ biến giá bán nhà và biến diện tích của ngôi nhà. Tôi phân thành 4 tổ và sau đó tôi gán chúng vào mk

2.0.1 Giá bán của ngôi nhà

mk$price <- cut(mk$price, breaks = c(25000,80000,135000,190000), labels = c(" giá thấp", "giá Vừa", "giá cao"))
table(mk$price)                 
## 
##  giá thấp   giá Vừa   giá cao 
##       400       131        12
  • Qua kết quả của bảng trên cho ta thấy: Có 400 ngôi nhà là có giá bán thấp từ 25000 - 80000 nghìn đô. Có 131 ngôi nhà là có giá bán vừa từ 80000 - 135000 nghìn đô. Có 12 ngôi nhà là có giá bán cao từ 135000 - 190000 nghìn đô

2.0.2 Diện tích ngôi nhà

mk$lotsize <- cut(mk$lotsize, breaks = c(4000,5000,8000,11000), labels = c("S nhỏ","S vừa","S rộng"))
table(mk$lotsize)
## 
##  S nhỏ  S vừa S rộng 
##    103    183     42
  • Qua kết quả trên cho ta thấy: Có tới 183 ngôi nhà có diện tích vừa (5000-8000 mét vuông), 103 ngôi nhà có diện tích nhỏ khoảng 1000 mét vuông (4000-5000 mét vuông) và 42 ngôi nhà có diện tích rộng khoảng 3000 mét vuông (8000-11000 mét vuông)

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

2.1.1 Lập bảng tần số, tần suất cho biến số phòng tắm và biến giá bán của ngôi nhà

table(mk$bat, mk$price)
##    
##      giá thấp giá Vừa giá cao
##   1       340      56       3
##   2        56      73       4
##   3         4       2       4
##   4         0       0       1
k=table(mk$bat, mk$price)
prop.table(k)
##    
##        giá thấp     giá Vừa     giá cao
##   1 0.626151013 0.103130755 0.005524862
##   2 0.103130755 0.134438306 0.007366483
##   3 0.007366483 0.003683241 0.007366483
##   4 0.000000000 0.000000000 0.001841621

Nhận xét: Ở những ngôi nhà có 1 phòng tắm thì tỷ lệ giá bán thấp sẽ tập trung đông chiến hơn một nửa 62,6% cao hơn nhiều so với giá vừa(10,3%) và giá cao(0.5%). Với những ngôi nhà có 4 phòng tắm thì tỷ lệ có giá bán thấp, vừa, cao là như nhau chiếm tỷ lệ rất nhỏ dưới 0.2%.

2.1.2 Lập bảng tần số và tần suất cho biến số tầng của ngôi nhà và biến diện tích của ngôi nhà

table(mk$bed, mk$lotsize)
##    
##     S nhỏ S vừa S rộng
##   1     0     0      0
##   2    32    27      8
##   3    48   113     23
##   4    21    39     10
##   5     1     4      1
##   6     1     0      0
h= table(mk$bed, mk$lotsize)
prop.table(h)
##    
##          S nhỏ      S vừa     S rộng
##   1 0.00000000 0.00000000 0.00000000
##   2 0.09756098 0.08231707 0.02439024
##   3 0.14634146 0.34451220 0.07012195
##   4 0.06402439 0.11890244 0.03048780
##   5 0.00304878 0.01219512 0.00304878
##   6 0.00304878 0.00000000 0.00000000

Nhận xét: Ở những ngôi nhà có 1 phòng ngủ và 4 phòng ngủ thì diện tích ngôi nhà chiếm tỷ lệ rất nhỏ dưới 0,3%. Ở những ngôi nhà có 3 phòng ngủ thì diện tích của ngôi nhà chiếm tỷ lệ cao hơn những ngôi nhà có 2 phòng ngủ. Ở những ngôi nhà có diện tích vừa mà có 3 phòng ngủ chiếm tỷ lệ cao 34,5% . Qua bảng tần suất diện tích của ngôi nhà thì ta thấy các ngôi nhà có diện tích nhỏ và vừa mà có 2,3 phòng ngủ chiến tỷ lệ khá cao.

2.2 Tính toán các đặc trưng đo lường

Trong phần này chúng ta sẽ tính các đặc trưng đo lường, trung bình, phương sai,độ lệch chuẩn,tổng của các biến bằng lệnh summary, mean, sd,var,quantile,sum để có cái nhìn tổng quan hơn. ### DÙng hàm summary Tôi dùng hàm Summary để tóm tắt thống kê cho toàn bộ dữ liệu.

summary(mk$bedrooms)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   1.000   2.000   3.000   2.965   3.000   6.000

Nhận xét: Qua bảng tóm tắt trên ta thấy các ngôi nhà có ít nhất 1 phòng ngủ và nhiều nhất là 6 phòng ngủ. Các ngôi nhà có số phòng ngủ trung bình là 3 phòng. Có 25% số ngôi nhà có số phòng ngủ nhỏ hơn 2 phòng, có 50% số ngôi nhà có số phòng ngủ nhỏ hơn 3 phòng và 75% số ngôi nhà có số phòng ngủ nhỏ hơn 3 phòng

summary(mk$stories)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   1.000   1.000   2.000   1.808   2.000   4.000

Nhận xét: Qua bảng tóm tắt trên ta thấy các ngôi nhà có ít nhất 1 tầng và nhiều nhất 4 tầng và trung bình các ngôi nhà có 2 tầng. Có 25% số ngôi nhà có số tầng nhỏ hơn 1 tầng, có 50% số ngôi nhà có số tầng nhỏ hơn 2 tầng và 75% số ngôi nhà có số tầng nhỏ hơn 2 tầng

summary(mk$garage)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##  0.0000  0.0000  0.0000  0.6923  1.0000  3.0000

Nhận xét: Qua bảng tóm tắt thống kê trên ta thấy số chỗ để xe nhỏ nhất là 0 và lớn nhất là 3 chỗ. Số chỗ để xe trung bình là 3 chỗ. Có 25% số ngôi nhà có số chỗ để xe nhỏ hơn 0, có 50% số ngôi nhà có số chỗ để xe nhỏ hơn 0 và 75% số ngôi nhà có số chỗ để xe nhỏ hơn 1 chỗ.

2.2.1 Biến số phòng tắm của ngôi nhà

2.2.1.1 Trung bình

mean(mk$bathrooms)
## [1] 1.285714

Nhận xét: Số phòng tắm trung bình của ngôi nhà là 1,235714

2.2.1.2 Phương sai

var(mk$bathrooms)
## [1] 0.2521625

Nhận xét: SỐ 0.2521625 đại diện cho mức độ phân tán của số phòng tắm so với giá bán trung bình

2.2.1.3 Độ lệch chuẩn

sd(mk$bathrooms)
## [1] 0.5021579

Nhận xét: Số 0,5021579 đo lường mức độ phân tán của giá bán cho số phòng tắm trung bình #### Tổng

sum(mk$bathrooms)
## [1] 702

Nhận xét: Có tới 702 phòng tắm trong 546 ngôi nhà #### Quantile

quantile(mk$bathrooms, .50)
## 50% 
##   1

Nhận xét: Hàm quantile dùng để tính phân vị của tập dữ liệu. Kết quả có 50% ngôi nhà có giá bán cho số phòng tắm ít hơn 1 phòng

2.3 Thống kê mô tả với hàm Aggregate và toán tử %>%

2.3.1 Hàm Aggregate

aggregate(HousePrices$lotsize,list(HousePrices$bedrooms), FUN="mean")
##   Group.1        x
## 1       1 3710.000
## 2       2 4636.235
## 3       3 5225.867
## 4       4 5582.063
## 5       5 6291.500
## 6       6 3950.000

Nhận xét: Nhà có 1 phòng ngủ có diện tích trung bình là 3710 mét vuông. Nhà có 2 phòng ngủ có diện tích trung binhg là 4636 mét vuông, 3 phòng ngủ là 5226 mét vuông, 4 phòng ngủ là 5582 mét vuông, 5 phòng ngủ là 6292 mét vuông và 6 phòng ngủ là 3950 mét vuông

aggregate(HousePrices$lotsize,list(HousePrices$garage), FUN="mean")
##   Group.1        x
## 1       0 4502.783
## 2       1 5576.357
## 3       2 6226.380
## 4       3 7178.333

Nhận xét: Diện tích trung bình của ngôi nhà có 3 chỗ để xe chiếm diện tích lớn nhất 7178 mét vuông, 2 chỗ để xe là 6226 mét vuông, 1 chỗ để xe là 5576 mét vuông và không có chỗ để xe chiếm diện tích bé nhất là 4503 mét vuông ### Toán tử %>%

library(tidyverse)
## Warning: package 'tidyverse' 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
## ✔ lubridate 1.9.2     ✔ tibble    3.2.1
## ✔ purrr     1.0.1     ✔ tidyr     1.3.0
## ── 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
mk %>% group_by(lotsize) %>% summarise(m=mean(garage))
## # A tibble: 4 × 2
##   lotsize     m
##   <fct>   <dbl>
## 1 S nhỏ   0.592
## 2 S vừa   0.847
## 3 S rộng  1.48 
## 4 <NA>    0.459
mk %>% group_by(lotsize) %>% summarise(m=var(garage))
## # A tibble: 4 × 2
##   lotsize     m
##   <fct>   <dbl>
## 1 S nhỏ   0.616
## 2 S vừa   0.823
## 3 S rộng  0.743
## 4 <NA>    0.544
mk %>% group_by(lotsize) %>% summarise(m=sd(garage))
## # A tibble: 4 × 2
##   lotsize     m
##   <fct>   <dbl>
## 1 S nhỏ   0.785
## 2 S vừa   0.907
## 3 S rộng  0.862
## 4 <NA>    0.738

2.3.2 Ghép dữ liệu lại thành một cột

a <- mk$bathrooms
a1 <- a[1:100]
a2 <- a[101:200]
bathrooms1 <- data.frame(sophong=a1,nguoimua="A")
bathrooms2 <- data.frame(sophong=a2,nguoimua="B")
bathroomsnew <- rbind(bathrooms1,bathrooms2)
bathroomsnew
##     sophong nguoimua
## 1         1        A
## 2         1        A
## 3         1        A
## 4         1        A
## 5         1        A
## 6         1        A
## 7         2        A
## 8         1        A
## 9         1        A
## 10        2        A
## 11        2        A
## 12        1        A
## 13        1        A
## 14        1        A
## 15        1        A
## 16        1        A
## 17        1        A
## 18        1        A
## 19        1        A
## 20        2        A
## 21        1        A
## 22        2        A
## 23        1        A
## 24        1        A
## 25        1        A
## 26        1        A
## 27        1        A
## 28        1        A
## 29        1        A
## 30        1        A
## 31        1        A
## 32        1        A
## 33        1        A
## 34        1        A
## 35        1        A
## 36        1        A
## 37        1        A
## 38        1        A
## 39        2        A
## 40        2        A
## 41        1        A
## 42        1        A
## 43        1        A
## 44        3        A
## 45        1        A
## 46        1        A
## 47        1        A
## 48        1        A
## 49        1        A
## 50        1        A
## 51        2        A
## 52        1        A
## 53        1        A
## 54        1        A
## 55        3        A
## 56        1        A
## 57        1        A
## 58        2        A
## 59        1        A
## 60        1        A
## 61        1        A
## 62        1        A
## 63        1        A
## 64        1        A
## 65        1        A
## 66        1        A
## 67        1        A
## 68        1        A
## 69        1        A
## 70        1        A
## 71        1        A
## 72        1        A
## 73        1        A
## 74        1        A
## 75        1        A
## 76        1        A
## 77        1        A
## 78        1        A
## 79        2        A
## 80        1        A
## 81        1        A
## 82        1        A
## 83        1        A
## 84        1        A
## 85        1        A
## 86        1        A
## 87        1        A
## 88        2        A
## 89        1        A
## 90        1        A
## 91        1        A
## 92        2        A
## 93        1        A
## 94        2        A
## 95        1        A
## 96        1        A
## 97        1        A
## 98        1        A
## 99        1        A
## 100       1        A
## 101       2        B
## 102       3        B
## 103       1        B
## 104       2        B
## 105       2        B
## 106       1        B
## 107       1        B
## 108       2        B
## 109       2        B
## 110       1        B
## 111       1        B
## 112       1        B
## 113       1        B
## 114       1        B
## 115       2        B
## 116       1        B
## 117       1        B
## 118       2        B
## 119       2        B
## 120       1        B
## 121       1        B
## 122       2        B
## 123       1        B
## 124       1        B
## 125       1        B
## 126       2        B
## 127       3        B
## 128       2        B
## 129       2        B
## 130       2        B
## 131       1        B
## 132       1        B
## 133       1        B
## 134       1        B
## 135       1        B
## 136       2        B
## 137       1        B
## 138       1        B
## 139       1        B
## 140       1        B
## 141       1        B
## 142       1        B
## 143       2        B
## 144       1        B
## 145       1        B
## 146       1        B
## 147       1        B
## 148       2        B
## 149       2        B
## 150       1        B
## 151       1        B
## 152       1        B
## 153       2        B
## 154       1        B
## 155       1        B
## 156       3        B
## 157       1        B
## 158       2        B
## 159       1        B
## 160       1        B
## 161       1        B
## 162       1        B
## 163       1        B
## 164       2        B
## 165       1        B
## 166       1        B
## 167       1        B
## 168       1        B
## 169       1        B
## 170       1        B
## 171       1        B
## 172       1        B
## 173       1        B
## 174       1        B
## 175       1        B
## 176       2        B
## 177       1        B
## 178       2        B
## 179       2        B
## 180       1        B
## 181       1        B
## 182       1        B
## 183       1        B
## 184       1        B
## 185       1        B
## 186       1        B
## 187       1        B
## 188       1        B
## 189       1        B
## 190       1        B
## 191       1        B
## 192       1        B
## 193       1        B
## 194       2        B
## 195       1        B
## 196       1        B
## 197       1        B
## 198       1        B
## 199       1        B
## 200       1        B

2.4 Vẽ biểu đổ

2.4.1 Biểu đồ cho biến số phòng tắm

hist(mk$bathrooms )

3 Bài tập về nhà tuần 1

3.1 Đọc dữ liệu từ file package AER

  • Đầu tiên để lấy được dữ liệu từ file AER thì chúng ta phải gọi lên gói package AER và sử dụng lệnh data để lấy dữ liệu từ gói package AER
library(AER)
data("HousePrices")

3.2 Thực hành

3.2.1 Tổng quan bộ dữ liệu

  • Trong phần này tôi sẽ thực hành một số thao tác là gán dữ liệu, đặt tên cho bộ dữ liệu, sử dụng str để hiển thị cấu trúc của dữ liệu, xem các quan sát đầu, quan sát cuối và tạo các bản tóm tắt cho dữ liệu

  • Đầu tiên tôi gán dataset HousePrices vào một biến có tên là mk

mk <- HousePrices
  • Tiếp đến tôi dùng lệnh str để xem cấu trúc dữ liệu của mk
str(mk)
## 'data.frame':    546 obs. of  12 variables:
##  $ price     : num  42000 38500 49500 60500 61000 66000 66000 69000 83800 88500 ...
##  $ lotsize   : num  5850 4000 3060 6650 6360 4160 3880 4160 4800 5500 ...
##  $ bedrooms  : num  3 2 3 3 2 3 3 3 3 3 ...
##  $ bathrooms : num  1 1 1 1 1 1 2 1 1 2 ...
##  $ stories   : num  2 1 1 2 1 1 2 3 1 4 ...
##  $ driveway  : Factor w/ 2 levels "no","yes": 2 2 2 2 2 2 2 2 2 2 ...
##  $ recreation: Factor w/ 2 levels "no","yes": 1 1 1 2 1 2 1 1 2 2 ...
##  $ fullbase  : Factor w/ 2 levels "no","yes": 2 1 1 1 1 2 2 1 2 1 ...
##  $ gasheat   : Factor w/ 2 levels "no","yes": 1 1 1 1 1 1 1 1 1 1 ...
##  $ aircon    : Factor w/ 2 levels "no","yes": 1 1 1 1 1 2 1 1 1 2 ...
##  $ garage    : num  1 0 0 0 0 0 2 0 0 1 ...
##  $ prefer    : Factor w/ 2 levels "no","yes": 1 1 1 1 1 1 1 1 1 1 ...
  • Nhận xét: Kết quả cho chúng ta thấy bộ dữ liệu này có 546 quan sát và có 12 biến. Giúp tôi có cái nhìn tổng quan hơn về các thành phần trong bộ dữ liệu Tiếp tục tôi dùng lệnh head để xem các quan sát đầu của mk và dùng lệnh tail để xem các quan sát cuối của mk
head(mk)
##   price lotsize bedrooms bathrooms stories driveway recreation fullbase gasheat
## 1 42000    5850        3         1       2      yes         no      yes      no
## 2 38500    4000        2         1       1      yes         no       no      no
## 3 49500    3060        3         1       1      yes         no       no      no
## 4 60500    6650        3         1       2      yes        yes       no      no
## 5 61000    6360        2         1       1      yes         no       no      no
## 6 66000    4160        3         1       1      yes        yes      yes      no
##   aircon garage prefer
## 1     no      1     no
## 2     no      0     no
## 3     no      0     no
## 4     no      0     no
## 5     no      0     no
## 6    yes      0     no
tail(mk)
##      price lotsize bedrooms bathrooms stories driveway recreation fullbase
## 541  85000    6525        3         2       4      yes         no       no
## 542  91500    4800        3         2       4      yes        yes       no
## 543  94000    6000        3         2       4      yes         no       no
## 544 103000    6000        3         2       4      yes        yes       no
## 545 105000    6000        3         2       2      yes        yes       no
## 546 105000    6000        3         1       2      yes         no       no
##     gasheat aircon garage prefer
## 541      no     no      1     no
## 542      no    yes      0     no
## 543      no    yes      0     no
## 544      no    yes      1     no
## 545      no    yes      1     no
## 546      no    yes      1     no
  • Kế tiếp tôi đặt tên cho 12 biến trong bộ dữ liệu bằng lệnh names để dễ dàng hơn trong việc xử lý dữ liệu và tôi gán các tên biến
names(mk) <- c("pr","lot","bed","bat","str","dr","rec","fb","gas","air","gar","pre")
price <- mk$pr
lotsize <- mk$lot
bedrooms <- mk$bed
bathrooms <- mk$bat
stories <- mk$str
  • Cuối cùng tôi dùng lệnh summary để tạo báo cáo tóm tắt trên dữ liệu mk. Báo cáo tóm tắt này bao gồm các thông tin như min, max, trung bình, trung vị, tứ phân vị của các biến
summary(mk)
##        pr              lot             bed             bat       
##  Min.   : 25000   Min.   : 1650   Min.   :1.000   Min.   :1.000  
##  1st Qu.: 49125   1st Qu.: 3600   1st Qu.:2.000   1st Qu.:1.000  
##  Median : 62000   Median : 4600   Median :3.000   Median :1.000  
##  Mean   : 68122   Mean   : 5150   Mean   :2.965   Mean   :1.286  
##  3rd Qu.: 82000   3rd Qu.: 6360   3rd Qu.:3.000   3rd Qu.:2.000  
##  Max.   :190000   Max.   :16200   Max.   :6.000   Max.   :4.000  
##       str          dr       rec        fb       gas       air     
##  Min.   :1.000   no : 77   no :449   no :355   no :521   no :373  
##  1st Qu.:1.000   yes:469   yes: 97   yes:191   yes: 25   yes:173  
##  Median :2.000                                                    
##  Mean   :1.808                                                    
##  3rd Qu.:2.000                                                    
##  Max.   :4.000                                                    
##       gar          pre     
##  Min.   :0.0000   no :418  
##  1st Qu.:0.0000   yes:128  
##  Median :0.0000            
##  Mean   :0.6923            
##  3rd Qu.:1.0000            
##  Max.   :3.0000
  • Nhận xét: Kết quả của bảng báo cáo tóm tắt trên cho chúng ta thấy
    • Mức giá bán của căn nhà thấp nhất là 25 nghìn đô và cao nhất là 190 nghìn đô và mức giá trung bình của các căn nhà là khoảng 68 nghìn đô
    • Căn nhà có diện tích lớn nhất trong khu vực có tổng diện tích là 16200 mét vuông và thấp nhất là 1650 mét vuông
    • Các căn nhà ở đây cho chúng ta thấy số lượng phòng ngủ, phòng tắm cao nhất rơi vào khoảng 4-6 phòng và thấp nhất là 1 phòng.
    • Dữ liệu trên cho chúng ta thấy các căn nhà ở đây tỷ lệ không có phòng giải trí chiếm 82,23% và tỷ lệ các ngôi nhà không có hệ thống sưởi bằng gas chiếm 95,42% và tỷ lệ các tầng hầm chưa được hoàn thiện chiếm 65%. Các số liệu trên chiếm tỷ lệ khá cao đến rất cao so với là tỷ lệ có

3.2.2 Xử lý dữ liệu

  • Để tìm hiểu xem diện tích các ngôi nhà khu vực này có diện tích như thế nào thì tôi lọc số ngôi nhà có diện tích lớn hơn 5000 mét vuông và gán chúng vào lot1
lot1 <- mk[mk$lot>5000,]
  • Nhận xét: Kết quả là 236 có nghĩa là các ngôi nhà ở đây có tổng diện tích trên 5000 mét vuông thì có 236 ngôi nhà chiếm tỷ lệ 43,22% trên tổng số.

  • Tôi dùng lệnh table để tạo một bảng số phòng ngủ của các ngôi nhà được bán và tôi chia chúng thành 5 tổ có khảng cách đều nhau

table(cut(mk$bed, breaks = c(0,1,2,3,4,5)))
## 
## (0,1] (1,2] (2,3] (3,4] (4,5] 
##     2   136   301    95    10
  • Nhận xét: Qua kết quả trên tôi thấy:
    • Nếu số lượng phòng ngủ là 1 thì ở thành phố Windsor có 2 ngôi nhà, chiếm tỷ lệ ít nhất (0,37%)
    • Nếu số lượng phòng ngủ từ 1 đến 2 phòng thì ở thành phố Windsor có 136 ngôi nhà, chiếm tỷ lệ cao thứ 2 (25%)
    • Nếu số lượng phòng ngủ từ 2 đến 3 phòng thì ở thành phố Windsor có 301 ngôi nhà, chiếm tỷ lệ cao nhất (55,13%)
    • Nếu số lượng phòng ngủ từ 3 đến 4 phòng thì ở thành phố Windsor có 95 ngôi nhà, chiếm tỷ lệ 17,4%
    • Nếu số lượng phòng ngủ từ 2 đến 3 phòng thì ở thành phố Windsor có 10 ngôi nhà, chiếm tỷ lệ 1,83%
  • Kế tiếp tôi dùng lệnh table để tạo một bảng tầng hầm của ngôi nhà đã được hoàn thiện hay chưa dựa vào số chỗ để xe
table(cut(mk$gar,3 ),mk$fb)
##             
##               no yes
##   (-0.003,1] 285 141
##   (1,2]       62  46
##   (2,3]        8   4
  • Nhận xét: Qua kết quả trên tôi thấy
    • Tầng hầm của ngôi nhà chưa được hoàn thiện có chỗ để xe dưới 1 là 285 ngôi nhà để xe chiếm 52,19% và đã được hoàn thiện là 141 ngôi nhà chiếm 25,82%
    • Tầng hầm của ngôi nhà chưa được hoàn thiện để có chỗ để xe từ 2 đến 3 chỗ là 8 ngôi nhà chiếm 1,46% và đã được hoàn thiện chiếm 0,73%. Vậy tầng hầm chưa được hoàn thiện có 1 chỗ để xe chiếm tỷ lệ cao nhất 52,19% và đã được hoàn thiện có chỗ để xe từ 2 đến 3 chỗ chiếm tỷ lệ thấp nhất 0.73%
  • Tôi muốn biết dữ liệu của stories dòng 4 cột 2 là bao nhiêu tôi dùng lệnh dưới đây
mk$str[4]
## [1] 2
mk[4,2]
## [1] 6650
  • Để tìm hiểu giá bán của các ngôi nhà ở đây thì tôi lọc số ngôi nhà có giá bán lớn hơn 50 nghìn đô và nhỏ hơn 90 nghìn đô và gán chúng vào k
k <- mk[mk$pr>50000 & mk$pr<90000,]
  • Kết quả tôi nhận được là có 290 ngôi đang có giá bán từ 50 nghìn đô tới 90 nghìn đô

  • Để biết được trong tất cả 546 ngôi nhà ở đây thì có bao nhiêu ngôi nhà có 3 phòng tắm thì tôi chọn biến bathrooms. Sau đó tôi gán chúng vào h và kết quả nhận được là có tới 10 ngôi nhà đang có phòng tắm chiếm 1,83% trong tổng số các ngôi nhà

h <- mk[mk$bat == 3,]
  • Để biết được trong tất cả 546 ngôi nhà ở đây thì có bao nhiêu ngôi nhà có 4 phòng ngủ thì tôi chọn biến bedrooms. Sau đó tôi gán chúng vào bed1 và kết quả nhận được là có tới 95 ngôi nhà đang có phòng ngủ chiếm 17,39% trong tổng số các ngôi nhà
bed1 <- mk[mk$bed == 4,]