’)

TÓM TẮT SÁCH

1.Giới thiệu và Các Khái niệm Cơ bản:

Cuốn sách bắt đầu bằng việc giới thiệu về mô hình thống kê và lý do cần sử dụng chúng cho phân tích dữ liệu. Nó trình bày các quy ước để mô tả dữ liệu và các kỹ thuật vẽ biểu đồ dữ liệu để khám phá mối quan hệ giữa các biến, ví dụ như biểu đồ FEV (forced expiratory volume) so với tuổi và chiều cao sử dụng dữ liệu lungcap. Cách mã hóa các biến yếu tố (factors) cũng được đề cập. Quan trọng là, mô hình thống kê được mô tả bao gồm cả thành phần ngẫu nhiên và hệ thống.

2. Mô hình Hồi quy Tuyến tính (Linear Regression Models - LRMs):

Cuốn sách xem xét LRMs như một trường hợp đặc biệt hoặc nền tảng cho GLMs. Mô hình hồi quy tuyến tính đơn giản được giới thiệu. Các quy ước ký hiệu được định nghĩa, bao gồm p là số biến giải thích và p’ là số tham số hồi quy. Nếu mô hình bao gồm hệ số chặn (constant term β0), thì p’ = p + 1. Dữ liệu lungcap được sử dụng làm ví dụ, trong đó một mô hình có thể có p=4 biến giải thích và p’=5 tham số hồi quy.

3. Cấu trúc của Mô hình Tuyến tính Tổng quát (GLMs):

GLMs mở rộng LRMs bằng cách cho phép biến phản hồi có phân phối khác ngoài phân phối Chuẩn và sử dụng hàm liên kết (link function) để liên hệ trung bình của biến phản hồi với tổ hợp tuyến tính của các biến giải thích.

  • Thành phần ngẫu nhiên: Mô tả phân phối của biến phản hồi y. Trong GLMs, phân phối này thuộc họ Mô hình Phân tán Lũy thừa (Exponential Dispersion Models - EDMs).
  • Thành phần hệ thống: Là tổ hợp tuyến tính của các biến giải thích và tham số hồi quy, thường được gọi là đoán báo tuyến tính (linear predictor), ký hiệu là η.
  • Hàm liên kết (Link function): Liên hệ trung bình của biến phản hồi (μ = E[y]) với đoán báo tuyến tính, tức là g(μ) = η.

4. Họ Phân phối Lũy thừa (EDMs):

Cuốn sách cung cấp một bảng tóm tắt chi tiết về các EDMs phổ biến được sử dụng trong GLMs:

  • Phân phối Chuẩn (Normal): V(μ)=1, φ=σ², hàm liên kết chính tắc θ=μ. Thường được sử dụng trong hồi quy tuyến tính.
  • Phân phối Nhị thức (Binomial): V(μ)=μ(1-μ), φ=1/m, hàm liên kết chính tắc θ=log(μ/(1-μ)) (logit). Dùng cho dữ liệu tỷ lệ hoặc số lượng sự kiện thành công trong n thử nghiệm. Có các quy tắc kinh nghiệm về khi nào xấp xỉ chuẩn là hợp lý (ví dụ: mμ ≥ 3 và m(1-μ) ≥ 3).
  • Phân phối Poisson: V(μ)=μ, φ=1, hàm liên kết chính tắc θ=log(μ) (log link). Dùng cho dữ liệu đếm. Quy tắc kinh nghiệm μ ≥ 3 thường được áp dụng.
  • Phân phối Nhị thức Âm (Negative Binomial): V(μ)=μ+μ²/k, φ=1, hàm liên kết chính tắc θ=log(μ/(μ+k)). Cũng dùng cho dữ liệu đếm, đặc biệt khi có phương sai lớn hơn trung bình (overdispersion) so với Poisson.
  • Phân phối Gamma: V(μ)=μ², φ là tham số hình dạng. Thường dùng cho dữ liệu liên tục dương lệch phải. Quy tắc kinh nghiệm φ ≤ 1/3.
  • Phân phối Gauss Ngược (Inverse Gaussian): V(μ)=μ³, φ là tham số phân tán. Cũng dùng cho dữ liệu liên tục dương lệch phải.
  • Phân phối Tweedie: Một họ phân phối tổng quát bao gồm nhiều phân phối khác như trường hợp đặc biệt (Poisson khi ξ=1, Gamma khi ξ=2). Đặc trưng bởi tham số chỉ số ξ. Thích hợp cho dữ liệu liên tục dương, đặc biệt khi rất lệch hoặc có số 0 chính xác. Cuốn sách xem xét chi tiết các trường hợp 1 < ξ < 2 và ξ ≥ 2.

