1 Phần 1: Tóm tắt sách

Generalized Linear Models With Examples in R là cuốn sách giáo khoa hoặc tài liệu hướng dẫn chuyên sâu về Mô hình Tuyến tính Tổng quát (Generalized Linear Models - GLMs), đặc biệt nhấn mạnh vào việc áp dụng và minh họa các khái niệm bằng cách sử dụng phần mềm R. Cuốn sách được cấu trúc một cách logic, bắt đầu từ các mô hình cơ bản đến các mô hình phức tạp hơn, và bao gồm các phần quan trọng về lý thuyết, suy luận, chẩn đoán và ứng dụng.

Các phần chính được trình bày như sau:


1.1 MÔ HÌNH THỐNG KÊ (Statistical Models)


1.1.1 Khái niệm cơ bản

  • Mô hình thống kê được sử dụng để mô tả cả các đặc điểm ngẫu nhiên và có hệ thống của dữ liệu.

  • Mô hình hồi quy là một loại mô hình thống kê. Việc diễn giải các mô hình hồi quy là một phần quan trọng.

  • Một triết lý quan trọng: “Tất cả các mô hình đều sai, nhưng một số hữu ích”.

1.1.2 Mục đích

Ảnh hưởng đến cách nó được phát triển. Có sự cân bằng giữa độ chính xác (Accuracy) và tính tiết kiệm (Parsimony) khi xây dựng mô hình.

Thu thập dữ liệu và khả năng tổng quát hóa (Generalizability) cũng là các yếu tố quan trọng. Đề cập đến các quy ước mô tả dữ liệu, vẽ biểu đồ dữ liệu và mã hóa cho các yếu tố phân loại.

1.1.3 Mô tả dữ liệu

Tài liệu sử dụng nhiều bộ dữ liệu thực tế để minh họa, trong đó bộ dữ liệu lungcap (liên quan đến dung tích thở gắng sức - FEV của thanh thiếu niên theo tuổi - Age, chiều cao - Height, giới tính - Gender và tình trạng hút thuốc - Smoke) được sử dụng thường xuyên nhất và xuất hiện ngay từ phần đầu của tài liệu.

Việc vẽ biểu đồ dữ liệu là một bước quan trọng để khám phá mối quan hệ giữa các biến. Các ví dụ bao gồm biểu đồ FEV so với Age và Height cho toàn bộ dữ liệu và theo nhóm Smoke(người hút thuốc/không hút thuốc).

1.1.4 Mô hình thống kê

Mô hình thống kê được giải thích bao gồm hai thành phần chính: Thành phần Ngẫu nhiên (Random Component) mô tả phân phối của biến phản hồi tại một tổ hợp biến giải thích nhất định, và Thành phần Hệ thống (Systematic Component) mô tả mối quan hệ toán học giữa giá trị trung bình của biến phản hồi và các biến giải thích. Với kỳ vọng, phương sai không đổi \(\text{var}[y_i] = \sigma^2\):

\[ \mu_i = \mathbb{E}[y_i] = \beta_0 + \beta_1 x_{1i} + \beta_2 x_{2i} + \beta_3 x_{3i} +..+ \beta_n x_{ni} \] \[ y_i \sim \mathcal{N}(\mu_i, \sigma^2) \]

Các quy ước ký hiệu cho mô hình hồi quy tuyến tính được giới thiệu, bao gồm số lượng biến giải thích p và số lượng tham số hồi quy p′.


1.2 MÔ HÌNH HỒI QUY TUYẾN TÍNH (Linear Regression Models)


1.2.1 Thành phần của mô hình

Mô hình hồi quy tuyến tính bao gồm hai thành phần chính:

  • Thành phần hệ thống (Systematic component):
    Mô tả mối quan hệ giữa kỳ vọng của biến phản hồi \(y\) và các biến giải thích \(x\). Dạng tổng quát:

    \[ \mu_i = \beta_0 + \beta_1 x_{1i} + \beta_2 x_{2i} + \beta_3 x_{3i} + \beta_4 x_{4i} \]

    Trong đó, \(\beta_0, \beta_1, \ldots\) là các hệ số hồi quy cần được ước lượng từ dữ liệu.

  • Thành phần ngẫu nhiên (Random component):
    Mô tả sự biến thiên của các quan sát xung quanh giá trị trung bình dự đoán. Trong hồi quy tuyến tính tiêu chuẩn, giả định:

    \[ \text{Var}(y_i) = \sigma^2 \]

    với \(\sigma^2\) là phương sai không đổi (homoscedasticity), cần được ước lượng từ dữ liệu.

Ví dụ đơn giản:
Một mô hình hồi quy tuyến tính đơn có thể viết là: \[ \mu_i = \beta_0 + \beta_1 x_i \]


1.2.2 Ước lượng tham số

  • Tổng bình phương phần dư (RSS – Residual Sum of Squares):

\[ \text{RSS} = \sum w_i (y_i - \hat{\mu}_i)^2 \]

trong đó \(w_i\) là trọng số (bằng 1 nếu không có trọng số), và \(\hat{\mu}_i\) là giá trị dự đoán từ mô hình.

  • Bậc tự do phần dư (Residual Degrees of Freedom):