Bảng cũng liệt kê hàm tích lũy κ(θ), tham số chính tắc θ, độ lệch đơn vị (unit deviance) d(y,μ), miền hỗ trợ S, miền cho μ (Ω) và miền cho θ (Θ) cho từng phân phối. Độ lệch đơn vị d(y,μ) được giải thích là một thước đo khoảng cách giữa giá trị quan sát y và giá trị trung bình μ.

5. Ước lượng Tham số:

Cuốn sách thảo luận về việc ước lượng các tham số hồi quy β và tham số phân tán φ trong GLMs. Ước lượng Hợp lý Tối đa (Maximum Likelihood) là phương pháp chính. Các phương pháp khác để ước lượng φ cũng được đề cập như độ lệch trung bình (Mean Deviance) và ước lượng Pearson.

6.Xây dựng và Chẩn đoán Mô hình:

  • Biến đổi Dữ liệu: Thảo luận về việc biến đổi biến phản hồi hoặc biến giải thích (ví dụ: log, căn bậc hai, nghịch đảo) để cải thiện mô hình, giải quyết vấn đề như phương sai không đổi hoặc mối quan hệ phi tuyến. Biểu đồ được sử dụng để đánh giá hiệu quả của các biến đổi.
  • Phân tích Phần dư (Residuals): Kiểm tra các giả định của mô hình bằng cách phân tích các loại phần dư khác nhau như phần dư chuẩn hóa (standardized residuals), phần dư độ lệch (deviance residuals), và phần dư quantile (quantile residuals). Các biểu đồ phần dư (ví dụ: phần dư chuẩn hóa so với giá trị phù hợp) được sử dụng để phát hiện vấn đề như phương sai không đổi, sự phi tuyến tính và các điểm bất thường. Biểu đồ Q-Q Chuẩn được sử dụng để kiểm tra giả định phân phối.
  • Điểm Ảnh hưởng (Influential Points): Các thước đo như khoảng cách Cook (Cook’s distance) được sử dụng để xác định các điểm dữ liệu có ảnh hưởng lớn đến kết quả mô hình.
  • So sánh và Lựa chọn Mô hình:
    • Sử dụng phân tích phương sai (Analysis of Variance - ANOVA) hoặc phân tích độ lệch (Analysis of Deviance) để so sánh các mô hình lồng nhau (nested models). Các kiểm định F (cho Normal GLMs hoặc khi ước lượng φ) và kiểm định Chi-square (độ lệch dư) được sử dụng. Thứ tự đưa các số hạng vào mô hình có thể ảnh hưởng đến kết quả của bảng ANOVA/Deviance.
    • Sử dụng các tiêu chí thông tin như AIC (Akaike Information Criterion) và BIC (Bayesian Information Criterion) để so sánh các mô hình, bao gồm cả các mô hình không lồng nhau hoặc sử dụng các phân phối khác nhau. Giá trị AIC/BIC thấp hơn thường được ưu tiên. Ví dụ về dữ liệu dmft cho thấy việc sử dụng log(DMFT) làm biến phản hồi là tốt hơn dựa trên AIC và BIC.
  • Nguyên tắc Biên độ (Marginality Principle): Nguyên tắc này được áp dụng khi xây dựng mô hình, khuyến nghị giữ lại các số hạng cấp thấp hơn khi có các số hạng tương tác chứa chúng, ngay cả khi các số hạng cấp thấp hơn đó không có ý nghĩa thống kê riêng lẻ.

7. Kiểm định Giả thuyết:

Cuốn sách thảo luận về các phương pháp kiểm định giả thuyết về các tham số hồi quy. - Kiểm định t: Dùng để kiểm định giả thuyết về một tham số đơn lẻ βj (thường là H0: βj = 0), sử dụng thống kê T = (β̂j - β0j) / se(β̂j). Dưới H0, T có phân phối t với n - p’ bậc tự do (khi phương sai σ² không biết). - Kiểm định Wald (Wald test): Dựa trên khoảng cách giữa ước lượng tham số β̂ và giá trị giả thuyết β0, sử dụng kết quả tiệm cận mẫu lớn. Có thể dùng cho kiểm định toàn cầu (global test) cho nhiều tham số cùng lúc. - Kiểm định Score (Score test): Một phương pháp kiểm định tiệm cận khác, dựa trên đạo hàm của hàm log-likelihood tại giá trị giả thuyết. - Cách diễn giải hệ số hồi quy trong mô hình với hàm liên kết khác hàm đồng nhất (identity link) cũng được minh họa, ví dụ, trong mô hình log(DMFT) hoặc log(Số lượng vệ tinh), các hệ số trên thang đo log được diễn giải thành các yếu tố nhân (multiplicative factors) trên thang đo gốc bằng cách lấy lũy thừa tự nhiên (exponentiating).

  • Dữ liệu lungcap: Dung tích phổi của thanh thiếu niên.

  • Dữ liệu dmft: Sâu răng liên quan đến tiêu thụ đường.

  • Dữ liệu hcrabs: Cua móng ngựa, số lượng cua vệ tinh.

  • Dữ liệu tobacco budworm: Tỷ lệ bướm đêm thuốc lá bị chết theo liều thuốc trừ sâu.

  • Dữ liệu cosmetic companies: Doanh thu và sử dụng polythene.

  • Dữ liệu gopher tortoise: Kích thước ổ trứng.

  • Dữ liệu ratliver: Lượng thuốc còn lại trong gan chuột.

  • Dữ liệu ct: Thời gian và liều bức xạ trong chụp CT.

  • Dữ liệu turbine: Tỷ lệ tuabin bị nứt.

  • Dữ liệu lime: Cây anh đào lá nhỏ.

  • Dữ liệu poison: Thời gian sống của động vật theo loại thuốc độc và xử lý.

9. Ứng dụng R:

Việc sử dụng phần mềm thống kê R được tích hợp xuyên suốt cuốn sách. Mã R được cung cấp để thực hiện các phân tích, từ đọc và vẽ dữ liệu đến phù hợp mô hình (lm, glm), chẩn đoán (plot, rstandard, cooks.distance, qqnorm), so sánh mô hình (anova, extractAIC), và tính toán thống kê kiểm định. Các chức năng R phổ biến được liệt kê trong mục lục, nhấn mạnh tính thực hành của cuốn sách.

THỐNG KÊ MÔ TẢ CÁC BIẾN

1.Đọc file CSV

a <- read.csv("C:/Users/Admin/Downloads/Supermarket Transactions.csv", 
                 header = TRUE, sep = ",")

2.Tổng quan dữ liệu

# Kích thước dữ liệu
dim(a)
## [1] 14059    16
# Tên biến
names(a)
##  [1] "X"                 "PurchaseDate"      "CustomerID"       
##  [4] "Gender"            "MaritalStatus"     "Homeowner"        
##  [7] "Children"          "AnnualIncome"      "City"             
## [10] "StateorProvince"   "Country"           "ProductFamily"    
## [13] "ProductDepartment" "ProductCategory"   "UnitsSold"        
## [16] "Revenue"
# Cấu trúc dữ liệu
str(a)
## 'data.frame':    14059 obs. of  16 variables:
##  $ X                : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ PurchaseDate     : chr  "2007-12-18" "2007-12-20" "2007-12-21" "2007-12-21" ...
##  $ CustomerID       : int  7223 7841 8374 9619 1900 6696 9673 354 1293 7938 ...
##  $ Gender           : chr  "F" "M" "F" "M" ...
##  $ MaritalStatus    : chr  "S" "M" "M" "M" ...
##  $ Homeowner        : chr  "Y" "Y" "N" "Y" ...
##  $ Children         : int  2 5 2 3 3 3 2 2 3 1 ...
##  $ AnnualIncome     : chr  "$30K - $50K" "$70K - $90K" "$50K - $70K" "$30K - $50K" ...
##  $ City             : chr  "Los Angeles" "Los Angeles" "Bremerton" "Portland" ...
##  $ StateorProvince  : chr  "CA" "CA" "WA" "OR" ...
##  $ Country          : chr  "USA" "USA" "USA" "USA" ...
##  $ ProductFamily    : chr  "Food" "Food" "Food" "Food" ...
##  $ ProductDepartment: chr  "Snack Foods" "Produce" "Snack Foods" "Snacks" ...
##  $ ProductCategory  : chr  "Snack Foods" "Vegetables" "Snack Foods" "Candy" ...
##  $ UnitsSold        : int  5 5 3 4 4 3 4 6 1 2 ...
##  $ Revenue          : num  27.38 14.9 5.52 4.44 14 ...
# Tóm tắt toàn bộ dataset
summary(a)
##        X         PurchaseDate         CustomerID       Gender         
##  Min.   :    1   Length:14059       Min.   :    3   Length:14059      
##  1st Qu.: 3516   Class :character   1st Qu.: 2549   Class :character  
##  Median : 7030   Mode  :character   Median : 5060   Mode  :character  
##  Mean   : 7030                      Mean   : 5117                     
##  3rd Qu.:10544                      3rd Qu.: 7633                     
##  Max.   :14059                      Max.   :10280                     
##  MaritalStatus       Homeowner            Children    AnnualIncome      
##  Length:14059       Length:14059       Min.   :0.00   Length:14059      
##  Class :character   Class :character   1st Qu.:1.00   Class :character  
##  Mode  :character   Mode  :character   Median :3.00   Mode  :character  
##                                        Mean   :2.53                     
##                                        3rd Qu.:4.00                     
##                                        Max.   :5.00                     
##      City           StateorProvince      Country          ProductFamily     
##  Length:14059       Length:14059       Length:14059       Length:14059      
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##                                                                             
##                                                                             
##                                                                             
##  ProductDepartment  ProductCategory      UnitsSold        Revenue     
##  Length:14059       Length:14059       Min.   :1.000   Min.   : 0.53  
##  Class :character   Class :character   1st Qu.:3.000   1st Qu.: 6.84  
##  Mode  :character   Mode  :character   Median :4.000   Median :11.25  
##                                        Mean   :4.081   Mean   :13.00  
##                                        3rd Qu.:5.000   3rd Qu.:17.37  
##                                        Max.   :8.000   Max.   :56.70