\[ df = n - p' \]

với \(p'\) là số hệ số trong mô hình (bao gồm cả hệ số chặn).

  • Ước lượng không chệch của phương sai \(\sigma^2\):

\[ s^2 = \frac{\text{RSS}}{n - p'} \]

  • Ma trận phương sai–hiệp phương sai của \(\hat{\beta}\):

\[ \text{Var}(\hat{\beta}) = s^2 (X^\top W X)^{-1} \]


1.2.3 Đánh giá và So sánh mô hình

  • Hệ số xác định R²:

\[ R^2 = 1 - \frac{\text{RSS}}{\text{SST}} \]

trong đó SST là tổng bình phương sai lệch so với trung bình.

  • So sánh mô hình lồng nhau (Nested Models):
    Sử dụng phân tích phương sai (ANOVA) và kiểm định F để xem mô hình phức tạp có cải thiện đáng kể hay không.

Công thức kiểm định F:

\[ F = \frac{\text{RSS}_{\text{reduced}} - \text{RSS}_{\text{full}}}{p_{\text{full}} - p_{\text{reduced}}} \div s^2_{\text{full}} \]

Trong đó:

  • \(\text{RSS}_{\text{reduced}}\): Tổng bình phương phần dư của mô hình rút gọn
  • \(\text{RSS}_{\text{full}}\): Tổng bình phương phần dư của mô hình đầy đủ
  • \(p_{\text{reduced}}\): Số tham số của mô hình rút gọn
  • \(p_{\text{full}}\): Số tham số của mô hình đầy đủ
  • \(s^2_{\text{full}}\): Ước lượng phương sai phần dư của mô hình đầy đủ, tính theo:

\[ s^2_{\text{full}} = \frac{\text{RSS}_{\text{full}}}{n - p_{\text{full}}} \]

  • So sánh mô hình không lồng nhau:
    Dựa vào các tiêu chí:

    • AIC (Akaike Information Criterion)

    \[ \text{AIC} = -2 \cdot \ell(\hat{\theta}) + 2k \]

    • BIC (Bayesian Information Criterion)

\[ \text{BIC} = -2 \cdot \ell(\hat{\theta}) + \log(n) \cdot k \]

Trong đó:

  • \(\ell(\hat{\theta})\): log-likelihood tại ước lượng cực đại (MLE).

  • \(k\): Số lượng tham số trong mô hình (bao gồm cả hệ số chặn β₀).

  • \(n\): Kích thước mẫu.

    Các tiêu chí này phạt mô hình phức tạp. Giá trị AIC/BIC càng nhỏ (gần −∞), mô hình càng tốt.

  • Nguyên tắc biên (Marginality Principle):
    Nếu mô hình chứa tương tác giữa các biến, thì các hiệu ứng chính tương ứng nên được giữ lại.

1.3 CHẨN ĐOÁN MÔ HÌNH HỒI QUY TUYẾN TÍNH (Linear Regression Models: Diagnostics and Model-Building)


1.3.1 Mục tiêu

Kiểm tra các giả định của mô hình hồi quy tuyến tính:

  • Phương sai không đổi (Homoscedasticity)
  • Tính độc lập của phần dư
  • Phân phối chuẩn của phần dư (hoặc biến phản hồi)

1.3.2 Công cụ phân tích phần dư

  • Standardized residuals
  • Deviance residuals
  • Quantile residuals

1.3.3 Biểu đồ chẩn đoán

  • Residuals vs Fitted: phát hiện phương sai không đồng nhất hoặc quan hệ phi tuyến chưa mô hình hóa
  • Normal Q-Q Plot: kiểm tra phân phối chuẩn của phần dư
  • Scale-Location, Residuals vs Leverage: kiểm tra ảnh hưởng và phương sai phần dư

1.3.4 Thước đo ảnh hưởng

1.3.4.1 Hat values (\(h_i\))

\[ h_i = \frac{1}{n} + \frac{(x_i - \bar{x})^2}{\sum_{j=1}^n (x_j - \bar{x})^2}, \quad h_i \in \left[\frac{1}{n}, 1\right] \]

1.3.4.2 Cook’s Distance (\(D_i\))

\[ D_i = \frac{(\hat{\mu} - \hat{\mu}_{(i)})^T(\hat{\mu} - \hat{\mu}_{(i)})}{p' \cdot s^2} \] Trong đó: - \(\hat{\mu}\): vector dự đoán từ mô hình đầy đủ
- \(\hat{\mu}_{(i)}\): vector dự đoán khi bỏ quan sát thứ i
- \(p'\): số tham số
- \(s^2\): phương sai phần dư

1.3.4.3 Các thước đo ảnh hưởng khác

  • DFFITS: ảnh hưởng của điểm dữ liệu đến giá trị dự đoán
  • DFBETAS: ảnh hưởng đến từng hệ số hồi quy

1.3.5 Xây dựng Mô hình (Model Building)

1.3.5.1 Biến đổi biến (Transformations)

  • Logarithm: log(y) hoặc log(x)
  • Căn bậc hai: sqrt(x)
  • Nghịch đảo: 1/x

Ví dụ dữ liệu:

  • log(FEV) (dữ liệu phổi)
  • log(Volume), log(Girth) (cây anh đào)
  • log(MaxWt), log(Temp), log(FoodCon) (dữ liệu cá)

1.3.5.3 Splines hồi quy (Regression Splines)

  • poly()đa thức toàn cục
  • ns()natural cubic splines
  • bs()B-splines

1.3.5.4 Biến tương tác (Interaction Terms)

Khi hiệu ứng của một biến phụ thuộc vào biến khác:
Ví dụ: Sugar * Industrialization

1.3.5.5 Lựa chọn biến (Variable Selection)

Tìm tập hợp con tối ưu của các biến giải thích. Một số kỹ thuật:

  • stepAIC() – lựa chọn bước (forward/backward)
  • regsubsets() từ leaps package
  • glmnet() – hồi quy LASSO / Ridge

1.4 ƯỚC LƯỢNG HỢP LÝ TỐI ĐA (MAXIMUM LIKELIHOOD ESTIMATION – MLE)


1.4.1 Khái quát

Phương pháp OLS (bình phương tối thiểu) hoạt động tốt trong điều kiện lý tưởng: dữ liệu liên tục, phương sai đồng nhất và phân phối chuẩn. Tuy nhiên, dữ liệu thực tế có thể là nhị phân, đếm, hoặc chỉ nhận giá trị dương. Khi đó, phương pháp Ước lượng Hợp lý Tối đa (MLE) là lựa chọn phù hợp hơn, đặc biệt với các mô hình tuyến tính tổng quát (GLM).


1.4.2 Hàm hợp lý và Log-likelihood

Với một mẫu độc lập \(y_1, y_2, ..., y_n\) có phân phối xác suất \(f(y_i; \theta)\), ta có:

  • Hàm hợp lý: \[ L(\theta) = \prod_{i=1}^{n} f(y_i; \theta) \]

  • Log-likelihood: \[ \ell(\theta) = \log L(\theta) = \sum_{i=1}^{n} \log f(y_i; \theta) \]

Việc sử dụng log-likelihood giúp đơn giản hóa biểu thức và tối ưu dễ hơn.


1.4.3 Tìm Ước lượng MLE

MLE là giá trị \(\hat{\theta}\) sao cho: \[ \hat{\theta} = \arg\max_{\theta} \ell(\theta) \quad \Rightarrow \quad \frac{\partial \ell}{\partial \theta} = 0 \]

Giải phương trình trên thường sử dụng kỹ thuật số như Newton-Raphson hoặc Fisher Scoring. Ước lượng MLE có tính chất bất biến và cho phép ước lượng sai số chuẩn.


1.4.4 Hàm Score và Thông tin Fisher


Thành phần Công thức Vai trò
Score \(S(\theta) = \frac{\partial \ell}{\partial \theta}\), với \(E[S(\theta)] = 0\) Kiểm định giả thuyết
Thông tin Fisher \(I(\theta) = -E\left[\frac{\partial^2 \ell}{\partial \theta^2}\right]\) Lượng thông tin chứa trong dữ liệu
Phương sai \(\mathrm{Var}(\hat{\theta}) \approx I(\hat{\theta})^{-1}\) Xấp xỉ phương sai
Sai số chuẩn \(SE(\hat{\theta}) = \sqrt{I(\hat{\theta})^{-1}}\) Sai số chuẩn của ước lượng

1.4.5 Tính chất Tiệm cận của MLE

Khi \(n \to \infty\), MLE có các tính chất:

  • Nhất quán: \(\hat{\theta} \xrightarrow{p} \theta\)
  • Không chệch tiệm cận: \(E[\hat{\theta}] \to \theta\)
  • Hiệu quả: Đạt giới hạn Cramér–Rao
  • Phân phối chuẩn tiệm cận: \[ \hat{\theta} \overset{.}{\sim} N(\theta, I(\theta)^{-1}) \]

1.4.6 Kiểm định Giả thuyết dựa trên MLE

Tên Công thức Phân phối
Wald test \(Z = \frac{\hat{\theta} - \theta_0}{SE(\hat{\theta})} \Rightarrow Z^2 \sim \chi^2_1\) Chuẩn hóa
Likelihood Ratio (LR) \(LR = 2[\ell(\hat{\theta}) - \ell(\theta_0)] \sim \chi^2_{df}\) So sánh mô hình
Score test (LM) \(S = \frac{S(\theta_0)^2}{I(\theta_0)} \sim \chi^2_{df}\) Đạo hàm tại \(\theta_0\)

1.4.7 Lựa chọn Mô hình Không lồng

Đối với hai mô hình không lồng nhau, ta so sánh qua:

  • AIC: \[ AIC = -2\ell + 2k \]

  • BIC: \[ BIC = -2\ell + k \log n \]

Trong đó:

  • \(\ell\): log-likelihood tối đa
  • \(k\): số tham số
  • \(n\): kích thước mẫu

Mô hình có AIC/BIC nhỏ hơn thường được ưu tiên.


1.4.8 Ứng dụng MLE trong Dữ liệu không tuân chuẩn


Loại dữ liệu Phân phối Hàm liên kết \(h(\mu)\) Ý nghĩa tham số
Nhị phân Bernoulli \(\text{logit}(\mu)\) Logistic regression
Đếm Poisson \(\log(\mu)\) Tần suất sự kiện
Dương liên tục Gamma, Inverse-Gaussian \(\log(\mu),\,\mu^{-1}\) Chi phí, thời gian, v.v.


1.5 CẤU TRÚC CỦA MÔ HÌNH TUYẾN TÍNH TỔNG QUÁT (GLM STRUCTURE)


1.5.1 Giới thiệu

Mô hình tuyến tính tổng quát (Generalized Linear Model - GLM) là một mở rộng của hồi quy tuyến tính, cho phép xử lý các loại dữ liệu không tuân theo phân phối chuẩn, như dữ liệu nhị phân, đếm, tỷ lệ, hoặc dương liên tục. GLM bao gồm nhiều mô hình như hồi quy logistic, Poisson, Gamma…

Mỗi GLM gồm ba thành phần cơ bản: - Phân phối xác suất (thuộc họ hàm mũ một tham số), - Hàm liên kết, - Cấu trúc tuyến tính hệ số.


1.5.2 Cấu trúc của GLM

1.5.2.1 Thành phần ngẫu nhiên

Giả định biến phản hồi \(y_i\) tuân theo phân phối thuộc họ hàm mũ một tham số:

\[ f(y_i; \theta_i, \phi) = \exp\left\{ \frac{y_i \theta_i - b(\theta_i)}{\phi} + c(y_i, \phi) \right\} \]

Trong đó: - \(\theta_i\): tham số tự nhiên (natural parameter) - \(\phi\): tham số phân tán (dispersion parameter), ví dụ \(\phi = 1\) với Poisson - \(b(\cdot)\): hàm log phân hoạch - \(c(\cdot, \cdot)\): hàm chuẩn hóa

Một số phân phối trong họ này gồm: Normal, Binomial, Poisson, Gamma…

1.5.2.2 Thành phần hệ thống

Predictor tuyến tính giống hồi quy tuyến tính:

\[ \eta_i = \mathbf{x}_i^\top \boldsymbol{\beta} = \beta_0 + \beta_1 x_{i1} + \dots + \beta_p x_{ip} \]

Trong đó: - \(\eta_i\): predictor tuyến tính - \(\mathbf{x}_i\): vector biến giải thích cho quan sát \(i\) - \(\boldsymbol{\beta}\): vector hệ số hồi quy

1.5.3 Gặp ở các mô hình GLM

1.5.3.1 Logistic Regression (Nhị phân)

\[ y_i \sim \text{Bernoulli}(\pi_i), \quad \log\left( \frac{\pi_i}{1 - \pi_i} \right) = \eta_i \]

Ứng dụng: kết quả nhị phân như “có/không”, “sống/chết”…

1.5.3.2 Poisson Regression (Dữ liệu đếm)

\[ y_i \sim \text{Poisson}(\mu_i), \quad \log(\mu_i) = \mathbf{x}_i^\top \boldsymbol{\beta} \]

Dùng trong các dữ liệu: số sự kiện, vi phạm, ca bệnh…

1.5.3.3 Gamma Regression (Dữ liệu dương)

\[ y_i \sim \text{Gamma}(\alpha, \mu_i), \quad g(\mu_i) = \log(\mu_i) \text{ hoặc } g(\mu_i) = \frac{1}{\mu_i} \]

Thường dùng cho chi phí, thời gian, độ dài…


1.5.4 Hàm phương sai (Variance Function)

Phương sai \(y_i\) trong GLM không cần đồng nhất, mà phụ thuộc vào giá trị kỳ vọng:

\[ \operatorname{Var}(y_i) = \phi \cdot V(\mu_i) \]

Trong đó: - \(\phi\): tham số phân tán - \(V(\mu)\): hàm phương sai, thay đổi theo phân phối —

Phân phối \(V(\mu)\)
Normal 1
Binomial \(\mu(1 - \mu)\)
Poisson \(\mu\)
Gamma \(\mu^2\)

Việc mô hình hóa phương sai như vậy giúp xử lý hiện tượng phương sai thay đổi (heteroscedasticity) – điều mà OLS không thể làm.


1.6 ƯỚC LƯỢNG TRONG MÔ HÌNH TUYẾN TÍNH TỔNG QUÁT (GLMs)

1.6.1 Giới thiệu

Sau khi xác định ba thành phần của GLM (phân phối, hàm liên kết và thành phần tuyến tính), bước tiếp theo là ước lượng các hệ số \(\boldsymbol{\beta}\) thông qua phương pháp ước lượng hợp lý tối đa (MLE). Khác với hồi quy tuyến tính cổ điển sử dụng OLS, GLM thường áp dụng thuật toán Iteratively Reweighted Least Squares (IRLS), cho phép cập nhật lặp lại các hệ số \(\boldsymbol{\beta}\) dựa trên trọng số điều chỉnh phù hợp với đặc điểm của phân phối và hàm liên kết được chọn


1.6.2 Ước lượng hợp lý tối đa trong GLM

Giả sử ta có tập dữ liệu gồm:

  • Biến phản hồi: \(y_1, y_2, ..., y_n\) (có thể là đếm, nhị phân hoặc liên tục dương),
  • Biến giải thích: \(\boldsymbol{x}_i = (x_{i1}, ..., x_{ip})\).

GLM được mô tả dưới dạng:

\[ g(\mu_i) = \eta_i = \boldsymbol{x}_i^\top \boldsymbol{\beta}, \quad \mu_i = \mathbb{E}[y_i] = g^{-1}(\boldsymbol{x}_i^\top \boldsymbol{\beta}) \]

Hàm log-likelihood cần cực đại hóa là:

\[ \ell(\boldsymbol{\beta}) = \sum_{i=1}^n \log f(y_i; \theta_i) \]

Trong đó:

  • \(f(y_i; \theta_i)\) là mật độ (hoặc khối) xác suất thuộc họ hàm mũ,
  • \(\theta_i\) liên quan đến \(\mu_i\), do đó cũng liên hệ với \(\boldsymbol{\beta}\).

MLE được thực hiện thông qua thuật toán IRLS.


1.6.3 Thuật toán IRLS

1.6.3.1 Nguyên lý

Thuật toán IRLS là phương pháp lặp, trong đó mỗi vòng lặp thực hiện một bước hồi quy tuyến tính có trọng số. Hai thành phần quan trọng cần cập nhật liên tục là:

  • Biến giả (working response): \[ z_i = \eta_i + \frac{y_i - \mu_i}{\frac{d\mu_i}{d\eta_i}} \]

  • Trọng số: \[ W_i = \left( \frac{d\mu_i}{d\eta_i} \right)^2 \bigg/ \text{Var}(y_i) \]

1.6.3.2 Hệ phương trình IRLS

Suy ra:

\[ X^\top W X \hat{\beta} = X^\top W z \]

Lặp lại đến khi \(\hat{\boldsymbol{\beta}}\) hội tụ.


1.6.4 Hàm điểm, ma trận Fisher và phương sai

1.6.4.1 Hàm điểm (Score Function)

\[ U(\boldsymbol{\beta}) = \frac{\partial \ell(\boldsymbol{\beta})}{\partial \boldsymbol{\beta}} \]

Ước lượng cực đại thỏa mãn \(U(\boldsymbol{\beta}) = 0\).

1.6.4.2 Ma trận Fisher

Ma trận thông tin Fisher:

\[ I(\beta) = -\mathbb{E}\left[\frac{\partial^2 \ell(\beta)}{\partial \beta \, \partial \beta^\top} \right] \]

Xấp xỉ phương sai của ước lượng:

\[ \text{Var}(\hat{\boldsymbol{\beta}}) \approx (\boldsymbol{X}^\top \boldsymbol{W} \boldsymbol{X})^{-1} \]

Thể hiện: Với mô hình lớn, nên giải hệ phương trình hơn là đảo trực tiếp để tránh sai số số học.


1.6.5 Sai số chuẩn và khoảng tin cậy

1.6.5.1 Sai số chuẩn:

Với ma trận hiệp phương sai đã tính được, sai số chuẩn từng hệ số:

\[ SE(\hat{\beta}_j) = \sqrt{[\text{Var}(\hat{\boldsymbol{\beta}})]_{jj}} \]

1.6.5.2 Khoảng tin cậy:

\[ \hat{\beta}_j \pm z_{\alpha/2} \cdot SE(\hat{\beta}_j) \]

Trong đó: \(z_{\alpha/2}\) là phân vị chuẩn (ví dụ: 1.96 cho 95%).

1.6.5.3 Kiểm định Wald:

  • Giả thuyết: \(H_0: \beta_j = 0\)
  • Thống kê kiểm định:

\[ Z = \frac{\hat{\beta}_j}{SE(\hat{\beta}_j)} \sim \mathcal{N}(0,1) \]

Nếu \(|Z| > z_{\alpha/2}\) → bác bỏ \(H_0\).


1.6.6 Ước lượng tham số phân tán

Trong một số GLM, cần ước lượng tham số phân tán \(\phi\):

\[ \hat{\phi} = \frac{1}{n - p} \sum_{i=1}^n \frac{(y_i - \hat{\mu}_i)^2}{V(\hat{\mu}_i)} \]

Trong đó:

  • \(n\): số quan sát,
  • \(p\): số tham số (kể cả hệ số chặn),
  • \(V(\hat{\mu}_i)\) là hàm phương sai, phụ thuộc vào phân phối:

Phân phối Hàm phương sai \(V(\mu)\)
Gaussian 1
Poisson \(\mu\)
Binomial (logit) \(\mu(1 - \mu)\)


1.7 ĐÁNH GIÁ MỨC ĐỘ PHÙ HỢP VÀ LỰA CHỌN MÔ HÌNH TRONG GLM

1.7.1 Giới thiệu

Sau khi ước lượng tham số \(\beta\) trong GLM, cần đánh giá độ phù hợp của mô hình và lựa chọn mô hình tốt nhất khi có nhiều lựa chọn. Các công cụ phổ biến gồm: Deviance, kiểm định \(\chi^2\), AIC, BIC, so sánh mô hình lồng nhau, đồ thị phần dư và điểm ảnh hưởng.

1.7.2 Deviance

Deviance đo mức độ khác biệt giữa mô hình hiện tại và mô hình bão hòa (saturated model): \[ D(y; \hat{\mu}) = 2 \left[ \ell(y; y) - \ell(\hat{\mu}; y) \right] \] với \(\ell(y;y)\) là log-likelihood của mô hình bão hòa, \(\ell(\hat{\mu};y)\) là log-likelihood của mô hình hiện tại. Deviance càng nhỏ mô hình càng phù hợp.

1.7.3 So sánh mô hình bằng kiểm định deviance

Khi hai mô hình lồng nhau, kiểm định sai biệt deviance: \[ \Delta D = D_{\text{reduced}} - D_{\text{full}} \sim \chi^2_{df} \] với \(df\) là số tham số bị ràng buộc. Nếu \(\Delta D\) lớn và \(p\)-value nhỏ, mô hình đầy đủ tốt hơn.

1.7.4 Đồ thị chẩn đoán và phần dư

Các loại phần dư:

  • Phần dư thô: \(e_i = y_i - \hat{\mu}_i\)
  • Phần dư Pearson: \(r_i = \frac{y_i - \hat{\mu}_i}{\sqrt{V(\hat{\mu}_i)}}\)
  • Phần dư deviance: \(d_i = \operatorname{sign}(y_i - \hat{\mu}_i) \sqrt{2[\ell(y_i;y_i) - \ell(\hat{\mu}_i;y_i)]}\)

Biểu đồ chẩn đoán (Residuals vs Fitted, Q-Q plot, Scale-Location, Cook’s distance) giúp phát hiện điểm ngoại lai và điểm ảnh hưởng.

1.7.5 Kiểm định Pearson Chi-square

Phép kiểm định Pearson: \[ X^2 = \sum_{i=1}^n \frac{(y_i - \hat{\mu}_i)^2}{V(\hat{\mu}_i)} \] Nếu \(X^2\) lớn hơn phân phối \(\chi^2\) với bậc tự do thích hợp, mô hình có thể không phù hợp.

1.7.6 Độ phân tán và overdispersion

Mô hình Poisson, Binomial giả định hệ số phân tán \(\phi = 1\). Overdispersion xảy ra khi phương sai thực tế lớn hơn lý thuyết.

Ước lượng hệ số phân tán: \[ \hat{\phi} = \frac{\text{Deviance}}{n - p} \] với \(n\) là số quan sát, \(p\) số tham số. Nếu \(\hat{\phi} > 1.5\), mô hình có thể bị overdispersed.

Giải pháp: dùng quasi-Poisson hoặc Negative Binomial.


1.8 HỒI QUY LOGISTIC

1.8.1 Giới thiệu

Hồi quy logistic là mô hình phổ biến thuộc họ GLM, dùng để phân tích biến phản hồi nhị phân \(y \in \{0,1\}\), ví dụ như bệnh/không bệnh, mua/không mua. Mục tiêu là mô hình hóa xác suất \(\mu_i = P(y_i=1)\) bằng hàm liên kết logit:

\[ g(\mu_i) = \log \frac{\mu_i}{1-\mu_i} = \eta_i = x_i^T \beta. \]

1.8.2 Phân phối Bernoulli và log-likelihood

Biến \(y_i\) theo phân phối Bernoulli với tham số \(\pi_i = P(y_i=1)\), log-likelihood tổng thể là:

\[ \ell(\beta) = \sum_{i=1}^n \left[ y_i \log(\pi_i) + (1 - y_i) \log(1 - \pi_i) \right]. \]

Giải nghiệm tối ưu không có nghiệm đóng, cần dùng thuật toán IRLS để tìm ước lượng \(\hat{\beta}\).

1.8.3 Diễn giải hệ số

Hệ số \(\beta_j\) thể hiện log-odds ratio, với:

\[ \text{Odds ratio} = \exp(\beta_j). \]

Nếu \(\beta_j > 0\), biến giải thích làm tăng xác suất \(y=1\); nếu \(\beta_j < 0\), làm giảm xác suất này.

1.8.4 Kiểm định và khoảng tin cậy

Kiểm định Wald được dùng để đánh giá từng hệ số với:

\[ Z_j = \frac{\hat{\beta}_j}{SE(\hat{\beta}_j)} \sim N(0,1). \]

Khoảng tin cậy 95% cho \(\beta_j\) được tính theo công thức:

\[ \hat{\beta}_j \pm z_{0.975} \times SE(\hat{\beta}_j). \]

Chuyển sang odds ratio bằng cách lấy hàm mũ.

1.8.5 Đánh giá mô hình

Sử dụng deviance và pseudo-\(R^2\) để đánh giá sự phù hợp:

\[ D = -2 [\ell(\hat{\beta}) - \ell_{\text{saturated}}], \quad R^2 = 1 - \frac{D_{\text{model}}}{D_{\text{null}}}. \]

1.8.6 Mở rộng đa biến

Mô hình có thể bao gồm nhiều biến giải thích:

\[ \log \frac{\pi_i}{1 - \pi_i} = \beta_0 + \beta_1 x_{i1} + \cdots + \beta_p x_{ip}. \]

1.8.7 Mô hình tỷ lệ (Grouped binomial)

Khi dữ liệu tổng hợp theo nhóm:

\[ y_i \sim \text{Binomial}(n_i, \pi_i), \]

với log-likelihood:

\[ \ell(\beta) = \sum_{i=1}^n \left[ y_i \log(\pi_i) + (n_i - y_i) \log(1 - \pi_i) \right]. \]


1.9 HỒI QUY POISSON

1.9.1 Giới thiệu

Hồi quy Poisson dùng cho biến đếm \(y \in \{0,1,2,\dots\}\) như số lần nhập viện, tai nạn,… Mục tiêu là mô hình kỳ vọng số sự kiện dựa trên đặc tính \(x\).

1.9.2 Phân phối Poisson và liên kết log

Phân phối xác suất:

\[ P(y_i) = \frac{e^{-\mu_i} \mu_i^{y_i}}{y_i!}, \quad \mu_i = E[y_i]. \]

Hàm liên kết log chuẩn:

\[ \eta_i = \log(\mu_i) = x_i^T \beta \implies \mu_i = e^{x_i^T \beta}. \]

1.9.3 Log-likelihood và ước lượng

Log-likelihood:

\[ \ell(\beta) = \sum_{i=1}^n \left[ y_i x_i^T \beta - e^{x_i^T \beta} - \log(y_i!) \right]. \]

Ước lượng bằng IRLS từ phương trình điểm.

1.9.4 Diễn giải hệ số

Hệ số \(\beta_j\) biểu thị tác động log tuyến tính tới kỳ vọng sự kiện; \(e^{\beta_j}\) là tỷ lệ thay đổi kỳ vọng khi \(x_j\) tăng 1 đơn vị.

1.9.5 Offset và tỷ lệ

Khi thời gian quan sát khác nhau, dùng offset \(\log(t_i)\) để điều chỉnh mô hình:

\[ \log(\mu_i) = \log(t_i) + x_i^T \beta. \]

1.9.6 Overdispersion

Khi phương sai vượt quá kỳ vọng \(\text{Var}(y_i) > \mu_i\), gọi là overdispersion. Có thể dùng quasi-Poisson hoặc Negative Binomial để xử lý.

1.9.7 Đánh giá mô hình

Sử dụng deviance, AIC, kiểm định deviance, biểu đồ phần dư và kiểm định Pearson để đánh giá.

1.9.8 So sánh mô hình


Mô hình Khi dùng
Poisson Khi phương sai gần bằng kỳ vọng
Quasi-Poisson Khi có overdispersion nhẹ
Negative Binomial Khi overdispersion nặng hoặc nhiều giá trị 0

1.10 HỒI QUY GAMMA

1.10.1 Giới thiệu

Hồi quy Gamma phù hợp với dữ liệu dương liên tục, phương sai tỷ lệ với bình phương kỳ vọng, ví dụ chi phí y tế, thời gian sống.

1.10.2 Phân phối Gamma

Giả định:

\[ y_i \sim \text{Gamma}(\alpha, \mu_i), \quad \text{với } \operatorname{Var}(y_i) = \phi \mu_i^2. \]

1.10.2.1 Hàm mật độ và liên kết

Hàm mật độ thuộc họ exponential family, với liên kết log:

\[ g(\mu_i) = \log(\mu_i) = \eta_i = x_i^T \beta. \]

1.10.2.2 Ước lượng

Ước lượng tham số qua MLE dùng IRLS, log-likelihood:

\[ \ell(\beta) = \sum_{i=1}^n \left[ -\log(\mu_i) - \frac{y_i}{\mu_i} \right] + \text{hằng số}. \]

1.10.3 Diễn giải hệ số

Với liên kết log, \(\beta_j\) biểu thị tác động log tuyến tính lên kỳ vọng \(\mu_i\), tức khi \(x_j\) tăng 1 đơn vị, \(\mu_i\) thay đổi theo tỷ lệ \(e^{\beta_j}\).

1.10.4 Kiểm định và khoảng tin cậy

Kiểm định Wald và khoảng tin cậy cho \(\beta_j\) tương tự các mô hình GLM khác, có thể chuyển sang tỷ lệ thay đổi trung bình bằng hàm mũ.

1.10.5 Kiểm tra độ phù hợp

Sử dụng deviance và Pearson chi-square để đánh giá mô hình và phát hiện overdispersion.

1.10.6 So sánh với mô hình khác


Mô hình Khi dùng
Hồi quy tuyến tính Dữ liệu chuẩn, phương sai không đổi
Hồi quy Gamma Dữ liệu dương, phương sai tỷ lệ với bình phương trung bình
Hồi quy log-normal Khi log biến đáp ứng phân phối chuẩn

1.11 DỮ LIỆU NHÓM HOẶC TỶ LỆ (GROUPED DATA OR PROPORTIONS)

1.11.1 Giới thiệu

  • Dữ liệu nhị phân 0/1 thường dùng hồi quy logistic.
  • Với dữ liệu nhóm (grouped) hoặc tỷ lệ (proportion)
  • Dùng GLM nhị thức tổng quát (binomial GLM) cho số thành công trên số thử.

1.11.2 Mô hình hóa số thành công trong nhóm

  • \(y_i \sim \text{Binomial}(n_i, \pi_i)\)
  • Mô hình logit:
    \[ \log\frac{\pi_i}{1-\pi_i} = \eta_i = \mathbf{x}_i^T \boldsymbol{\beta} \implies \pi_i = \frac{e^{\mathbf{x}_i^T \boldsymbol{\beta}}}{1+e^{\mathbf{x}_i^T \boldsymbol{\beta}}} \]
  • Kỳ vọng và phương sai:
    \[ \mu_i = E[y_i] = n_i \pi_i, \quad \mathrm{Var}(y_i) = n_i \pi_i (1 - \pi_i) \]
  • Phù hợp cho dữ liệu dạng “n trials, k successes”.

1.11.3 Log-likelihood và IRLS

  • Hàm log-likelihood:
    \[ \ell(\boldsymbol{\beta}) = \sum_i \left[ y_i \log(\pi_i) + (n_i - y_i) \log(1 - \pi_i) \right] \]
  • Tối đa hóa bằng IRLS, trọng số:
    \[ w_i = n_i \pi_i (1-\pi_i) \]
  • Biến giả:
    \[ z_i = \eta_i + \frac{y_i - n_i \pi_i}{n_i \pi_i (1-\pi_i)} \]

1.11.4 Ưu điểm so với mô hình nhị phân


Dạng dữ liệu Mô hình Ghi chú
0/1 từng cá nhân Hồi quy logistic \(y_i \sim \mathrm{Bernoulli}(\pi_i)\)
Nhóm nhiều cá nhân Binomial GLM \(y_i \sim \mathrm{Binomial}(n_i, \pi_i)\)

Chú thích: Mô hình nhóm cho kết quả ước lượng chính xác hơn do tận dụng tổng số thử nghiệm \(n_i\) trên mỗi quan sát.


1.11.5 Dữ liệu tỷ lệ (proportions)

  • Với tỷ lệ \(y_i/n_i\) (0 < tỷ lệ < 1), dùng mô hình:
    \[ \log \frac{y_i/n_i}{1 - y_i/n_i} = \mathbf{x}_i^T \boldsymbol{\beta} \]
  • Cần chỉ rõ số lần thử \(n_i\) để tính đúng phương sai.

1.11.6 Kiểm định mô hình

  • Wald test cho các hệ số.
  • Kiểm định deviance giữa mô hình đầy đủ và rút gọn.
  • AIC/BIC chọn mô hình.
  • Phần dư Pearson/deviance phát hiện điểm bất thường.

1.11.7 Kiểm tra overdispersion

  • Giả định phương sai:
    \[ \mathrm{Var}(y_i) = n_i \pi_i (1-\pi_i) \]
  • Nếu phương sai quan sát lớn hơn (overdispersion), kiểm tra:
    \[ \hat{\phi} = \frac{\text{Deviance}}{n - p} \]
  • Nếu \(\hat{\phi} > 1.5\), chuyển sang mô hình quasi-binomial.

1.12 MÔ HÌNH TUYẾN TÍNH TỔNG QUÁT TWEEDEE (TWEEDIE GLMs)

  • Họ phân phối Tweedie là một trường hợp đặc biệt của EDM, được đặc trưng bởi chỉ số Tweedie \(\xi\).

Phương sai của biến ngẫu nhiên \(Y\) được mô hình hóa theo dạng:

\[ \mathrm{Var}(Y) = \phi \mu^p \]

trong đó:

  • \(\mu = E[Y]\): kỳ vọng của \(Y\)
  • \(\phi > 0\): hệ số phân tán (dispersion parameter)
  • \(p\): chỉ số sức mạnh (power index) xác định kiểu phân phối và độ phụ thuộc phương sai vào kỳ vọng
  • Các trường hợp đặc biệt:
    • Poisson: \(\xi = 1\), \(\phi = 1\)
    • Gamma: \(\xi = 2\)
  • Biến đổi Box-Cox với \(\lambda = -1\) tương ứng với biến đổi ổn định phương sai cho Tweedie với \(\xi = 4\), xấp xỉ \(1/y\).

1.13 CÁC PHẦN BỔ TRỢ


Một phụ lục hoặc chương giới thiệu về sử dụng R cho phân tích dữ liệu, bao gồm các khái niệm cơ bản và hàm R.

Phần Tài liệu tham khảo (References) liệt kê các nguồn trích dẫn.

Phần Lời giải cho Bài tập (Selected Solutions) cung cấp lời giải chi tiết cho một số bài tập từ các chương khác nhau.

Một Chỉ mục Bộ dữ liệu (Index: Data sets) liệt kê các bộ dữ liệu được sử dụng trong sách cùng với trang tham chiếu.


Tóm lại, tài liệu này cung cấp một cái nhìn toàn diện về GLM, từ nền tảng lý thuyết dựa trên EDM và độ lệch dư, đến các khía cạnh thực hành như suy luận, chẩn đoán và xây dựng mô hình, với các ví dụ chi tiết và hướng dẫn sử dụng R cho các loại dữ liệu khác nhau (liên tục, nhị phân, đếm, tỷ lệ, dương liên tục, dương liên tục có zero).


2 Phần 2: Thống kê mô tả

2.1 GIỚI THIỆU BỘ DỮ LIỆU VÀ CÁC BIẾN

Bộ dữ liệu ghi nhận các giao dịch mua hàng của khách trong một khoảng thời gian nhất định, bao gồm nhiều thông tin chi tiết về đặc điểm khách hàng, vị trí địa lý, cùng các đặc điểm sản phẩm và giao dịch. Bộ dữ liệu gồm 14.059 quan sát và 16 biến.

Các biến trong bộ dữ liệu gồm:

library(readxl)
## Warning: package 'readxl' was built under R version 4.4.3
Supermarket_Transactions <- read_excel("C:/Users/Lenovo/Downloads/Supermarket Transactions.xlsx")#Tải dữ liệu lên
## New names:
## • `` -> `...1`
names(Supermarket_Transactions)
##  [1] "...1"              "PurchaseDate"      "CustomerID"       
##  [4] "Gender"            "MaritalStatus"     "Homeowner"        
##  [7] "Children"          "AnnualIncome"      "City"             
## [10] "StateorProvince"   "Country"           "ProductFamily"    
## [13] "ProductDepartment" "ProductCategory"   "UnitsSold"        
## [16] "Revenue"
dim(Supermarket_Transactions)
## [1] 14059    16
  • PurchaseDate: Ngày thực hiện giao dịch mua hàng.

  • CustomerID: Mã định danh duy nhất của khách hàng.

  • Gender: Giới tính của khách hàng (F: nữ, M: nam).

  • MaritalStatus: Tình trạng hôn nhân của khách hàng (S: độc thân, M: đã kết hôn).

  • Homeowner: Khách hàng có sở hữu nhà hay không (Y: có, N: không).

  • Children: Số lượng con cái của khách hàng.

  • AnnualIncome: Thu nhập hàng năm của khách hàng, được phân loại theo khoảng giá trị.

  • City: Thành phố cư trú của khách hàng.

  • StateorProvince: Bang hoặc tỉnh thành nơi khách hàng cư trú.

  • Country: Quốc gia của khách hàng.

  • ProductFamily: Nhóm sản phẩm chính, phân loại theo đặc tính chung.

  • ProductDepartment: Nhóm sản phẩm nằm trong sản phẩm chính, giúp phân loại sản phẩm cụ thể hơn.

  • ProductCategory: Danh mục cụ thể của sản phẩm, mô tả chi tiết hơn về loại mặt hàng.

  • UnitsSold: Số lượng đơn vị sản phẩm được bán trong giao dịch.

  • Revenue: Doanh thu thu được từ giao dịch.


2.2 THỐNG KÊ MÔ TẢ CHUNG


2.2.1 Các biến định lượng

library(psych)
## Warning: package 'psych' was built under R version 4.4.3
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
describe(select(Supermarket_Transactions, Revenue, UnitsSold, Children))
##           vars     n  mean   sd median trimmed  mad  min  max range  skew
## Revenue      1 14059 13.00 8.22  11.25   12.05 7.40 0.53 56.7 56.17  1.13
## UnitsSold    2 14059  4.08 1.17   4.00    4.08 1.48 1.00  8.0  7.00  0.01
## Children     3 14059  2.53 1.49   3.00    2.53 1.48 0.00  5.0  5.00 -0.02
##           kurtosis   se
## Revenue       1.39 0.07
## UnitsSold    -0.44 0.01
## Children     -1.03 0.01

Trên tổng số 14 059 giao dịch, ta có các chỉ số tóm tắt như sau:

  • Doanh thu (Revenue)

    • Trung bình (mean): 13,00.
    • Độ lệch chuẩn (sd): 8,22.
    • Trung vị (median): 11,25.
    • Độ lệch (skew): 1,13, phản ánh đuôi phải kéo dài do một số đơn giá trị lớn.
    • Độ nhọn (kurtosis): 1,39, phân phối có đỉnh nhọn hơn chuẩn.
  • Số đơn vị bán được (UnitsSold)

    • Trung bình (mean): 4,08.
    • Độ lệch chuẩn (sd): 1,17.
    • Trung vị (median): 4,00.
    • Độ lệch (skew): 0,01 – gần như không lệch, cho thấy phân phối khá đối xứng.
    • Độ nhọn (kurtosis): -0,44 – phân phối có phần bẹt hơn so với chuẩn.
  • Số trẻ em (Children)

    • Trung bình (mean): 2,53.
    • Độ lệch chuẩn (sd): 1,49.
    • Trung vị (median): 3,00.
    • Độ lệch (skew): -0,02 – gần bằng 0, cho thấy phân phối rất cân đối.
    • Độ nhọn (kurtosis): -1,03 – phân phối khá bẹt, thể hiện giá trị phân tán rộng hơn so với phân phối chuẩn.
# Liệt kê các biến định tính
data <- c("Gender", "MaritalStatus", "Homeowner", "AnnualIncome", 
                      "City", "StateorProvince", "Country", 
                      "ProductFamily", "ProductDepartment", "ProductCategory")
# Thống kê mô tả
for (var in data) {
  cat("===== Thống kê mô tả cho biến:", var, "=====\n")
  print(table(Supermarket_Transactions[[var]]))
  cat("\nTỷ lệ phần trăm:\n")
  print(round(prop.table(table(Supermarket_Transactions[[var]])) * 100, 2))
  cat("\n\n")
}
## ===== Thống kê mô tả cho biến: Gender =====
## 
##    F    M 
## 7170 6889 
## 
## Tỷ lệ phần trăm:
## 
##  F  M 
## 51 49 
## 
## 
## ===== Thống kê mô tả cho biến: MaritalStatus =====
## 
##    M    S 
## 6866 7193 
## 
## Tỷ lệ phần trăm:
## 
##     M     S 
## 48.84 51.16 
## 
## 
## ===== Thống kê mô tả cho biến: Homeowner =====
## 
##    N    Y 
## 5615 8444 
## 
## Tỷ lệ phần trăm:
## 
##     N     Y 
## 39.94 60.06 
## 
## 
## ===== Thống kê mô tả cho biến: AnnualIncome =====
## 
##   $10K - $30K $110K - $130K $130K - $150K       $150K +   $30K - $50K 
##          3090           643           760           273          4601 
##   $50K - $70K   $70K - $90K  $90K - $110K 
##          2370          1709           613 
## 
## Tỷ lệ phần trăm:
## 
##   $10K - $30K $110K - $130K $130K - $150K       $150K +   $30K - $50K 
##         21.98          4.57          5.41          1.94         32.73 
##   $50K - $70K   $70K - $90K  $90K - $110K 
##         16.86         12.16          4.36 
## 
## 
## ===== Thống kê mô tả cho biến: City =====
## 
##      Acapulco    Bellingham Beverly Hills     Bremerton       Camacho 
##           383           143           811           834           452 
##   Guadalajara       Hidalgo   Los Angeles        Merida   Mexico City 
##            75           845           926           654           194 
##       Orizaba      Portland         Salem    San Andres     San Diego 
##           464           876          1386           621           866 
## San Francisco       Seattle       Spokane        Tacoma     Vancouver 
##           130           922           875          1257           633 
##      Victoria   Walla Walla        Yakima 
##           176           160           376 
## 
## Tỷ lệ phần trăm:
## 
##      Acapulco    Bellingham Beverly Hills     Bremerton       Camacho 
##          2.72          1.02          5.77          5.93          3.22 
##   Guadalajara       Hidalgo   Los Angeles        Merida   Mexico City 
##          0.53          6.01          6.59          4.65          1.38 
##       Orizaba      Portland         Salem    San Andres     San Diego 
##          3.30          6.23          9.86          4.42          6.16 
## San Francisco       Seattle       Spokane        Tacoma     Vancouver 
##          0.92          6.56          6.22          8.94          4.50 
##      Victoria   Walla Walla        Yakima 
##          1.25          1.14          2.67 
## 
## 
## ===== Thống kê mô tả cho biến: StateorProvince =====
## 
##        BC        CA        DF  Guerrero   Jalisco        OR  Veracruz        WA 
##       809      2733       815       383        75      2262       464      4567 
##   Yucatan Zacatecas 
##       654      1297 
## 
## Tỷ lệ phần trăm:
## 
##        BC        CA        DF  Guerrero   Jalisco        OR  Veracruz        WA 
##      5.75     19.44      5.80      2.72      0.53     16.09      3.30     32.48 
##   Yucatan Zacatecas 
##      4.65      9.23 
## 
## 
## ===== Thống kê mô tả cho biến: Country =====
## 
## Canada Mexico    USA 
##    809   3688   9562 
## 
## Tỷ lệ phần trăm:
## 
## Canada Mexico    USA 
##   5.75  26.23  68.01 
## 
## 
## ===== Thống kê mô tả cho biến: ProductFamily =====
## 
##          Drink           Food Non-Consumable 
##           1250          10153           2656 
## 
## Tỷ lệ phần trăm:
## 
##          Drink           Food Non-Consumable 
##           8.89          72.22          18.89 
## 
## 
## ===== Thống kê mô tả cho biến: ProductDepartment =====
## 
## Alcoholic Beverages         Baked Goods        Baking Goods           Beverages 
##                 356                 425                1072                 680 
##     Breakfast Foods        Canned Foods     Canned Products            Carousel 
##                 188                 977                 109                  59 
##            Checkout               Dairy                Deli                Eggs 
##                  82                 903                 699                 198 
##        Frozen Foods  Health and Hygiene           Household                Meat 
##                1382                 893                1420                  89 
##         Periodicals             Produce             Seafood         Snack Foods 
##                 202                1994                 102                1600 
##              Snacks       Starchy Foods 
##                 352                 277 
## 
## Tỷ lệ phần trăm:
## 
## Alcoholic Beverages         Baked Goods        Baking Goods           Beverages 
##                2.53                3.02                7.63                4.84 
##     Breakfast Foods        Canned Foods     Canned Products            Carousel 
##                1.34                6.95                0.78                0.42 
##            Checkout               Dairy                Deli                Eggs 
##                0.58                6.42                4.97                1.41 
##        Frozen Foods  Health and Hygiene           Household                Meat 
##                9.83                6.35               10.10                0.63 
##         Periodicals             Produce             Seafood         Snack Foods 
##                1.44               14.18                0.73               11.38 
##              Snacks       Starchy Foods 
##                2.50                1.97 
## 
## 
## ===== Thống kê mô tả cho biến: ProductCategory =====
## 
##         Baking Goods    Bathroom Products        Beer and Wine 
##                  484                  365                  356 
##                Bread      Breakfast Foods              Candles 
##                  425                  417                   45 
##                Candy     Canned Anchovies         Canned Clams 
##                  352                   44                   53 
##       Canned Oysters      Canned Sardines        Canned Shrimp 
##                   35                   40                   38 
##          Canned Soup          Canned Tuna Carbonated Beverages 
##                  404                   87                  154 
##    Cleaning Supplies        Cold Remedies                Dairy 
##                  189                   93                  903 
##        Decongestants               Drinks                 Eggs 
##                   85                  135                  198 
##           Electrical      Frozen Desserts       Frozen Entrees 
##                  355                  323                  118 
##                Fruit             Hardware        Hot Beverages 
##                  765                  129                  226 
##              Hygiene     Jams and Jellies     Kitchen Products 
##                  197                  588                  217 
##            Magazines                 Meat        Miscellaneous 
##                  202                  761                   42 
##  Packaged Vegetables       Pain Relievers       Paper Products 
##                   48                  192                  345 
##                Pizza     Plastic Products Pure Juice Beverages 
##                  194                  141                  165 
##              Seafood          Side Dishes          Snack Foods 
##                  102                  153                 1600 
##            Specialty        Starchy Foods           Vegetables 
##                  289                  277                 1728 
## 
## Tỷ lệ phần trăm:
## 
##         Baking Goods    Bathroom Products        Beer and Wine 
##                 3.44                 2.60                 2.53 
##                Bread      Breakfast Foods              Candles 
##                 3.02                 2.97                 0.32 
##                Candy     Canned Anchovies         Canned Clams 
##                 2.50                 0.31                 0.38 
##       Canned Oysters      Canned Sardines        Canned Shrimp 
##                 0.25                 0.28                 0.27 
##          Canned Soup          Canned Tuna Carbonated Beverages 
##                 2.87                 0.62                 1.10 
##    Cleaning Supplies        Cold Remedies                Dairy 
##                 1.34                 0.66                 6.42 
##        Decongestants               Drinks                 Eggs 
##                 0.60                 0.96                 1.41 
##           Electrical      Frozen Desserts       Frozen Entrees 
##                 2.53                 2.30                 0.84 
##                Fruit             Hardware        Hot Beverages 
##                 5.44                 0.92                 1.61 
##              Hygiene     Jams and Jellies     Kitchen Products 
##                 1.40                 4.18                 1.54 
##            Magazines                 Meat        Miscellaneous 
##                 1.44                 5.41                 0.30 
##  Packaged Vegetables       Pain Relievers       Paper Products 
##                 0.34                 1.37                 2.45 
##                Pizza     Plastic Products Pure Juice Beverages 
##                 1.38                 1.00                 1.17 
##              Seafood          Side Dishes          Snack Foods 
##                 0.73                 1.09                11.38 
##            Specialty        Starchy Foods           Vegetables 
##                 2.06                 1.97                12.29

2.3 MÔ PHỎNG CỤ THỂ


2.3.1 Các mặt hàng sản phẩm

library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.4.3
## 
## Attaching package: 'ggplot2'
## The following objects are masked from 'package:psych':
## 
##     %+%, alpha
library(scales)
## Warning: package 'scales' was built under R version 4.4.3
## 
## Attaching package: 'scales'
## The following objects are masked from 'package:psych':
## 
##     alpha, rescale
df_drink <- Supermarket_Transactions %>% filter(ProductFamily == "Drink")
# Đếm số lượng và tính % theo tổng
df_plot <- df_drink %>%
  count(ProductDepartment, ProductCategory) %>%
  mutate(percent = n / 1250)
# Vẽ biểu đồ
ggplot(df_plot, aes(x = ProductDepartment, y = percent, fill = ProductCategory)) +
  geom_col(position = position_dodge2(preserve = "single")) +
  geom_text(aes(label = scales::percent(percent, accuracy = 0.1)),  # hiện % với 1 chữ số thập phân
            position = position_dodge2(width = 0.9, preserve = "single"),
            vjust = -0.2, size = 3) +
  labs(
    title = "Tỷ lệ (%) số lượng sản phẩm Drink theo phân loại và tên chi tiết sản phẩm",
    x = "Phân loại sản phẩm",
    y = "Tỷ lệ (%)",
    fill = "Tên sản phẩm"
  ) +
  scale_y_continuous(labels = percent_format(accuracy = 1)) +  # trục y theo %
  scale_fill_viridis_d(option = "C") +
  theme(
    axis.text.x = element_text(angle = 45, hjust = 1, size = 9) )

Các sản phẩm Drink (nước uống) được phân thành ba nhóm chính gồm:

  • Đồ uống có cồn (Alcoholic Beverages) 28,5%

  • Đồ uống từ sữa (Dairy) 1,5%

  • Các loại đồ uống khác (Beverages) 54.4%

Trong ba nhóm này, nhóm Beverages chiếm tỷ trọng cao nhất về tổng số lượng bán ra, cho thấy mức độ tiêu thụ phổ biến hơn so với các nhóm còn lại. Ngược lại, nhóm sản phẩm từ sữa ghi nhận lượng bán thấp nhất, phản ánh mức độ tiêu thụ hạn chế hơn trong tập dữ liệu này.

library(ggplot2)
# Lọc sản phẩm thuộc nhóm Food
df_food <- Supermarket_Transactions %>% filter(ProductFamily == "Food")
# Đếm số lượng và tính phần trăm
df_plot1 <- df_food %>%
  count(ProductDepartment, ProductCategory) %>%
  mutate(percent = n / sum(n))
# Vẽ biểu đồ 
ggplot(df_plot1, aes(x = ProductDepartment, y = percent, fill = ProductCategory)) +
  geom_col(position = position_dodge2(preserve = "single")) +
  geom_text(aes(label = ifelse(percent > 0.02, scales::percent(percent, accuracy = 0.1), "")),
            position = position_dodge2(width = 0.9, preserve = "single"),
            vjust = -0.2, size = 3) +
  labs(
    title = "Tỷ lệ (%) sản phẩm Food theo phân loại và tên chi tiết sản phẩm",
    x = "Phân loại sản phẩm",
    y = "Tỷ lệ (%)",
    fill = "Tên sản phẩm"
  ) +
  scale_y_continuous(labels = percent_format(accuracy = 1)) +
  scale_fill_viridis_d(option = "D") +
  theme(
    axis.text.x = element_text(angle = 60, hjust = 1, size = 8),
    legend.key.size = unit(0.4, "cm"),
    legend.spacing.y = unit(0.1, "cm"),
    legend.text = element_text(size = 7) )

Các sản phẩm Food (thức ăn) có sự đa dạng về phân loại với tổng cộng 15 nhóm khác nhau. Trong đó, những nhóm sản phẩm có số lượng bán ra nổi bật bao gồm:

Produce (Rau cũ quả tương) 19,7%

Snack Foods (đồ ăn nhanh) 15.8%

Frozen Foods (đồ ăn đông lạnh) 13,7%

Ngược lại, nhóm sản phẩm Meat (thịt) 0,9% là loại ít được ưa chuộng nhất.

# Lọc dữ liệu
df_Non_Consumable <- Supermarket_Transactions %>% filter(ProductFamily == "Non-Consumable")
# Đếm số lượng và tính tỷ lệ phần trăm trên tổng số
df_plot2 <- df_Non_Consumable %>%
  count(ProductDepartment, ProductCategory) %>%
  mutate(percent = n / sum(n))
# Vẽ biểu đồ
ggplot(df_plot2, aes(x = ProductDepartment, y = percent, fill = ProductCategory)) +
  geom_col(position = position_dodge2(preserve = "single")) +
  geom_text(aes(label = scales::percent(percent, accuracy = 0.1)),
          position = position_dodge2(width = 0.9, preserve = "single"),
          vjust = -1, size = 3, color = 'red')  +
  labs(
    title = "Tỷ lệ (%) sản phẩm Non-Consumable theo phân loại và tên chi tiết sản phẩm",
    x = "Phân loại sản phẩm",
    y = "Tỷ lệ (%)",
    fill = "Tên sản phẩm"
  ) +
  scale_y_continuous(labels = scales::percent_format(accuracy = 1)) +
  scale_fill_viridis_d(option = "D") +
  theme(
    legend.key.size = unit(0.4, "cm"),
    legend.spacing.y = unit(0.1, "cm"),
    legend.position = "right" )

Đối với nhóm sản phẩm Non-Consumable (các sản phẩm không tiêu hao), có 5 phân loại chính gồm:

  • Carousel (dụng cụ xoay) 2,2%

  • Checkout (sản phẩm hỗ trợ thanh toán) 3,1%

  • Health and Hygiene (sản phẩm chăm sóc sức khỏe và vệ sinh) 33,6%

  • Household (vật dụng gia đình) 53,6%

  • Periodicals (ấn phẩm định kỳ) 7,6%

Trong đó, nhóm sản phẩm Household chiếm tỷ trọng lớn nhất về số lượng bán ra, cho thấy mức độ tiêu thụ cao. Ngược lại, Carousel là nhóm sản phẩm có số lượng bán ra thấp nhất, thể hiện mức độ quan tâm hạn chế từ phía người tiêu dùng.

2.3.2 Các đặc điểm về doanh thu

library(ggplot2)
ggplot(Supermarket_Transactions, aes(x = PurchaseDate, y = Revenue)) +
  geom_area(fill = "skyblue", alpha = 0.6) +
  geom_line(color = "red") +
  labs(
    title = "Doanh thu theo thời gian",
    x = "Ngày mua",
    y = "Doanh thu"
  ) +
  theme( )

Qua biểu đồ có thể thấy doanh thu từ tháng 1 đến tháng 7 năm 2009 đạt mức cao vượt trội so với các khoảng thời gian khác. Bên cạnh đó, doanh thu có xu hướng tăng dần từ năm 2008 đến năm 2009, nhưng bắt đầu giảm trở lại vào năm 2010.

Hoa Kỳ (USA) chiếm tới 68% tổng doanh thu từ các đơn hàng, thể hiện sức mua vượt trội và vai trò chủ đạo trên thị trường. Trong khi đó, Canada chỉ chiếm 5,8% tổng số đơn hàng và có doanh thu thấp nhất, phản ánh mức độ tiêu thụ còn hạn chế hơn so với các quốc gia khác.

# Đếm số lượng đơn hàng theo quốc gia, tính tỷ lệ %
df_pie <- Supermarket_Transactions %>%
  count(Country) %>%
  mutate(percent = n / sum(n),
         label = scales::percent(percent, accuracy = 0.1))
# Vẽ pie chart
ggplot(df_pie, aes(x = "", y = percent, fill = Country)) +
  geom_col(width = 1, color = "black") +  # tạo cột cho pie chart
  coord_polar(theta = "y") +               # chuyển sang hình tròn
  geom_text(aes(label = label), 
            position = position_stack(vjust = 0.5), size = 3, color = "black") +  # label % ở giữa mỗi lát
  labs(title = "Tỷ lệ % số đơn hàng theo quốc gia") +
  theme_void() +                           # loại bỏ các trục, lưới
  scale_fill_brewer(palette = "Set3")     # màu sắc dễ nhìn

# Đếm số lượng và tính tỷ lệ phần trăm trên tổng số
df_a <- Supermarket_Transactions %>%
  count(AnnualIncome, Country) %>%
  mutate(percent = n / sum(n))
# Vẽ biểu đồ
ggplot(df_a, aes(x = AnnualIncome, y = n, fill = Country)) +
  geom_col(position = position_dodge(width = 0.9)) +
  geom_text(aes(label = scales::percent(percent, accuracy = 0.1)),
            position = position_dodge(width = 0.9),
            vjust = -0.5, size = 3) +
  labs(
    title = "Tổng doanh thu theo thu nhập của từng quốc gia",
    x = "Thu nhập",
    y = "Tổng doanh thu",
    fill = "Quốc gia"
  ) +
  scale_fill_brewer(palette = "Set1") +
  theme(
    axis.text.x = element_text(angle = 45, hjust = 1) )

Nhóm thu nhập trung bình thấp (đặc biệt là từ $30k đến $50k, chiếm 32,7%) chiếm tỷ lệ lớn trong tổng số người mua sắm, cho thấy đây là phân khúc khách hàng chủ lực của thị trường. Ngược lại, số lượng người tiêu dùng giảm dần ở các mức thu nhập cao hơn, đặc biệt là nhóm có thu nhập từ 150.000 USD trở lên (dưới 2%). Điều này phản ánh xu hướng nhóm thu nhập cao tập trung vào các sản phẩm cao cấp và chuyên biệt, thay vì các mặt hàng phổ thông.

# Lọc dữ liệu
df_b <- Supermarket_Transactions %>%
  count(ProductFamily, Country) %>%
  mutate(percent = n / sum(n))
# Vẽ biểu đồ cột theo phần trăm
ggplot(df_b, aes(x = ProductFamily, y = percent, fill = Country)) +
  geom_col(position = position_dodge2(preserve = "single")) +
  geom_text(aes(label = scales::percent(percent, accuracy = 0.1)),
            position = position_dodge2(width = 0.9, preserve = "single"),
            vjust = -0.5, size = 3) +
  labs(
    title = "Tỷ lệ phần trăm sản phẩm chính bán ra theo từng quốc gia",
    x = "Sản phẩm chính",
    y = "Tỷ lệ (%)",
    fill = "Quốc gia"
  ) +
  scale_y_continuous(labels = scales::percent_format(accuracy = 1), limits = c(0, NA)) +
  scale_fill_brewer(palette = "Set4") +
  theme(
    axis.text.x = element_text(angle = 45, hjust = 1)
  )
## Warning: Unknown palette: "Set4"

Trong các nhóm hàng hóa, thực phẩm (Food) 72,2% là mặt hàng được ưa chuộng nhất, tiếp theo là nhóm sản phẩm không tiêu hao (Non-Consumable) 18,8% và cuối cùng là đồ uống (Drink) 8,9% . Do đó, để thúc đẩy doanh thu, doanh nghiệp nên tập trung vào việc phát triển và đa dạng hóa mặt hàng thực phẩm.

# Lọc dữ liệu
df_1 <- Supermarket_Transactions %>%
  count(UnitsSold, Country) %>%
  mutate(percent = n / sum(n))
# Vẽ biểu đồ cột 
ggplot(df_1, aes(x = UnitsSold, y = percent, fill = Country)) +
  geom_col(position = position_dodge2(preserve = "single")) +
  geom_text(aes(label = scales::percent(percent, accuracy = 0.1)),
            position = position_dodge2(width = 0.9, preserve = "single"),
            vjust = -0.5, size = 3) +
  scale_fill_viridis_d(option = "D") +  # thang màu
  scale_x_continuous(breaks = 1:8) +
  labs(
    title = "Tổng số lượng bán ra theo quốc gia",
    x = "Số lượng bán ra",
    y = "tỷ lệ (%)",
    fill = "Quốc gia" ) +
  theme_minimal()

Số lượng mặt hàng được bán ra chủ yếu tập trung trong khoảng từ 3 đến 6 món gần 80%, với điểm tập trung cao nhất là ở mức 4 món. Số lượng khách hàng mua các mức hàng hóa nhiều hơn hoặc ít hơn mức này giảm dần, đặc biệt, nhóm mua đủ 8 món hàng gần như không tồn tại hoặc rất hiếm gặp.

# Lọc dữ liệu
df_1 <- Supermarket_Transactions %>%
  count(Children, Country) %>%
  mutate(percent = n / sum(n))
# Vẽ biểu đồ cột 
ggplot(df_1, aes(x = Children, y = percent, fill = Country)) +
  geom_col(position = position_dodge2(preserve = "single")) +
  geom_text(aes(label = scales::percent(percent, accuracy = 0.1)),
            position = position_dodge2(width = 0.9, preserve = "single"),
            vjust = -0.5, size = 3) +
  scale_fill_viridis_d(option = "A") +  # thang màu
  scale_x_continuous(breaks = 1:5) +
  labs(
  title = "Tỷ lệ khách hàng theo số trẻ em trong hộ gia đình và quốc gia",
  x = "Số trẻ em trong hộ gia đình",
  y = "Tỷ lệ (%)",
  fill = "Nhóm sản phẩm"
) +
theme_minimal()

Có thể thấy rằng các hộ gia đình có từ 1 đến 4 người con chiếm tỷ trọng lớn trong tổng số, với tổng tỷ lệ gần 80%. Mức độ tiêu dùng của các nhóm này tương đối đồng đều giữa các quốc gia. Đáng chú ý, nhóm hộ gia đình có 3 người con là nhóm có tỷ lệ mua sắm cao nhất, chiếm khoảng 20,6%. Sau mức đỉnh này, tỷ lệ tiêu dùng có xu hướng giảm dần khi số lượng con tăng. Ngoài ra, các hộ gia đình chưa có con hoặc khách hàng độc thân có xu hướng tiêu dùng thấp hơn rõ rệt so với các nhóm còn lại.

2.3.3 Phân tích đặc điểm riêng biệt

2.3.3.1 Đối với USD

# Lọc dữ liệu
library(RColorBrewer)
df_usa <- Supermarket_Transactions %>% filter(Country == "USA")
df_usa_summary <- df_usa %>%
  group_by(MaritalStatus, Gender, Homeowner) %>%
  summarise(Count = n(), .groups = "drop") %>%
  mutate(Percent = Count / sum(Count))
colors <- brewer.pal(2, "Pastel1") 
## Warning in brewer.pal(2, "Pastel1"): minimal value for n is 3, returning requested palette with 3 different levels
# Vẽ biểu đồ
ggplot(df_usa_summary, aes(x = MaritalStatus, y = Count, fill = Gender)) +
  geom_col(position = position_dodge2(preserve = "single")) +
  coord_flip() +
  facet_grid(. ~ Homeowner) +
  geom_text(aes(label = paste0(Count, "\n(", scales::percent(Percent, accuracy = 0.1), ")")),
            position = position_dodge2(width = 0.9, preserve = "single"),
            hjust = 1, size = 3) +
  labs(
    title = "Phân bố tình trạng hôn nhân theo giới tính và quyền sở hữu nhà (USA)",
    x = "Tình trạng hôn nhân",
    y = "Số lượng giao dịch"
  ) +
  scale_fill_manual(values = colors) +
  theme_minimal()

Phân tích tỉ lệ khách hàng theo giới tính cho thấy nam và nữ ở USA tương đương nhau, không có chênh lệch đáng kể (dưới 1%). Tuy nhiên, khi phân nhóm theo tình trạng hôn nhân và quyền sở hữu nhà, ta nhận thấy:

  • Nhóm độc thân: Số khách hàng không sở hữu nhà nhỉnh hơn nhóm có nhà khoảng 414 người (4,3%), cho thấy nhóm này phân bố tương đối cân bằng nhưng hơi nghiêng về phía thuê nhà hoặc chưa có nhà riêng.

  • Nhóm đã kết hôn: Số khách hàng sở hữu nhà vượt trội hơn nhóm không có nhà gần 2.332 (24,4%) người, phản ánh xu hướng vợ chồng đã ổn định về chỗ ở và có điều kiện kinh tế vững hơn.

Kết quả này cho thấy đa số người mua hàng trong dữ liệu đến từ các hộ gia đình ổn định, có nhà riêng - một minh chứng cho việc khách hàng có khả năng tài chính và sự an cư cao hơn thường chi tiêu nhiều hơn. Ngược lại, những khách hàng đã lập gia đình nhưng chưa sở hữu nhà ở có xu hướng chi tiêu hạn chế hơn.

# Lọc dữ liệu
df_usasummary <- df_usa %>%
  group_by(StateorProvince, City) %>%
  summarise(TotalRevenue = sum(Revenue), .groups = "drop") %>%
  mutate(PercentRevenue = TotalRevenue / sum(TotalRevenue)) %>%
  ungroup()
# Vẽ biểu đồ
ggplot(df_usasummary, aes(x = City, y = TotalRevenue, fill = City)) +
  geom_col(show.legend = FALSE) +
  geom_text(aes(label = paste0(
                      format(round(TotalRevenue, 2), nsmall = 2),  # doanh thu làm tròn 2 chữ số thập phân
                      "\n(", scales::percent(PercentRevenue, accuracy = 0.1), ")"
                    )),
            vjust = 1, size = 2) +
  facet_wrap(~ StateorProvince, scales = "free_x") +
  labs(
    title = "Phân bố doanh thu theo thành phố và bang (USA)",
    x = "Thành phố",
    y = "Doanh thu "
  ) +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

Tại Hoa Kỳ (USA), tổng doanh thu của bang Washington (WA) đạt 43.271,67 USD, chiếm 47,7% — mức doanh thu cao nhất trong số các bang. Tuy nhiên, thành phố có số lượng đơn hàng nhiều nhất lại là Salem thuộc bang Oregon (OR), với tổng doanh thu 18.211,84 USD, chiếm 14,8% — vượt trội so với các thành phố khác. Ngược lại, tại bang Washington, thành phố Bellingham ghi nhận số lượng đơn hàng thấp nhất với doanh thu chưa đến 1.000 USD, chiếm 0,8%. Dựa trên những dữ liệu này, định hướng chiến lược tập trung mở rộng phân phối sản phẩm tại các thành phố có doanh thu cao như Salem, đồng thời khai thác tiềm năng phát triển tại các thị trường nhỏ hơn như Bellingham sẽ giúp tối ưu hóa hiệu quả kinh doanh và tiếp cận khách hàng mục tiêu một cách hiệu quả hơn..

2.3.3.2 Đối với Mexico

# Lọc dữ liệu
df_Mexico <- Supermarket_Transactions %>% filter(Country == "Mexico")
# Tính tổng số giao dịch và tỷ lệ %
df_Mexico_summary <- df_Mexico %>%
  group_by(MaritalStatus, Gender, Homeowner) %>%
  summarise(Count = n(), .groups = "drop") %>%
  mutate(Percent = Count / sum(Count))
colors <- brewer.pal(2, "Pastel2")
## Warning in brewer.pal(2, "Pastel2"): minimal value for n is 3, returning requested palette with 3 different levels
# Vẽ biểu đồ
ggplot(df_Mexico_summary, aes(x = MaritalStatus, y = Count, fill = Gender)) +
  geom_col(position = position_dodge2(preserve = "single")) +
  coord_flip() +
  facet_grid(. ~ Homeowner) +
  geom_text(aes(label = paste0(Count, "\n(", scales::percent(Percent, accuracy = 0.1), ")")),
            position = position_dodge2(width = 0.9, preserve = "single"),
            hjust = 1, size = 3) +
  labs(
    title = "Phân bố tình trạng hôn nhân theo giới tính và quyền sở hữu nhà (Mexico)",
    x = "Tình trạng hôn nhân",
    y = "Số lượng giao dịch"
  ) +
  scale_fill_manual(values = colors) +
  theme_minimal()

Phân tích tỷ lệ khách hàng theo giới tính tại Canada cho thấy có sự chênh lệch đáng kể giữa nam và nữ, với tỷ lệ nữ chiếm ưu thế (11,6%). Ngoại lệ duy nhất là ở nhóm khách hàng độc thân sở hữu nhà, nơi nam giới chiếm tỷ lệ cao hơn (2,7%). Tuy nhiên, khi xem xét cụ thể hơn theo tình trạng hôn nhân và quyền sở hữu nhà, có thể rút ra một số nhận định quan trọng:

  • Nhóm độc thân: Số lượng khách hàng không sở hữu nhà cao hơn nhóm có nhà khoảng 141 người (3,8%), cho thấy sự phân bổ tương đối đồng đều nhưng có xu hướng nghiêng về phía những người chưa có nhà riêng hoặc đang thuê nhà.

  • Nhóm đã kết hôn: Số lượng khách hàng sở hữu nhà vượt trội hơn nhóm không có nhà khoảng 883 người (24%), phản ánh xu hướng các cặp vợ chồng đã ổn định về nơi ở và có nền tảng kinh tế vững vàng hơn.

Kết quả này cho thấy đa số người mua hàng trong dữ liệu đến từ các hộ gia đình ổn định, có nhà riêng - điều này là minh chứng cho việc những khách hàng có điều kiện kinh tế và mức độ an cư cao hơn thường có xu hướng chi tiêu nhiều hơn. Ngược lại, những người đã lập gia đình nhưng chưa sở hữu nhà ở có xu hướng thận trọng hơn trong hành vi tiêu dùng.

# Lọc dữ liệu
df_Mexicosummary <- df_Mexico %>%
  group_by(StateorProvince, City) %>%
  summarise(TotalRevenue = sum(Revenue), .groups = "drop") %>%
  mutate(PercentRevenue = TotalRevenue / sum(TotalRevenue)) %>%
  ungroup()
# Vẽ biểu đồ
ggplot(df_Mexicosummary, aes(x = City, y = TotalRevenue, fill = City)) +
  geom_col(show.legend = FALSE) +
  geom_text(aes(label = paste0(
                      format(round(TotalRevenue, 2), nsmall = 2),  # doanh thu làm tròn 2 chữ số thập phân
                      "\n(", scales::percent(PercentRevenue, accuracy = 0.1), ")"
                    )),
            vjust = 1, size = 3) +
  facet_wrap(~ StateorProvince, scales = "free_x") +
  labs(
    title = "Phân bố doanh thu theo thành phố và bang (Mexico)",
    x = "Thành phố",
    y = "Doanh thu "
  ) +
  theme_minimal()

Tại Mexico, bang Zacatecas ghi nhận tổng doanh thu cao nhất trong số 6 bang được khảo sát. Trong đó, thành phố Hidalgo dẫn đầu về số lượng đơn hàng với doanh thu đạt 17.110,22 USD, chiếm 35,3% tổng doanh thu — vượt trội so với các thành phố còn lại. Ngược lại, thành phố Bellingham (thuộc bang Jalisco) ghi nhận doanh thu thấp nhất, chỉ đạt 523,32 USD, tương đương 1,1%..

2.3.3.3 Đối với Canada

# Lọc dữ liệu
df_Canada <- Supermarket_Transactions %>% filter(Country == "Canada")
# Tính tổng số giao dịch và tỷ lệ phần trăm
df_Canada_summary <- df_Canada %>%
  group_by(MaritalStatus, Gender, Homeowner) %>%
  summarise(Count = n(), .groups = "drop") %>%
  mutate(Percent = Count / sum(Count))
colors <- brewer.pal(3, "Paired")
# Vẽ biểu đồ
ggplot(df_Canada_summary, aes(x = MaritalStatus, y = Count, fill = Gender)) +
  geom_col(position = position_dodge2(preserve = "single")) +
  coord_flip() +
  facet_grid(. ~ Homeowner) +
  geom_text(aes(label = paste0(Count, "\n(", scales::percent(Percent, accuracy = 0.1), ")")),
            position = position_dodge2(width = 0.9, preserve = "single"),
            hjust = 1, size = 3) +
  labs(
    title = "Phân bố tình trạng hôn nhân theo giới tính và quyền sở hữu nhà (Canada)",
    x = "Tình trạng hôn nhân",
    y = "Số lượng giao dịch"
  ) +
  scale_fill_manual(values = colors) +
  theme_minimal()

Phân tích tỷ lệ khách hàng theo giới tính tại Mexico cho thấy có sự chênh lệch đáng kể giữa nam và nữ (7,8%), với tỷ lệ nam gần như chiếm ưu thế. Ngoại lệ duy nhất là ở nhóm khách hàng có gia đình sở hữu nhà, nơi nữ giới chiếm tỷ lệ cao hơn (1,9%). Tuy nhiên, khi xem xét cụ thể hơn theo tình trạng hôn nhân và quyền sở hữu nhà, có thể rút ra một số nhận định quan trọng:

  • Nhóm độc thân: Số lượng khách hàng không sở hữu nhà cao hơn nhóm có nhà khoảng 44 người (5,4%), cho thấy sự phân bổ tương đối đồng đều nhưng có xu hướng nghiêng về phía những người chưa có nhà riêng hoặc đang thuê nhà.

  • Nhóm đã kết hôn: Số lượng khách hàng sở hữu nhà vượt trội hơn nhóm không có nhà khoảng 213 người (26,3%), phản ánh xu hướng các cặp vợ chồng đã ổn định về nơi ở và có nền tảng kinh tế vững vàng hơn.

Kết quả này cho thấy đa số người mua hàng trong dữ liệu đến từ các hộ gia đình ổn định, có nhà riêng - điều này là minh chứng cho việc những khách hàng có điều kiện kinh tế và mức độ an cư cao hơn thường có xu hướng chi tiêu nhiều hơn. Ngược lại, những người đã lập gia đình nhưng chưa sở hữu nhà ở có xu hướng thận trọng hơn trong hành vi tiêu dùng.

# Lọc dữ liệu
df_Canadasummary <- df_Canada %>%
  group_by(StateorProvince, City) %>%
  summarise(TotalRevenue = sum(Revenue), .groups = "drop") %>%
  mutate(PercentRevenue = TotalRevenue / sum(TotalRevenue)) %>%
  ungroup()
# Vẽ biểu đồ
ggplot(df_Canadasummary, aes(x = City, y = TotalRevenue, fill = City)) +
  geom_col(show.legend = FALSE) +
  geom_text(aes(label = paste0(
                      format(round(TotalRevenue, 2), nsmall = 2),  # doanh thu làm tròn 2 chữ số thập phân
                      "\n(", scales::percent(PercentRevenue, accuracy = 0.1), ")"
                    )),
            vjust = 1, size = 3) +
  facet_wrap(~ StateorProvince, scales = "free_x") +
  labs(
    title = "Phân bố doanh thu theo thành phố và bang (Canada)",
    x = "Thành phố",
    y = "Doanh thu "
  ) +
  theme_minimal()

Tại bang British Columbia (BC) của Canada, các giao dịch chỉ được ghi nhận tại hai thành phố: Vancouver và Victoria. Trong đó, Vancouver chiếm ưu thế rõ rệt với tổng doanh thu đạt 8.665,5 USD tương đương 78,3% tổng doanh thu của bang - cho thấy đây là khu vực tập trung hoạt động mua sắm sôi động hơn. Ngược lại, Victoria đóng góp phần nhỏ hơn trong tổng doanh thu, cho thấy tiềm năng mở rộng phân phối sản phẩm tại khu vực này trong tương lai.

2.3.4 Kết quả theo số liệu định tính

library(dplyr)

# Danh sách các biến định tính cần phân tích
dinh_tinh_vars <- c("Gender", "MaritalStatus", "Homeowner", "AnnualIncome",
                    "City", "StateorProvince", "Country",
                    "ProductFamily", "ProductDepartment", "ProductCategory")

# Hàm tóm tắt số lượng và tỷ lệ theo từng mức độ của biến định tính
tomtat_dinh_tinh <- function(df, var) {
  bien_goc <- trimws(df[[var]])      # loại bỏ khoảng trắng dư thừa
  bien_goc <- as.factor(bien_goc)    # chuyển thành kiểu factor
  tan_so <- table(bien_goc, useNA = "ifany")  # bảng tần số
  ty_le <- prop.table(tan_so)        # tỷ lệ tương ứng

  data.frame(
    Ten_Bien     = var,
    Gia_Tri      = names(tan_so),
    Tan_So       = as.vector(tan_so),
    Ti_Le_Phan_Tram = round(100 * as.vector(ty_le), 2),
    stringsAsFactors = FALSE
  )
}

# Áp dụng cho toàn bộ danh sách biến định tính
bang_tomtat_lon <- bind_rows(
  lapply(dinh_tinh_vars, function(x) tomtat_dinh_tinh(Supermarket_Transactions, x))
)

# Tính các thống kê mô tả cho từng biến định tính
thongke_mota_daydu <- bang_tomtat_lon %>%
  group_by(Ten_Bien) %>%
  summarise(
    Trung_Binh = mean(Tan_So, na.rm = TRUE),
    Do_Lech_Chuan = sd(Tan_So, na.rm = TRUE),
    Nho_Nhat = min(Tan_So, na.rm = TRUE),
    Phan_Vi_1 = quantile(Tan_So, 0.25, na.rm = TRUE),
    Trung_Vi = quantile(Tan_So, 0.5, na.rm = TRUE),
    Phan_Vi_3 = quantile(Tan_So, 0.75, na.rm = TRUE),
    Lon_Nhat = max(Tan_So, na.rm = TRUE)
  )

# Hiển thị bảng bằng kable
library(knitr)
## Warning: package 'knitr' was built under R version 4.4.3
kable(
  thongke_mota_daydu,
  digits = 2,
  col.names = c("Biến định tính", "Giá trị TB", "Độ lệch chuẩn", "Nhỏ nhất", "Q1", "Trung vị", "Q3", "Lớn nhất"),
  caption = "Bảng mô tả thống kê tần suất các mức độ theo từng biến định tính"
)
Bảng mô tả thống kê tần suất các mức độ theo từng biến định tính
Biến định tính Giá trị TB Độ lệch chuẩn Nhỏ nhất Q1 Trung vị Q3 Lớn nhất
AnnualIncome 1757.38 1511.35 273 635.50 1234.5 2550.00 4601
City 611.26 370.75 75 285.00 633.0 870.50 1386
Country 4686.33 4461.08 809 2248.50 3688.0 6625.00 9562
Gender 7029.50 198.70 6889 6959.25 7029.5 7099.75 7170
Homeowner 7029.50 2000.41 5615 6322.25 7029.5 7736.75 8444
MaritalStatus 7029.50 231.22 6866 6947.75 7029.5 7111.25 7193
ProductCategory 312.42 358.15 35 102.00 197.0 356.00 1728
ProductDepartment 639.05 569.43 59 190.50 390.5 958.50 1994
ProductFamily 4686.33 4786.18 1250 1953.00 2656.0 6404.50 10153
StateorProvince 1405.90 1393.40 75 511.50 812.0 2020.75 4567

1. AnnualIncome

Biến AnnualIncome có giá trị trung bình là 1,757.38 và trung vị là 1,234.5, cho thấy phân phối có thể lệch phải. Khoảng giá trị dao động khá rộng (từ 273 đến 4,601) và độ lệch chuẩn cao (1,511.35), phản ánh sự chênh lệch đáng kể về mức thu nhập hàng năm giữa các đối tượng quan sát.

2. City

Biến City có trung bình là 611.26 và độ lệch chuẩn là 370.75, với giá trị nhỏ nhất là 75 và lớn nhất là 1,386. Khoảng dao động này cho thấy có nhiều thành phố được ghi nhận, tuy nhiên mức độ phân bổ số lượng quan sát giữa các thành phố là không đều.

3. Country

Country có giá trị trung bình là 4,686.33 và độ lệch chuẩn cao (4,461.08), với khoảng dao động từ 809 đến 9,562. Điều này cho thấy sự phân bố không đồng đều giữa các quốc gia, trong đó một số quốc gia có số lượng quan sát vượt trội hơn hẳn so với các quốc gia còn lại.

4. Gender

Biến Gender có giá trị trung bình và trung vị đều là 7,029.5, với độ lệch chuẩn rất thấp (198.7), dao động từ 6,889 đến 7,170. Điều này cho thấy số lượng nam và nữ trong tập dữ liệu là gần như cân bằng.

5. Homeowner

Tương tự Gender, biến Homeowner có trung bình và trung vị đều là 7,029.5, với độ lệch chuẩn là 2,000.41. Khoảng giá trị từ 5,615 đến 8,444 cho thấy có sự chênh lệch giữa hai nhóm (có sở hữu nhà và không), nhưng nhìn chung vẫn khá cân đối.

6. MaritalStatus

Biến MaritalStatus cũng có trung bình và trung vị bằng nhau (7,029.5), độ lệch chuẩn thấp (231.22), thể hiện rằng số lượng giữa các nhóm tình trạng hôn nhân (đã kết hôn, độc thân, v.v.) là gần bằng nhau, không có sự chênh lệch lớn.

7. ProductCategory

ProductCategory có trung bình 312.42 và độ lệch chuẩn 358.15, với giá trị thấp nhất là 35 và cao nhất là 1,728. Sự chênh lệch lớn giữa Min và Max cho thấy một số danh mục sản phẩm có số lượng vượt trội hơn nhiều so với các danh mục khác.

8. ProductDepartment

Biến này có giá trị trung bình là 639.05 và độ lệch chuẩn là 569.43, dao động từ 59 đến 1,994. Điều này phản ánh sự phân bố không đồng đều giữa các bộ phận sản phẩm, có thể do một số bộ phận có mức tiêu thụ hoặc phân phối cao hơn hẳn.

9. ProductFamily

ProductFamily có trung bình là 4,686.33, độ lệch chuẩn khá cao (4,786.18) và dao động rộng (1,250 đến 10,153). Điều này cho thấy sự phân phối mạnh mẽ của một số nhóm sản phẩm so với các nhóm còn lại.

10. StateorProvince

Biến StateorProvince có trung bình 1,405.90, độ lệch chuẩn 1,393.40 và giá trị nằm trong khoảng từ 75 đến 4,567. Phân bố dữ liệu giữa các bang/tỉnh khá phân tán, một số khu vực có tần suất xuất hiện cao hơn nhiều so với các khu vực khác.