3.Thống kê mô tả cho các biến định lượng

# Thống kê mô tả cho biến định lượng
library(dplyr)
## Warning: package 'dplyr' was built under R version 4.4.3
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(tidyverse)
## Warning: package 'tidyverse' was built under R version 4.4.3
## Warning: package 'ggplot2' was built under R version 4.4.3
## Warning: package 'tidyr' was built under R version 4.4.1
## Warning: package 'readr' was built under R version 4.4.3
## Warning: package 'purrr' was built under R version 4.4.1
## Warning: package 'forcats' was built under R version 4.4.3
## Warning: package 'lubridate' was built under R version 4.4.1
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ forcats   1.0.0     ✔ readr     2.1.5
## ✔ ggplot2   3.5.2     ✔ stringr   1.5.1
## ✔ lubridate 1.9.3     ✔ tibble    3.2.1
## ✔ purrr     1.0.2     ✔ tidyr     1.3.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(knitr)
library(kableExtra)
## Warning: package 'kableExtra' was built under R version 4.4.3
## 
## Attaching package: 'kableExtra'
## 
## The following object is masked from 'package:dplyr':
## 
##     group_rows
quant_vars <- c("Children", "UnitsSold", "Revenue")
summary_stats_quant <- a %>%
  select(all_of(quant_vars)) %>%
  summarise_all(list(
    Mean = ~mean(., na.rm = TRUE),
    StdDev = ~sd(., na.rm = TRUE),
    Min = ~min(., na.rm = TRUE),
    Max = ~max(., na.rm = TRUE),
    Q1 = ~quantile(., 0.25, na.rm = TRUE),
    Median = ~quantile(., 0.5, na.rm = TRUE),
    Q3 = ~quantile(., 0.75, na.rm = TRUE)
  ))
# Chuyển đổi dữ liệu để trình bày bảng
stats_table <- data.frame(
  Variable = rep(quant_vars, each = 7),
  Statistic = rep(c("Mean", "StdDev", "Min", "Max", "Q1", "Median", "Q3"), times = length(quant_vars)),
  Value = c(
    summary_stats_quant$Children_Mean, summary_stats_quant$Children_StdDev, summary_stats_quant$Children_Min, 
    summary_stats_quant$Children_Max, summary_stats_quant$Children_Q1, summary_stats_quant$Children_Median, 
    summary_stats_quant$Children_Q3,
    summary_stats_quant$UnitsSold_Mean, summary_stats_quant$UnitsSold_StdDev, summary_stats_quant$UnitsSold_Min, 
    summary_stats_quant$UnitsSold_Max, summary_stats_quant$UnitsSold_Q1, summary_stats_quant$UnitsSold_Median, 
    summary_stats_quant$UnitsSold_Q3,
    summary_stats_quant$Revenue_Mean, summary_stats_quant$Revenue_StdDev, summary_stats_quant$Revenue_Min, 
    summary_stats_quant$Revenue_Max, summary_stats_quant$Revenue_Q1, summary_stats_quant$Revenue_Median, 
    summary_stats_quant$Revenue_Q3
  )
)
# Định dạng số (2 chữ số thập phân)
stats_table$Value <- round(stats_table$Value, 2)

# Tạo bảng HTML
kable(stats_table, format = "html", caption = "Thống kê mô tả cho các biến định lượng") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"), full_width = FALSE) %>%
  group_rows("Children", 1, 7) %>%
  group_rows("UnitsSold", 8, 14) %>%
  group_rows("Revenue", 15, 21)
Thống kê mô tả cho các biến định lượng
Variable Statistic Value
Children
Children Mean 2.53
Children StdDev 1.49
Children Min 0.00
Children Max 5.00
Children Q1 1.00
Children Median 3.00
Children Q3 4.00
UnitsSold
UnitsSold Mean 4.08
UnitsSold StdDev 1.17
UnitsSold Min 1.00
UnitsSold Max 8.00
UnitsSold Q1 3.00
UnitsSold Median 4.00
UnitsSold Q3 5.00
Revenue
Revenue Mean 13.00
Revenue StdDev 8.22
Revenue Min 0.53
Revenue Max 56.70
Revenue Q1 6.84
Revenue Median 11.25
Revenue Q3 17.37

4.Thống kê mô tả biến định tính

qual_vars <- c("Gender", "MaritalStatus", "Homeowner", "AnnualIncome", 
               "City", "StateorProvince", "Country", "ProductFamily", 
               "ProductDepartment", "ProductCategory")

for (var in qual_vars) {
  cat("\nThống kê cho biến", var, ":\n")
  freq_table <- table(a[[var]])
  prop_table <- prop.table(freq_table) * 100
  print(cbind(Frequency = freq_table, Percentage = round(prop_table, 1)))
  cat("Số danh mục:", length(freq_table), "\n")
}
## 
## Thống kê cho biến Gender :
##   Frequency Percentage
## F      7170         51
## M      6889         49
## Số danh mục: 2 
## 
## Thống kê cho biến MaritalStatus :
##   Frequency Percentage
## M      6866       48.8
## S      7193       51.2
## Số danh mục: 2 
## 
## Thống kê cho biến Homeowner :
##   Frequency Percentage
## N      5615       39.9
## Y      8444       60.1
## Số danh mục: 2 
## 
## Thống kê cho biến AnnualIncome :
##               Frequency Percentage
## $10K - $30K        3090       22.0
## $110K - $130K       643        4.6
## $130K - $150K       760        5.4
## $150K +             273        1.9
## $30K - $50K        4601       32.7
## $50K - $70K        2370       16.9
## $70K - $90K        1709       12.2
## $90K - $110K        613        4.4
## Số danh mục: 8 
## 
## Thống kê cho biến City :
##               Frequency Percentage
## Acapulco            383        2.7
## Bellingham          143        1.0
## Beverly Hills       811        5.8
## Bremerton           834        5.9
## Camacho             452        3.2
## Guadalajara          75        0.5
## Hidalgo             845        6.0
## Los Angeles         926        6.6
## Merida              654        4.7
## Mexico City         194        1.4
## Orizaba             464        3.3
## Portland            876        6.2
## Salem              1386        9.9
## San Andres          621        4.4
## San Diego           866        6.2
## San Francisco       130        0.9
## Seattle             922        6.6
## Spokane             875        6.2
## Tacoma             1257        8.9
## Vancouver           633        4.5
## Victoria            176        1.3
## Walla Walla         160        1.1
## Yakima              376        2.7
## Số danh mục: 23 
## 
## Thống kê cho biến StateorProvince :
##           Frequency Percentage
## BC              809        5.8
## CA             2733       19.4
## DF              815        5.8
## Guerrero        383        2.7
## Jalisco          75        0.5
## OR             2262       16.1
## Veracruz        464        3.3
## WA             4567       32.5
## Yucatan         654        4.7
## Zacatecas      1297        9.2
## Số danh mục: 10 
## 
## Thống kê cho biến Country :
##        Frequency Percentage
## Canada       809        5.8
## Mexico      3688       26.2
## USA         9562       68.0
## Số danh mục: 3 
## 
## Thống kê cho biến ProductFamily :
##                Frequency Percentage
## Drink               1250        8.9
## Food               10153       72.2
## Non-Consumable      2656       18.9
## Số danh mục: 3 
## 
## Thống kê cho biến ProductDepartment :
##                     Frequency Percentage
## Alcoholic Beverages       356        2.5
## Baked Goods               425        3.0
## Baking Goods             1072        7.6
## Beverages                 680        4.8
## Breakfast Foods           188        1.3
## Canned Foods              977        6.9
## Canned Products           109        0.8
## Carousel                   59        0.4
## Checkout                   82        0.6
## Dairy                     903        6.4
## Deli                      699        5.0
## Eggs                      198        1.4
## Frozen Foods             1382        9.8
## Health and Hygiene        893        6.4
## Household                1420       10.1
## Meat                       89        0.6
## Periodicals               202        1.4
## Produce                  1994       14.2
## Seafood                   102        0.7
## Snack Foods              1600       11.4
## Snacks                    352        2.5
## Starchy Foods             277        2.0
## Số danh mục: 22 
## 
## Thống kê cho biến ProductCategory :
##                      Frequency Percentage
## Baking Goods               484        3.4
## Bathroom Products          365        2.6
## Beer and Wine              356        2.5
## Bread                      425        3.0
## Breakfast Foods            417        3.0
## Candles                     45        0.3
## Candy                      352        2.5
## Canned Anchovies            44        0.3
## Canned Clams                53        0.4
## Canned Oysters              35        0.2
## Canned Sardines             40        0.3
## Canned Shrimp               38        0.3
## Canned Soup                404        2.9
## Canned Tuna                 87        0.6
## Carbonated Beverages       154        1.1
## Cleaning Supplies          189        1.3
## Cold Remedies               93        0.7
## Dairy                      903        6.4
## Decongestants               85        0.6
## Drinks                     135        1.0
## Eggs                       198        1.4
## Electrical                 355        2.5
## Frozen Desserts            323        2.3
## Frozen Entrees             118        0.8
## Fruit                      765        5.4
## Hardware                   129        0.9
## Hot Beverages              226        1.6
## Hygiene                    197        1.4
## Jams and Jellies           588        4.2
## Kitchen Products           217        1.5
## Magazines                  202        1.4
## Meat                       761        5.4
## Miscellaneous               42        0.3
## Packaged Vegetables         48        0.3
## Pain Relievers             192        1.4
## Paper Products             345        2.5
## Pizza                      194        1.4
## Plastic Products           141        1.0
## Pure Juice Beverages       165        1.2
## Seafood                    102        0.7
## Side Dishes                153        1.1
## Snack Foods               1600       11.4
## Specialty                  289        2.1
## Starchy Foods              277        2.0
## Vegetables                1728       12.3
## Số danh mục: 45

5.Vẽ biểu đồ

# Thống kê số lượng và tỷ lệ phần trăm
gender_freq <- table(a$Gender)
gender_percent <- round(prop.table(gender_freq) * 100, 2)

# Kết hợp thành bảng tổng hợp
summary_gender <- data.frame(
  Category = names(gender_freq),
  Count = as.vector(gender_freq),
  Percentage = as.vector(gender_percent)
)

categorical_vars <- c("Gender", "MaritalStatus", "Homeowner", "AnnualIncome")

# Tạo danh sách màu cho từng biến
color_list <- list(
  Gender = c("#f5f5f5", "#73c6b6"),
  MaritalStatus = c("#ff9999", "#66b2ff", "#99ff99"),
  Homeowner = c("#ffcc99", "#66cc99"),
  AnnualIncome = c("#a6cee3", "#1f78b4", "#b2df8a", "#33a02c")
)

for (var in categorical_vars) {
  freq <- table(a[[var]])
  percent <- round(prop.table(freq) * 100, 2)
  
  pie(
    freq,
    labels = paste0(names(freq), ": ", percent, "%"),
    main = paste("Biểu đồ tròn thể hiện tỷ lệ phần trăm các quan sát của biến", var),
    col = color_list[[var]][1:length(freq)] 
  )
}

library(tidyverse)

freq_table <- table(a$Gender)
prop_table <- prop.table(freq_table) * 100
plot_data <- data.frame(
  Category = names(freq_table),
  Percentage = as.numeric(prop_table)
)
p <- ggplot(plot_data, aes(x = Category, y = Percentage, fill = Category)) +
  geom_bar(stat = "identity") +
  labs(title = "Phân phối của Gender", x = "Gender", y = "Tỷ lệ (%)") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1), legend.position = "none") +
  scale_fill_brewer(palette = "Set2")
print(p)