Dưới đây là bản tóm tắt cuốn sách “Generalized Linear Models With Examples in R” (2019) của Peter K. Dunn và Gordon K. Smyth, một tài liệu rất có giá trị cho những người học hoặc ứng dụng Generalized Linear Models (GLM), đặc biệt là với ngôn ngữ R.
Mô hình thống kê được hiểu là công cụ để mô tả và lý giải dữ liệu. GLMs là một lớp con của mô hình hồi quy, cho phép mô hình hóa nhiều dạng phân phối khác nhau ngoài chuẩn.
Ví dụ 1.1: Dữ liệu dung tích phổi của thanh thiếu niên
Dữ liệu từ 654 thanh thiếu niên ở Boston;
Biến: tuổi, dung tích phổi (FEV), chiều cao, giới tính, tình trạng hút thuốc.
Mã R:
library(GLMsData) data(lungcap) head(lungcap)
Kết quả: dữ liệu gồm các biến Age,
FEV, Ht, Gender,
Smoke.
Việc vẽ đồ thị giúp khám phá đặc điểm của dữ liệu.
Dùng R để biểu diễn mối quan hệ giữa biến độc lập và biến phản hồi.
Ví dụ mã R:
plot(FEV ~ Age, data=lungcap)
Biến phân loại như Gender cần mã hóa (dùng dummy
variables) để đưa vào mô hình.
R sử dụng treatment coding làm mặc định.
lungcap$Gender <- factor(lungcap$Gender) contrasts(lungcap$Gender)
Thành phần hệ thống (systematic component): biến giải thích, kết hợp tuyến tính.
Thành phần ngẫu nhiên (random component): mô tả sự biến đổi không giải thích được.
Mô hình hồi quy tuyến tính là trường hợp đặc biệt: $$Y_i = \beta_0 + \beta_1 X_i + \epsilon_i$$
Tất cả các mô hình trong sách đều là mô hình hồi quy.
“Tất cả mô hình đều sai, nhưng một số thì hữu ích” (Box & Draper);
Mục đích của mô hình: hiểu dữ liệu hoặc dự đoán;
Đánh giá mô hình dựa trên tính chính xác (accuracy) và sự đơn giản (parsimony);
So sánh dữ liệu quan sát và dữ liệu thực nghiệm;
Tổng quát hóa kết quả từ mẫu đến quần thể.
R là công cụ chính để xây dựng mô hình thống kê;
Các chức năng như lm(), plot(),
summary() được sử dụng xuyên suốt.
BÀI TẬP & MÃ R THỰC HÀNH
Ví dụ với dữ liệu crabs:
library(GLMsData) data(hcrabs) summary(hcrabs) plot(y ~ weight, data = hcrabs)
Kết luận chương 1
Chương 1 đóng vai trò định hướng tri thức nền tảng về mô hình hóa thống kê, nhấn mạnh tư duy phân tích dữ liệu, hiểu đặc tính dữ liệu và chuẩn bị cho các chương về GLMs.
Hồi quy tuyến tính là mô hình phổ biến nhất trong thống kê.
Mô hình hồi quy tuyến tính là trường hợp đặc biệt của GLM với phân phối chuẩn và hàm liên kết là hàm đồng nhất.
Mô hình hồi quy tuyến tính có hai thành phần:
Ngẫu nhiên: $$\operatorname{Var}(y_i) = \frac{\sigma^2}{w_i}$$ với \(w_i\) là trọng số.
Hệ thống: $$\mu_i = \beta_0 + \sum_{j=1}^{p} \beta_j x_{ij}$$
Biểu diễn tổng quát: $$\begin{cases}\operatorname{Var}(y_i) = \frac{\sigma^2}{w_i} \\\mu_i = \beta_0 + \beta_1 x_{i1} + \cdots + \beta_p x_{ip}\end{cases}$$
Giải pháp cổ điển để ước lượng các hệ số hồi quy;
Dễ tính toán, giải tích rõ ràng;
Tối thiểu hóa tổng bình phương sai số.
Ví dụ mã R:
model <- lm(FEV ~ Age, data = lungcap) summary(model)
Mở rộng từ hồi quy đơn sang nhiều biến giải thích.
Có thể bao gồm biến định tính thông qua biến giả (dummy).
Khuyến nghị kiểm tra tương quan, đa cộng tuyến.
Ví dụ mã R:
model2 <- lm(FEV ~ Age + Ht + Gender + Smoke, data = lungcap) summary(model2)
Hàm lm() để ước lượng;
Các hàm plot(), residuals(),
fitted(), anova() để kiểm tra chẩn
đoán.
Mã ví dụ:
plot(residuals(model) ~ fitted(model))
Mỗi hệ số \(βj\) thể hiện thay đổi kỳ vọng của \(y\) ứng với một đơn vị thay đổi của \(x_j\) , giữ nguyên các biến khác.
Quan trọng trong việc suy luận thực nghiệm từ kết quả thống kê.
Kiểm định giả thuyết: \(H_0:βj=0\)
Khoảng tin cậy cho từng hệ số.
Mã R: confint(model)
Kiểm tra tổng quát xem mô hình có ý nghĩa thống kê không.
Bảng ANOVA giúp kiểm tra ảnh hưởng của từng nhóm biến giải thích.
Các chiến lược như lựa chọn tiến, lùi, hoặc từng bước.
R hỗ trợ hàm step() để tự động hóa.
Mã R: step(model2)
Tổng kết chương
Chương này xây dựng nền tảng toán học và lập trình cho hồi quy tuyến tính, từ đó mở đường cho việc học và ứng dụng GLMs. Nó cũng chỉ ra rõ:
Sức mạnh mô hình tuyến tính;
Các giới hạn về giả định phân phối chuẩn và phương sai không đổi;
Cách dùng R để mô hình hóa thực tế và kiểm tra mô hình.
ANOVA (Analysis of Variance) được trình bày như một trường hợp đặc biệt của mô hình hồi quy tuyến tính.
ANOVA dùng để kiểm tra xem trung bình của nhiều nhóm có khác biệt thống kê hay không.
Mô hình hóa ảnh hưởng của một yếu tố phân loại (categorical factor) đến biến phản hồi.
Ví dụ: So sánh trung bình điểm thi của các lớp học khác nhau.
Biểu thức mô hình:
\[ Y_{ij} = \mu + \alpha_i + \epsilon_{ij}, \quad \epsilon_{ij} \sim \mathcal{N}(0, \sigma^2) \]
Mã R: mô hình hóa ANOVA một chiều
model1 <- lm(FEV ~ Group, data = lungcap) anova(model1)
Mặc định trong R là treatment coding: nhóm đầu tiên là tham chiếu (reference group).
Có thể thay đổi cách mã hóa bằng
contrasts().
Ví dụ kiểm tra mã hóa:
contrasts(lungcap$Group)
Mở rộng mô hình để xét đồng thời nhiều yếu tố.
Bao gồm mô hình tương tác nếu giả thuyết về ảnh hưởng độc lập không đúng.
Mã R:
model2 <- lm(FEV ~ Gender * Smoke, data = lungcap) anova(model2)
Phân tích phương sai chia tổng phương sai thành các thành phần:
Giữa nhóm (between-group),
Trong nhóm (within-group / residual),
Kiểm định bằng F-test.
Bảng ANOVA mẫu:
anova(model2) summary(model2)
Tương tác cho biết ảnh hưởng của một yếu tố thay đổi theo cấp độ của yếu tố khác.
Quan sát thông qua biểu đồ hoặc kiểm định mô hình có tương tác.
Sau khi phát hiện sự khác biệt toàn cục bằng ANOVA, dùng các kiểm định so sánh từng cặp (post-hoc tests), ví dụ:
Tukey’s HSD.
Bonferroni.
Mã R ví dụ: Tukey HSD
TukeyHSD(aov(model1))
ANOVA là một trường hợp của mô hình hồi quy tuyến tính với biến phân loại.
Các hệ số hồi quy biểu diễn sự khác biệt giữa nhóm với nhóm tham chiếu.
Tổng kết chương
ANOVA được khái quát thành mô hình hồi quy, tạo cơ sở để hiểu GLMs.
Quan trọng trong phân tích thiết kế thí nghiệm.
R cung cấp công cụ mạnh mẽ để xây dựng và giải thích mô hình ANOVA
với lm() và aov().
Trình bày phương pháp ước lượng hợp lý cực đại (MLE) như là nền tảng thống kê hiện đại để ước lượng các tham số mô hình.
MLE là phương pháp chủ yếu dùng trong GLMs để ước lượng các tham số β và các tham số phương sai/phân tán (φ).
Từ mô hình hồi quy tuyến tính (OLS), tổng quát hóa bằng cách thay giả định phân phối chuẩn sang bất kỳ phân phối nào trong họ hàm mũ.
Dẫn nhập khái niệm hàm hợp lý (likelihood) và vai trò trong thống kê suy luận.
Thiết lập phương trình điểm (score equations): đạo hàm log-likelihood theo tham số.
Ma trận thông tin Fisher: đo độ chính xác của ước lượng.
Ước lượng sai số chuẩn dựa trên ma trận thông tin.
Mã R đơn giản:
# Mô phỏng likelihood cho phân phối Bernoulli theta <- seq(0.01, 0.99, length=100) lik <- dbinom(7, size=10, prob=theta) plot(theta, lik, type="l", main="Likelihood function")
Biểu diễn phương trình điểm và ma trận thông tin bằng đại số ma trận để dễ tổng quát và triển khai trên máy tính.
Chuẩn bị cho thuật toán Fisher scoring trong GLMs.
Thuật toán lặp để tìm nghiệm phương trình điểm.
Dễ cài đặt trong phần mềm thống kê và chính là nền tảng của hàm
glm() trong R.
Không chệch tiệm cận, hiệu quả, phân phối chuẩn hóa khi mẫu lớn.
Giải thích rõ vai trò của số lượng mẫu lớn (asymptotics) trong thống kê hiện đại.
Giới thiệu ba loại kiểm định thống kê từ MLE:
Wald test
Likelihood Ratio test (LRT)
Score test
Mỗi loại có ưu/nhược điểm khác nhau tùy vào bài toán.
Giới thiệu tiêu chí:
AIC (Akaike Information Criterion)
BIC (Bayesian Information Criterion)
Phù hợp để lựa chọn mô hình trong GLMs.
Ví dụ mã R:
MakeMu <- function(x, beta){ eta <- x %*% beta return(1 / (1 + exp(-eta))) } MakeScore <- function(x, y, beta){ mu <- MakeMu(x, beta) return(t(x) %*% (y - mu)) }
Mã R tự xây dựng lại toàn bộ thuật toán MLE cho logistic regression.
Minh họa cho quá trình thủ công tính toán MLE, chuẩn bị cho việc
dùng hàm glm() ở các chương sau.
Kết luận chương
MLE là cơ sở cho tất cả các mô hình GLM: mô hình hóa tổng quát, kiểm định, và chọn mô hình đều dựa vào nguyên lý hợp lý cực đại.
Chương 4 là bước chuyển từ hồi quy tuyến tính cổ điển sang các phương pháp hiện đại và khái quát hơn của GLMs.
Được hỗ trợ mạnh mẽ bằng các hàm và gói R, đặc biệt là
glm().
Chuyển tiếp từ hồi quy tuyến tính (giả định phương sai hằng số) sang GLM cho phép xử lý dữ liệu phi chuẩn và phương sai thay đổi.
GLM được xây dựng từ hai thành phần chính:
Thành phần ngẫu nhiên (random component);
Thành phần hệ thống (systematic component).
Ngẫu nhiên: Chọn phân phối xác suất phù hợp (thường thuộc họ Exponential Dispersion Models - EDMs).
Hệ thống: Sử dụng kết hợp tuyến tính với hàm liên kết g(μ)=ηg() = (μ)=η, trong đó η=Xβ= X=Xβ.
GLM giả định yi∼EDM(μi,ϕ/wi)y_i (_i, /w_i)yi∼EDM(μi,ϕ/wi).
EDM bao gồm: Phân phối chuẩn, Poisson, nhị thức, gamma, inverse Gaussian, negative binomial,…
Hàm xác suất có dạng:
Biểu thức phân phối thuộc họ hàm mũ:
\[ P(y; \theta, \phi) = a(y, \phi)\exp\left\{\frac{y\theta - \kappa(\theta)}{\phi}\right\} \]
Hàm tạo khoảnh khắc, hàm tích lũy (cumulant), và hàm phương sai đóng vai trò quan trọng để suy luận.
Trình bày cách viết lại EDM để dễ tính toán deviance.
Giới thiệu unit deviance:
Ví dụ với phân phối Poisson, hàm deviance có dạng:
\[ d(y, \mu) = 2\left[ \frac{y - \mu}{\mu} + \log\left( \frac{\mu}{y} \right) \right] \]
Saddlepoint approximation được dùng để gần đúng phân phối của deviance.
Bao gồm:
Linear predictor: η=β0+β1x1+⋯+βpxp= _0 + _1x_1 + + _px_pη=β0+β1x1+⋯+βpxp;
Hàm liên kết (link function): nối kết μ=E[y]= E[y]μ=E[y] với η.
Ngoài ra còn có thể thêm offsets (biến cố định trong mô hình).
Một GLM đầy đủ:
Biểu diễn tổng quát của mô hình:
\[ \begin{cases} y_i \sim \text{EDM}(\mu_i, \phi/w_i) \\ g(\mu_i) = o_i + \beta_0 + \beta_1 x_{i1} + \cdots + \beta_p x_{ip} \end{cases} \]
Mô hình được ký hiệu như: glm(Poisson; log) hoặc
glm(binomial; logit) trong R.
Tổng deviance:
Độ lệch tổng (Deviance) trong mô hình GLM được tính bởi:
\[ D(y, \mu) = \sum_{i=1}^n w_i \, d(y_i, \mu_i) \]
Scaled deviance:
Độ lệch chuẩn hóa (standardized deviance) được tính bởi:
\[ D^*(y, \mu) = \frac{D(y, \mu)}{\phi} \]
Khi saddlepoint approximation đúng, scaled deviance xấp xỉ phân phối chi bình phương.
So sánh GLMs với hồi quy tuyến tính dùng biến đổi \(y\).
Nhấn mạnh: GLM giúp mô hình hóa \(y\) trực tiếp thay vì biến đổi nó, làm cho giải thích thống kê rõ ràng hơn.
Kết luận chương
Chương 5 xây dựng cấu trúc lý thuyết cốt lõi của GLMs dựa trên hai thành phần: phân phối xác suất (EDMs) và liên kết tuyến tính (hàm liên kết).
GLM cho phép linh hoạt trong mô hình hóa dữ liệu không tuân chuẩn, có phương sai biến đổi, hoặc là số đếm, tỷ lệ, v.v.
Cơ sở cho việc ước lượng, suy luận và kiểm định được trình bày trong các chương tiếp theo (6–8).
Trình bày các kỹ thuật để ước lượng tham số trong GLM: hệ số hồi quy \(β\) và tham số phân tán \(ϕ\) (nếu có).
Sử dụng phương pháp ước lượng hợp lý cực đại (MLE) làm cơ sở.
Phương trình điểm (score equations) và ma trận thông tin được xây dựng từ đạo hàm log-likelihood.
Từ biểu thức xác suất dạng EDM, thu được:
\[ \frac{\partial \log P(y;\mu,\phi/w)}{\partial \mu} = \frac{w(y - \mu)}{\phi V(\mu)} \]
Từ đó, suy ra đạo hàm theo từng hệ số \(βj\) và ma trận thông tin Fisher một cách cụ thể.
Áp dụng thuật toán lặp Newton–Raphson hoặc Fisher Scoring để tìm ước lượng.
Biểu diễn quy trình lặp: từ giá trị ban đầu → tính working values → cập nhật \(β\).
Mã R (ví dụ Poisson GLM):
library(GLMsData) data(nminer) model <- glm(Minerab ~ Eucs, data=nminer, family=poisson(link="log")) summary(model)
R sử dụng nội bộ thuật toán Fisher scoring để ước lượng.
Là thước đo độ phù hợp của mô hình:
\[ D(y, \hat{\mu}) = 2 \sum w_i \left[ y_i \log \frac{y_i}{\hat{\mu}_i} - (y_i - \hat{\mu}_i) \right] \]
Scaled deviance được dùng để kiểm định mô hình thông qua phân phối \(χ2\).
Ước lượng từ nghịch đảo của ma trận thông tin:
\[ \text{Var}(\hat{\beta}) = I^{-1}(\hat{\beta}) \]
Mô tả GLMs tương tự hồi quy tuyến tính thông qua:
\[ \hat{\beta} = (X^T W X)^{-1} X^T W z \]
Với:
\(w\): ma trận trọng số (working weights)
\(z\): biến phụ (working response)
Quá trình ước lượng trong GLMs xấp xỉ tuyến tính tại mỗi bước lặp;
Nhấn mạnh sự tương đồng về mặt hình thức giữa GLMs và mô hình OLS.
Bao gồm 4 phương pháp:
MLE (với hàm log-likelihood profile);
Deviance trung bình:
\[ \hat{\phi} = \frac{D(y, \mu)}{\text{df}_{\text{res}}} \]
Pearson: \[ \hat{\phi} = \sum \frac{(y - \mu)^2}{\phi V(\mu)} \]
Lựa chọn tối ưu tùy thuộc vào phân phối cụ thể.
Ví dụ mã R:
summary(model)$dispersion # Pearson estimator deviance(model) / df.residual(model) # Mean deviance estimator
Hàm chính: glm(), với các đối số:
formula: công thức mô hình;
family: chỉ định phân phối và hàm liên kết.
Ví dụ:
glm(y ~ x1 + x2, family = poisson(link = "log"), data = df) glm(y ~ x1 + x2, family = binomial, data = df)
R hỗ trợ các family phổ biến: gaussian(),
poisson(), binomial(), Gamma(),
inverse.gaussian(), quasi(),…
Chương 6 củng cố cơ sở toán học và thuật toán để ước lượng tham số trong GLM.
Là cầu nối giữa lý thuyết xác suất hàm mũ và thực hành phân tích dữ liệu với R.
Chương này trình bày các phương pháp suy luận thống kê cho các hệ số trong GLMs.
Dựa trên ước lượng hợp lý cực đại (MLE), sử dụng 3 loại kiểm định:
Wald test
Likelihood Ratio Test (LRT)
Score test
Áp dụng cho cả trường hợp tham số phân tán \(ϕ\) được biết hoặc không biết.
Wald test
Dựa trên giả định phân phối chuẩn tiệm cận của \(\hat{\beta}_j:\) \[ Z = \frac{\hat{\beta}_j - \beta_j^0}{\text{se}(\hat{\beta}_j)} \sim N(0,1) \]
Phổ biến vì đơn giản và có sẵn trong
summary(glm_object).
Mã R:
summary(glm(FEV ~ Age, family=gaussian, data=lungcap))
Khoảng tin cậy (Confidence intervals)
Xây dựng từ Wald test:
\[ \hat{\beta}_j \pm z_{\alpha/2} \cdot \text{se}(\hat{\beta}_j) \]
R dùng confint() hoặc trực tiếp từ
summary()
Mã R: confint(model)
Likelihood Ratio Test (LRT)
So sánh mô hình con và mô hình đầy đủ:
\[ \frac{D_{\text{reduced}} - D_{\text{full}}}{\phi} \sim \chi^2_{df} \]
Có thể dùng
anova(model1, model2, test="Chisq").
Mã R:
model.full <- glm(Y ~ X1 + X2, family=poisson, data=df) model.reduced <- glm(Y ~ X1, family=poisson, data=df) anova(model.reduced, model.full, test="Chisq")
Score test
Đánh giá hiệu quả của việc thêm biến vào mô hình.
Dùng khi chưa ước lượng mô hình đầy đủ.
Deviance test: Dựa vào scaled deviance.
Pearson test: Dựa vào tổng phần dư Pearson bình phương.
Có thể kiểm tra bằng deviance(model) và
residuals(model, type="pearson").
Mã R:
deviance(model) sum(residuals(model, type="pearson")^2)
Ước lượng \(ϕ\) từ phần dư (Pearson hoặc deviance).
Thay phân phối chuẩn bằng phân phối t:
\[ T = \frac{\hat{\beta}_j - \beta_j^0}{\text{se}(\hat{\beta}_j)} \sim t_{n - p'} \]
Khoảng tin cậy dùng phân phối t thay vì z.
| Kiểm định | Ưu điểm | Nhược điểm |
|---|---|---|
| Wald | Có sẵn trong output R | Nhạy cảm khi \(\hat{\beta}\) gần 0 |
| LRT | Chính xác, phù hợp với mô hình lồng nhau | Cần ước lượng mô hình đầy đủ |
| Score | Không cần mô hình đầy đủ | Thiếu sẵn có trong R |
Dùng AIC và BIC:
\[ \text{AIC} = -2\log L + 2k; \quad \text{BIC} = -2\log L + k \log n \]
Mã R:
AIC(model1, model2) BIC(model1, model2)
step() (theo AIC):step(glm(FEV ~ Age + Ht + Gender + Smoke, family=gaussian, data=lungcap))
Tổng kết chương
Chương này thiết lập hệ thống công cụ suy luận cho GLMs:
Kiểm định ý nghĩa thống kê của hệ số;
Đánh giá sự cải thiện mô hình;
Chọn mô hình tối ưu hóa giữa độ phù hợp và đơn giản.
Các phương pháp này nền tảng cho chẩn đoán mô hình (Chương 8) và diễn giải kết quả trong thực hành thống kê hiện đại.
Chương này trình bày các công cụ để:
Xác định vi phạm giả định của GLM;
Giải thích các loại phần dư (residuals);
Phát hiện điểm dữ liệu bất thường hoặc ảnh hưởng lớn;
Đề xuất các hướng điều chỉnh mô hình.
Các giả định chính:
Không có outliers ảnh hưởng lớn;
Hàm liên kết \(g(μ)\) là đúng;
Tuyến tính hóa các biến giải thích là đúng;
Hàm phương sai \(V(μ)\) là phù hợp;
Tham số phân tán \(ϕ\) là hằng số;
Các quan sát độc lập;
Dữ liệu đến từ phân phối EDM xác định.
Ba loại residuals chính:
Pearson residuals: Residual Pearson được tính bởi \(\displaystyle r_P = \frac{y - \mu}{\sqrt{\phi\,V(\mu)/w}}\).
Deviance residuals:\[ r_D = \text{sign}(y - \mu) \cdot \sqrt{2w\,d(y, \mu)} \]
Quantile residuals: dùng để vẽ Q–Q plot, đặc biệt hữu ích cho dữ liệu rời rạc (discrete).
Leverage \(h_i\): mức độ ảnh hưởng của mỗi quan sát lên ước lượng \(\hat{\mu}_i\) ;
Được tính qua ma trận “hat”:
\[ H = W^{1/2} X (X^T W X)^{-1} X^T W^{1/2} \]
Chuẩn hóa giúp phần dư có phương sai ổn định.
Ví dụ:
\[ r'_P = \frac{r_P}{\sqrt{1 - h}}, \quad r'_D = \frac{r_D}{\sqrt{1 - h}}, \quad r'_Q = \frac{r_Q}{\sqrt{1 - h}} \]
rstandard() và rstudent() dùng để lấy
phần dư chuẩn hóa và Studentized.
Quantile residuals: khuyên dùng với dữ liệu đếm hoặc nhị phân;
Deviance residuals: thường dùng nhất;
Pearson residuals: dùng để ước lượng \(ϕ\), ít dùng cho đồ thị.
Các đồ thị chẩn đoán:
Residuals vs. fitted values: tìm xu hướng không tuyến tính hoặc phương sai không đều.
Q–Q plot của residuals: phát hiện outliers.
Residuals vs. explanatory variables: kiểm tra tuyến tính của từng biến.
Partial residual plots (termplot()): xác định mối
quan hệ đúng giữa biến và phản hồi.
Sử dụng:
Standardized residuals
Studentized residuals
Cook’s distance, dfbetas,
dffits, covratio từ
influence.measures() trong R.
Một quan sát được gọi là ảnh hưởng nếu khi loại bỏ nó sẽ làm thay đổi đáng kể mô hình.
Biến đổi biến (log, sqrt);
Sử dụng spline (ns(), bs() từ package
splines);
Loại bỏ hoặc tách riêng các outliers có lý do rõ ràng.
Dùng khi phân phối không phù hợp hoàn toàn;
Ví dụ: quasipoisson(), quasibinomial()
cho dữ liệu overdispersion;
AIC không định nghĩa cho quasi-models, nhưng
summary() và anova() vẫn dùng được.
Dấu hiệu: hệ số hồi quy không ổn định, phương sai lớn;
Giải pháp: loại biến, kết hợp biến, dùng PCA.
Chẩn đoán là bước bắt buộc sau khi khớp GLM;
Dựa vào phần dư, leverage, ảnh hưởng để đánh giá chất lượng mô hình;
Đề xuất cách cải thiện mô hình nếu có vi phạm giả định
Chương 9 áp dụng lý thuyết GLM đã phát triển ở các chương trước cho trường hợp phân phối nhị thức, dùng để mô hình hóa tỷ lệ (proportions).
Đặc biệt hữu ích trong các nghiên cứu như: tỷ lệ tử vong, kết quả điều trị, tỷ lệ bỏ phiếu, v.v..
Dữ liệu nhị thức được mô hình hóa theo:
Giả sử biến quan sát \(y_i\) tuân theo phân phối nhị thức:
\[ y_i \sim \text{Binomial}(m_i, \mu_i), \quad \text{với } 0 < \mu_i < 1 \]
Trong đó: - \(m_i\): số lần thử (số trials) - \(\mu_i\): xác suất thành công trong mỗi lần thử
Phương sai là: \(\text{var}(y_i) = \frac{\mu_i(1 - \mu_i)}{m_i}\).
Trọng số tiên nghiệm: \(w_i = m_i\)
Ba hàm liên kết phổ biến:
Logit: \[ \eta = \log\left(\frac{\mu}{1 - \mu}\right) \]
Probit: Liên kết trong mô hình Probit là \(\eta = \Phi^{-1}(\mu)\), trong đó \(\Phi^{-1}\) là hàm phân phối chuẩn ngược.
Complementary log-log: Hàm liên kết cloglog là $ \eta = \log\{-\log(1 - \mu)\} $ , thường được dùng khi xác suất thành công gần 0 hoặc gần 1 không đối xứng.
Ngoài ra còn có: "log" (tỷ suất rủi ro) và
"cauchit" (phân phối Cauchy).
Các hàm liên kết có thể được hiểu là kết quả của mô hình ngưỡng (threshold models): mỗi đối tượng có một mức dung sai (tolerance).
Dẫn đến diễn giải xác suất dựa trên phân phối của ngưỡng dung sai.
Sử dụng logit cho phép diễn giải mô hình như log(odds).
Tỷ số odds (odds ratio) là quan hệ giữa xác suất xảy ra và không xảy ra:
Tỷ số cược (odds) và hàm logit được định nghĩa như sau:
\[ \text{odds} = \frac{\mu}{1 - \mu}, \quad \text{logit}(\mu) = \log(\text{odds}) = \log\left(\frac{\mu}{1 - \mu}\right) \]
Trong đó: \(\mu\): xác suất thành công; logit(\(\mu\)): hàm liên kết trong mô hình hồi quy logistic
Giải thích hệ số hồi quy dễ dàng hơn thông qua thay đổi tỷ số odds.
Được định nghĩa là giá trị liều lượng ddd sao cho μ=0.5= 0.5μ=0.5
Với liên kết logit: Giá trị ED\(_{50}\) được tính bằng $_{50} = -_0 / _1$.
Công cụ dose.p() trong R (gói MASS)
được dùng để tính toán ED(ρ).
Ví dụ R:
library(MASS) dose.p(fit, c(1, 2)) # ước lượng ED50
Phù hợp với bài toán dilution assay, như xác định xác suất có tế bào gốc trong mẫu mô.
Xây dựng trên giả định phân phối Poisson của số tế bào và mô hình log-log-link.
Overdispersion: Phương sai lớn hơn dự kiến.
Nguyên nhân:
\(u_i\) thay đổi giữa các nhóm;
Các thử nghiệm \(m_i\) không độc lập;
Dẫn đến phương sai hiệu dụng:
\[ \text{var}(y_i) = \phi \frac{\mu_i(1 - \mu_i)}{m_i}, \quad \phi > 1 \]
Giải pháp: Dùng quasi-binomial models hoặc beta-binomial models.
Khi biến giải thích hoàn toàn phân biệt giữa các nhóm, gây ra hiện tượng separation.
Gây ra ước lượng hệ số hồi quy vô hạn → R sẽ cảnh báo.
Các kiểm định như deviance test không phù hợp với dữ liệu nhị phân (mỗi dòng là một cá thể);
Phân phối deviance không còn tiệm cận theo chi bình phương;
Giải pháp: xem phần dư chuẩn hóa, hoặc dùng bootstrap nếu cần kiểm định.
Ba cách nhập dữ liệu:
Tỷ lệ thành công + weights = m;
cbind(success, failure) ~ x;
Nhị phân từng cá thể: dùng biến logic hoặc factor.
Mã mẫu:
glm(y ~ x, weights=m, family=binomial) glm(cbind(success, failure) ~ x, family=binomial) glm(success ~ x, family=binomial) # nhị phân
Tổng kết chương
Chương 9 áp dụng GLMs vào mô hình tỷ lệ với phân phối nhị thức;
Trình bày rõ ràng hàm liên kết, cách tính ED50, xử lý overdispersion, và diễn giải logit;
Đặc biệt hữu ích trong các bài toán logistic regression, dose-response và sinh học phân tử.
Mô hình hóa dữ liệu đếm là một ứng dụng phổ biến trong GLMs.
Dữ liệu đếm xuất hiện khi:
Các sự kiện xảy ra độc lập;
Không có giới hạn trên rõ ràng cho số lượng sự kiện;
Mô hình hóa sử dụng:
Phân phối Poisson (chính);
Poisson GLMs cho dữ liệu đếm theo biến giải thích;
Mô hình tỷ lệ (rates);
Bảng phân loại (contingency tables).
✅ Phân phối Poisson
\[ P(y; \mu) = \frac{e^{-\mu} \mu^y}{y!} \]
\[ E[y] = \mu, \quad \text{phương sai:} \quad Var(y) = \mu \]
\[ d(y, \mu) = 2 \left( y \log \frac{y}{\mu} - (y - \mu) \right) \]
✅ Hàm liên kết
\[ \log(\mu) = \beta_0 + \sum_j \beta_j x_j \]
Khi số lượng đếm phụ thuộc vào quy mô dân số hoặc mức độ phơi nhiễm (exposure);
Sử dụng offset trong công thức GLM để điều chỉnh cho quy mô:
glm(y ~ x + offset(log(population)), family=poisson)
Khi biến giải thích là định tính → mô hình Poisson trở thành log-linear model;
Dữ liệu 2 chiều, 3 chiều có thể được mô hình hóa thông qua các tương tác;
Cẩn trọng với zero counts:
Sampling zeros: xảy ra ngẫu nhiên;
Structural zeros: không thể xảy ra – cần loại bỏ khỏi mô hình
Overdispersion trong Poisson GLMs
Khi phương sai thực tế lớn hơn μ;
Ảnh hưởng:
Sai số chuẩn bị đánh giá thấp;
Test thống kê cho thấy kết quả quá “đáng kể”;
Phát hiện qua: Deviance test, Pearson goodness-of-fit.
Negative Binomial GLMs
Giải pháp mô hình hóa overdispersion:
\[ y_i \sim \text{NB}(\mu, k) \]
\[ \text{Var}(y) = \mu + \frac{\mu^2}{k} \]
Ước lượng đồng thời \(\beta\) và
\(k\) bằng glm.nb() trong
R:
library(MASS) glm.nb(Count ~ log2(Dilution), data=pock)
Quasi-Poisson GLMs
\[ \text{Var}(y) = \phi \mu \]
glm(..., family=quasipoisson())Dữ liệu pock:
Poisson GLM không phù hợp do overdispersion;
Negative Binomial và Quasi-Poisson phù hợp hơn;
So sánh confidence interval và sai số chuẩn giữa các mô hình.
Poisson GLM:
glm(y ~ x, family=poisson)
Quasi-Poisson:
glm(y ~ x, family=quasipoisson)
Negative Binomial:
glm.nb(y ~ x)
Poisson GLM là mô hình nền tảng cho dữ liệu đếm;
Khi có overdispersion:
Dùng Negative Binomial GLM nếu cần mô hình xác suất;
Dùng Quasi-Poisson GLM nếu cần inference đơn giản;
Đánh giá cần kết hợp deviance, phần dư, và lựa chọn mô hình phù hợp
Chương này tập trung vào GLMs cho dữ liệu dương và liên tục – thường là các đại lượng đo lường như thời gian, chi phí, năng suất,…
Hai phân phối chính được sử dụng:
Phân phối Gamma (V(μ) = μ²)
Phân phối Inverse Gaussian (V(μ) = μ³)
Mục tiêu là mô hình hóa quan hệ bất đối xứng giữa biến phản hồi và biến giải thích.
Dữ liệu thường lệch phải, không thể có giá trị âm.
Phương sai thường tăng theo giá trị trung bình.
Các hàm phương sai tăng nhanh như μ² và μ³ thường xuất hiện ⇒ phù hợp với Gamma và Inverse Gaussian GLMs.
Dùng để mô tả thời gian giữa các sự kiện Poisson.
Định nghĩa đơn vị deviance:
\[ d(y, \mu) = 2\left( -\log \frac{y}{\mu} + \frac{y - \mu}{\mu} \right) \]
Phân phối Deviance xấp xỉ phân phối chi bình phương khi \(\phi \leq \frac{1}{3}\):
\[ \text{Deviance} \sim \chi^2_{n - p'} \]
Liên kết chuẩn (canonical link) trong phân phối Poisson là hàm nghịch đảo:
\[ \eta = \frac{1}{\mu} \]
Trong thực hành, thường dùng log-link để đảm bảo \(μ>0\) và dễ diễn giải.
Dùng cho dữ liệu lệch mạnh hơn Gamma.
Có liên hệ với thời gian chạm ngưỡng trong chuyển động Brown (Brownian motion).
Hàm phương sai: \(V(\mu) = \mu^3\)
Liên kết chuẩn: \(\eta = 1/\mu^2\), nhưng thường dùng log-link hơn để đảm bảo \(μ> 0\).
Dùng được cho cả Gamma và Inverse Gaussian:
"log" – phổ biến nhất, đảm bảo \(μ > 0\);
"identity" – dùng khi mối quan hệ tuyến
tính;
"inverse" – liên kết chuẩn của Gamma;
"1/mu^2" – liên kết chuẩn của Inverse
Gaussian.
Cả hai mô hình đều cần ước lượng \(ϕ\)
Gamma GLM:
Ước lượng Pearson và deviance khác nhau nhưng gần nhau;
LRT dựa trên phân phối F nếu φ được ước lượng.
Inverse Gaussian GLM:
Ước lượng MLE của $ϕ$ là chính xác.
Deviance tuân theo phân phối \(χ^2\) đúng (không chỉ xấp xỉ).
Case study 1 (permeability):
Dữ liệu đo độ thấm của vật liệu xây dựng;
Phù hợp với mô hình inverse Gaussian + log-link:
glm(Perm ~ Mach * Day, family=inverse.gaussian(link="log"), data=perm)
Case study 2 (onion yield):
Cú pháp cho Gamma GLM:
glm(formula, family=Gamma(link="log"))
Cú pháp cho Inverse Gaussian GLM:
glm(formula, family=inverse.gaussian(link="log"))
Có thể sử dụng các liên kết "log",
"inverse", "identity" cho cả hai; riêng
Inverse Gaussian còn thêm "1/mu^2".
Mô hình Gamma và Inverse Gaussian rất thích hợp cho dữ liệu liên tục và dương với phương sai tăng theo trung bình.
Việc chọn đúng hàm liên kết và phân phối rất quan trọng để mô hình phản ánh chính xác bản chất dữ liệu.
R cung cấp công cụ linh hoạt để khớp, chẩn đoán, và kiểm định các mô hình này
Chương này mở rộng phạm vi GLMs đến một lớp phân phối đặc biệt gọi là Tweedie distributions, giúp xử lý:
Dữ liệu có cấu trúc liên tục + đếm (semicontinuous);
Dữ liệu không âm, lệch phải, có giá trị 0 với xác suất dương;
Mô hình Tweedie đặc biệt thích hợp cho mô hình hóa bảo hiểm, tài chính, và môi trường.
Là một nhánh của Exponential Dispersion Models (EDMs), xác định bởi:
\[ \text{Var}(Y) = \phi \mu^p \]
Với:
\(μ\): kỳ vọng;
\(ϕ\): tham số phân tán;
\(p\): tham số chỉ số (index parameter) đặc trưng cho dạng phân phối
| Giá trị \(p\) | Loại phân phối tương ứng |
|---|---|
| 0 | Normal |
| 1 | Poisson |
| (1,2) | Compound Poisson-Gamma |
| 2 | Gamma |
| 3 | Inverse Gaussian |
Trong nhiều trường hợp thực tế, dữ liệu có phân phối với phần tử:
Giá trị 0 với xác suất lớn (tương ứng với đếm hoặc không xảy ra sự kiện),
Giá trị dương liên tục (ví dụ chi phí, tổn thất,…).
Phân phối Tweedie với \(1 < p < 2\) mô hình hóa rất tốt kiểu dữ liệu này.
Không có dạng xác suất đóng – cần sử dụng:
Phương pháp xấp xỉ (quasi-likelihood);
Phương pháp lập trình tối ưu hóa (profile likelihood);
Dựng GLM bằng cách ước lượng đồng thời \(β\), \(ϕ\) và \(p\).
Cần gói statmod, tweedie, hoặc
mgcv:
library(statmod) library(tweedie) glm(TotalCost ~ Age + Sex, family=tweedie(var.power=1.5, link.power=0), data=df)
Có thể dùng hàm tweedie.profile() để chọn giá trị
tối ưu cho ppp.
Bảo hiểm: dự đoán chi phí y tế, tổn thất;
Sinh thái học: mật độ loài + vùng không quan sát được;
Năng lượng: dữ liệu tiêu thụ có nhiều số 0 và phân bố lệch.
Tổng kết chương
Mô hình Tweedie mở rộng GLMs sang các tình huống dữ liệu phức tạp:
Dữ liệu bán liên tục;
Phân phối lệch và không chuẩn;
Nhiều giá trị 0 có tính hệ thống;
Tuy tính toán phức tạp hơn, nhưng Tweedie GLMs là công cụ cực kỳ linh hoạt và mạnh mẽ trong mô hình hóa thực nghiệm hiện đại.
Chương này trình bày các kỹ thuật mở rộng để:
Vượt qua các giới hạn của GLMs cổ điển;
Cải thiện độ linh hoạt trong mô hình hóa phi tuyến, phân tán thay đổi,…;
Áp dụng kỹ thuật như spline, smoothers, quasi-likelihood và mô hình phân tán thay đổi (heteroscedastic GLMs).
Trong GLM cổ điển, mối quan hệ giữa biến giải thích và biến phản hồi là tuyến tính sau hàm liên kết.
Khi điều này không đúng, có thể dùng:
Hàm spline (splines::ns(),
bs());
Smoothers (mgcv::gam()).
Ví dụ R:
library(splines) glm(y ~ ns(x, df=4), family=poisson, data=df)
Natural splines: tránh hiện tượng dao động ở biên;
B-splines: kiểm soát tốt hơn mức độ trơn;
GAM (Generalized Additive Models): mở rộng GLM với thành phần trơn hóa:
library(mgcv) gam(y ~ s(x1) + s(x2), family=poisson, data=df)
Trong nhiều ứng dụng, tham số phân tán \(ϕ\) không hằng số;
Có thể mô hình hóa \(ϕ\) như một hàm số của biến giải thích:
Dùng quasi-likelihood;
Dùng mô hình lồng (hierarchical/multilevel GLMs);
Hoặc mô hình hai phần (double GLM).
Dùng khi chưa xác định được chính xác dạng liên kết;
GAM, spline và kernel regression giúp duy trì tính linh hoạt nhưng vẫn dễ giải thích.
Kết hợp GLM với các thành phần ngẫu nhiên:
Dữ liệu phân cấp, lồng ghép (ví dụ: học sinh trong lớp, bệnh nhân trong bệnh viện);
Sử dụng glmer() trong lme4:
library(lme4) glmer(y ~ x + (1 | group), family=poisson, data=df)
Ngoài AIC/BIC còn có:
GCV (Generalized Cross-Validation);
Deviance explained;
Adjusted R² cho GAMs.
Tổng kết chương
GLMs cổ điển mạnh nhưng có giới hạn trong:
Biến hiệu ứng phi tuyến;
Phân tán thay đổi;
Cấu trúc dữ liệu lồng;
Chương 13 trình bày cách kết hợp các kỹ thuật hiện đại (spline, GAM, mô hình hỗn hợp) để mở rộng tính linh hoạt và khả năng mô hình hóa dữ liệu thực tế.
# Tải các thư viện cần thiết
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(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.4.3
library(summarytools)
## Warning: package 'summarytools' was built under R version 4.4.3
library(tidyverse)
## Warning: package 'tidyverse' was built under R version 4.4.1
## Warning: package 'tidyr' was built under R version 4.4.1
## Warning: package 'readr' was built under R version 4.4.1
## Warning: package 'purrr' was built under R version 4.4.1
## Warning: package 'forcats' was built under R version 4.4.1
## Warning: package 'lubridate' was built under R version 4.4.1
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ forcats 1.0.0 ✔ stringr 1.5.1
## ✔ lubridate 1.9.3 ✔ tibble 3.2.1
## ✔ purrr 1.0.2 ✔ tidyr 1.3.1
## ✔ readr 2.1.5
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ✖ tibble::view() masks summarytools::view()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(lubridate)
library(scales)
## Warning: package 'scales' was built under R version 4.4.1
##
## Attaching package: 'scales'
##
## The following object is masked from 'package:purrr':
##
## discard
##
## The following object is masked from 'package:readr':
##
## col_factor
# Đọc file CSV
data <- read.csv("D:/PTDLDT/Supermarket Transactions.csv")
# Kiểm tra cấu trúc dữ liệu
str(data)
## '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ộ dữ liệu
summary(data)
## 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
Bảng kết quả cho thấy tập dữ liệu gồm 14.059 dòng với nhiều biến thông tin về khách hàng, sản phẩm và giao dịch. Bao gồm biến định lượng và biến định tính.
# Chọn các biến định lượng
numeric_vars <- data %>%
select(AnnualIncome, Children, UnitsSold, Revenue)
# Tóm tắt mô tả chi tiết
summary(numeric_vars)
## AnnualIncome Children UnitsSold Revenue
## Length:14059 Min. :0.00 Min. :1.000 Min. : 0.53
## Class :character 1st Qu.:1.00 1st Qu.:3.000 1st Qu.: 6.84
## Mode :character Median :3.00 Median :4.000 Median :11.25
## Mean :2.53 Mean :4.081 Mean :13.00
## 3rd Qu.:4.00 3rd Qu.:5.000 3rd Qu.:17.37
## Max. :5.00 Max. :8.000 Max. :56.70
Các biến định lượng có phân bố hợp lý. Children trung
bình khoảng 2.5, UnitsSold phổ biến từ 3–5 sản phẩm, và
Revenue trung bình 13 đơn vị tiền, cho thấy sự đa dạng về
giá trị đơn hàng.
categorical_vars <- c("Gender", "MaritalStatus", "Homeowner", "City", "StateorProvince",
"Country", "ProductFamily", "ProductDepartment", "ProductCategory")
# Tạo bảng tần suất và tần suất tương đối
for (var in categorical_vars) {
cat("\n\n==>", var, "\n")
print(prop.table(table(data[[var]])) * 100)
}
##
##
## ==> Gender
##
## F M
## 50.99936 49.00064
##
##
## ==> MaritalStatus
##
## M S
## 48.83704 51.16296
##
##
## ==> Homeowner
##
## N Y
## 39.93883 60.06117
##
##
## ==> City
##
## Acapulco Bellingham Beverly Hills Bremerton Camacho
## 2.7242336 1.0171420 5.7685468 5.9321431 3.2150224
## Guadalajara Hidalgo Los Angeles Merida Mexico City
## 0.5334661 6.0103848 6.5865282 4.6518245 1.3798990
## Orizaba Portland Salem San Andres San Diego
## 3.3003770 6.2308841 9.8584537 4.4170994 6.1597553
## San Francisco Seattle Spokane Tacoma Vancouver
## 0.9246746 6.5580767 6.2237712 8.9408920 4.5024539
## Victoria Walla Walla Yakima
## 1.2518671 1.1380610 2.6744434
##
##
## ==> StateorProvince
##
## BC CA DF Guerrero Jalisco OR Veracruz
## 5.7543211 19.4395049 5.7969984 2.7242336 0.5334661 16.0893378 3.3003770
## WA Yucatan Zacatecas
## 32.4845295 4.6518245 9.2254072
##
##
## ==> Country
##
## Canada Mexico USA
## 5.754321 26.232307 68.013372
##
##
## ==> ProductFamily
##
## Drink Food Non-Consumable
## 8.891102 72.217085 18.891813
##
##
## ==> ProductDepartment
##
## Alcoholic Beverages Baked Goods Baking Goods Beverages
## 2.5321858 3.0229746 7.6250089 4.8367594
## Breakfast Foods Canned Foods Canned Products Carousel
## 1.3372217 6.9492852 0.7753041 0.4196600
## Checkout Dairy Deli Eggs
## 0.5832563 6.4229319 4.9719041 1.4083505
## Frozen Foods Health and Hygiene Household Meat
## 9.8300021 6.3518031 10.1002916 0.6330464
## Periodicals Produce Seafood Snack Foods
## 1.4368020 14.1830856 0.7255139 11.3806103
## Snacks Starchy Foods
## 2.5037343 1.9702682
##
##
## ==> ProductCategory
##
## Baking Goods Bathroom Products Beer and Wine
## 3.4426346 2.5962017 2.5321858
## Bread Breakfast Foods Candles
## 3.0229746 2.9660716 0.3200797
## Candy Canned Anchovies Canned Clams
## 2.5037343 0.3129668 0.3769827
## Canned Oysters Canned Sardines Canned Shrimp
## 0.2489508 0.2845153 0.2702895
## Canned Soup Canned Tuna Carbonated Beverages
## 2.8736041 0.6188207 1.0953837
## Cleaning Supplies Cold Remedies Dairy
## 1.3443346 0.6614980 6.4229319
## Decongestants Drinks Eggs
## 0.6045949 0.9602390 1.4083505
## Electrical Frozen Desserts Frozen Entrees
## 2.5250729 2.2974607 0.8393200
## Fruit Hardware Hot Beverages
## 5.4413543 0.9175617 1.6075112
## Hygiene Jams and Jellies Kitchen Products
## 1.4012376 4.1823743 1.5434953
## Magazines Meat Miscellaneous
## 1.4368020 5.4129028 0.2987410
## Packaged Vegetables Pain Relievers Paper Products
## 0.3414183 1.3656732 2.4539441
## Pizza Plastic Products Pure Juice Beverages
## 1.3798990 1.0029163 1.1736254
## Seafood Side Dishes Snack Foods
## 0.7255139 1.0882709 11.3806103
## Specialty Starchy Foods Vegetables
## 2.0556227 1.9702682 12.2910591
Giới tính: Phân bố gần như đồng đều (Nữ 51%, Nam 49%).
Tình trạng hôn nhân: Khách hàng độc thân chiếm đa số (51%).
Sở hữu nhà: 60% khách hàng có nhà riêng.
Khu vực: Tập trung chủ yếu tại Mỹ (68%), đặc biệt ở bang Washington, California, Oregon.
Sản phẩm: Thực phẩm chiếm ưu thế lớn (72%), đặc biệt là rau củ và đồ ăn nhẹ.
Thành phố nổi bật: Salem, Tacoma, Los Angeles.
→ Nhìn chung, khách hàng chủ yếu là người Mỹ, có nhà, tiêu dùng mạnh vào thực phẩm, đặc biệt là rau và snack.
Giới tính (Gender)
# Tần suất và biểu đồ giới tính
gender_freq <- data %>% count(Gender)
gender_freq
## Gender n
## 1 F 7170
## 2 M 6889
# Biểu đồ
ggplot(gender_freq, aes(x = Gender, y = n, fill = Gender)) +
geom_col() +
labs(title = "Phân phối giới tính", x = "Giới tính", y = "Số lượng") +
theme_minimal()
Biểu đồ cho thấy sự phân bố giới tính của khách hàng gần như cân bằng:
Nữ chiếm khoảng 51%, nhỉnh hơn một chút so với nam.
Nam chiếm khoảng 49%.
Kết luận: Không có sự chênh lệch lớn về giới tính trong tập khách hàng, cho thấy nhóm khách hàng của siêu thị được phân bố đồng đều giữa nam và nữ. Điều này có thể giúp doanh nghiệp thiết kế sản phẩm, chương trình khuyến mãi phù hợp cho cả hai giới.
Tình trạng hôn nhân (Marital Status)
marital_freq <- data %>% count(MaritalStatus)
marital_freq
## MaritalStatus n
## 1 M 6866
## 2 S 7193
ggplot(marital_freq, aes(x = MaritalStatus, y = n, fill = MaritalStatus)) +
geom_col() +
labs(title = "Tình trạng hôn nhân", x = "Tình trạng", y = "Số lượng") +
theme_minimal()
Biểu đồ cho thấy số khách hàng độc thân (S) nhỉnh hơn một chút so với số khách hàng đã kết hôn (M).
Sự chênh lệch không quá lớn, cho thấy nhóm khách hàng khá cân bằng giữa hai tình trạng hôn nhân.
Kết luận: Khách hàng trong dữ liệu có sự phân bố tương đối đồng đều giữa độc thân và đã kết hôn, giúp phân tích nhu cầu và hành vi tiêu dùng theo từng nhóm dễ dàng hơn.
Tình trạng sở hữu nhà (Homeowner)
homeowner_freq <- data %>% count(Homeowner)
homeowner_freq
## Homeowner n
## 1 N 5615
## 2 Y 8444
ggplot(homeowner_freq, aes(x = Homeowner, y = n, fill = Homeowner)) +
geom_col() +
labs(title = "Khách hàng có sở hữu nhà không?", x = "Homeowner", y = "Số lượng") +
theme_minimal()
Số lượng khách hàng sở hữu nhà (Y) cao hơn đáng kể so với số không sở hữu nhà (N).
Ước tính tỷ lệ: Khoảng 60% khách hàng sở hữu nhà, còn lại 40% không sở hữu.
Kết luận: Đa số khách hàng trong tập dữ liệu đã sở hữu nhà. Điều này có thể liên quan đến mức độ ổn định tài chính cao hơn, và là yếu tố hữu ích trong việc phân tích khả năng chi tiêu, đầu tư hoặc tín dụng.
Thành phố (City)
top_city <- data %>% count(City, sort = TRUE) %>% slice(1:10)
top_city
## City n
## 1 Salem 1386
## 2 Tacoma 1257
## 3 Los Angeles 926
## 4 Seattle 922
## 5 Portland 876
## 6 Spokane 875
## 7 San Diego 866
## 8 Hidalgo 845
## 9 Bremerton 834
## 10 Beverly Hills 811
ggplot(top_city, aes(x = reorder(City, n), y = n)) +
geom_col(fill = "skyblue") +
coord_flip() +
labs(title = "Top 10 thành phố có khách hàng nhiều nhất", x = "Thành phố", y = "Số lượng") +
theme_minimal()
Biểu đồ cho thấy Salem có số lượng khách hàng cao nhất, theo sau là Tacoma và Los Angeles. Top 10 tập trung chủ yếu ở các thành phố phía Tây nước Mỹ. Sự chênh lệch rõ rệt giữa các thành phố đầu và cuối danh sách.
Bang hoặc tỉnh (State or Province)
state_freq <- data %>% count(StateorProvince, sort = TRUE) %>% slice(1:10)
state_freq
## StateorProvince n
## 1 WA 4567
## 2 CA 2733
## 3 OR 2262
## 4 Zacatecas 1297
## 5 DF 815
## 6 BC 809
## 7 Yucatan 654
## 8 Veracruz 464
## 9 Guerrero 383
## 10 Jalisco 75
ggplot(state_freq, aes(x = reorder(StateorProvince, n), y = n)) +
geom_col(fill = "seagreen") +
coord_flip() +
labs(title = "Top 10 bang có khách hàng nhiều nhất", x = "Bang", y = "Số lượng") +
theme_minimal()
Biểu đồ cho thấy bang Washington (WA) có số lượng khách hàng cao nhất, theo sau là California (CA) và Oregon (OR). Ngoài các bang của Mỹ, dữ liệu còn ghi nhận khách hàng từ một số bang của Mexico như Zacatecas và Distrito Federal. Sự chênh lệch lớn giữa các bang cho thấy khách hàng tập trung chủ yếu ở khu vực Tây Bắc nước Mỹ.
Quốc gia (Country)
country_freq <- data %>% count(Country, sort = TRUE)
country_freq
## Country n
## 1 USA 9562
## 2 Mexico 3688
## 3 Canada 809
ggplot(country_freq, aes(x = reorder(Country, n), y = n)) +
geom_col(fill = "purple") +
coord_flip() +
labs(title = "Phân phối khách hàng theo quốc gia", x = "Quốc gia", y = "Số lượng") +
theme_minimal()
Biểu đồ cho thấy khách hàng tập trung chủ yếu tại Hoa Kỳ (USA), chiếm phần lớn so với các quốc gia còn lại. Mexico là quốc gia có số lượng khách hàng nhiều thứ hai, tuy nhiên cách biệt khá lớn. Điều này cho thấy thị trường chính của siêu thị là tại Mỹ. Biểu đồ trực quan, dễ hiểu với màu sắc nổi bật.
Nhóm sản phẩm (Product Family)
family_freq <- data %>% count(ProductFamily, sort = TRUE)
family_freq
## ProductFamily n
## 1 Food 10153
## 2 Non-Consumable 2656
## 3 Drink 1250
ggplot(family_freq, aes(x = reorder(ProductFamily, n), y = n)) +
geom_col(fill = "coral") +
coord_flip() +
labs(title = "Phân phối theo nhóm sản phẩm", x = "Nhóm sản phẩm", y = "Số lượng") +
theme_minimal()
Biểu đồ cho thấy nhóm sản phẩm Food (Thực phẩm) chiếm số lượng giao dịch cao nhất, vượt trội so với các nhóm còn lại như Drink (Đồ uống) và Non-Consumable (Hàng không tiêu dùng). Điều này phản ánh nhu cầu tiêu dùng thực phẩm là chủ yếu tại siêu thị. Biểu đồ rõ ràng, dễ đọc và trực quan.
Bộ phận sản phẩm (Product Department)
dept_freq <- data %>% count(ProductDepartment, sort = TRUE)
dept_freq
## ProductDepartment n
## 1 Produce 1994
## 2 Snack Foods 1600
## 3 Household 1420
## 4 Frozen Foods 1382
## 5 Baking Goods 1072
## 6 Canned Foods 977
## 7 Dairy 903
## 8 Health and Hygiene 893
## 9 Deli 699
## 10 Beverages 680
## 11 Baked Goods 425
## 12 Alcoholic Beverages 356
## 13 Snacks 352
## 14 Starchy Foods 277
## 15 Periodicals 202
## 16 Eggs 198
## 17 Breakfast Foods 188
## 18 Canned Products 109
## 19 Seafood 102
## 20 Meat 89
## 21 Checkout 82
## 22 Carousel 59
ggplot(dept_freq, aes(x = reorder(ProductDepartment, n), y = n)) +
geom_col(fill = "steelblue") +
coord_flip() +
labs(title = "Phân phối theo phòng ban sản phẩm", x = "Phòng ban", y = "Số lượng") +
theme_minimal()
Biểu đồ cho thấy các phòng ban như Snacks, Beverages và Dairy có số lượng giao dịch cao nhất. Điều này phản ánh thói quen tiêu dùng phổ biến là các sản phẩm ăn uống nhanh. Phân phối giữa các phòng ban khá đa dạng, biểu đồ trình bày rõ ràng và dễ hiểu.
Loại sản phẩm (Product Category)
cat_freq <- data %>% count(ProductCategory, sort = TRUE) %>% slice(1:15)
cat_freq
## ProductCategory n
## 1 Vegetables 1728
## 2 Snack Foods 1600
## 3 Dairy 903
## 4 Fruit 765
## 5 Meat 761
## 6 Jams and Jellies 588
## 7 Baking Goods 484
## 8 Bread 425
## 9 Breakfast Foods 417
## 10 Canned Soup 404
## 11 Bathroom Products 365
## 12 Beer and Wine 356
## 13 Electrical 355
## 14 Candy 352
## 15 Paper Products 345
ggplot(cat_freq, aes(x = reorder(ProductCategory, n), y = n)) +
geom_col(fill = "darkorange") +
coord_flip() +
labs(title = "Top 15 loại sản phẩm phổ biến", x = "Loại sản phẩm", y = "Số lượng") +
theme_minimal()
Biểu đồ hiển thị 15 loại sản phẩm phổ biến nhất.
Hàng đầu: “Vegetables” (Rau củ) dẫn đầu về số lượng, cho thấy nhu cầu cao về thực phẩm tươi.
Xu hướng: “Snack Foods” và “Dairy” cũng phổ biến, phản ánh thói quen ăn uống đa dạng.
Tiện lợi: Các sản phẩm như “Bread” và “Canned Soup” cho thấy sự ưa chuộng thực phẩm tiện lợi.
Tổng quan, nhu cầu cao đối với thực phẩm tươi sống và tiện lợi.
Các biến định tính giúp hiểu sâu hơn về đặc điểm tập khách hàng như giới tính, hôn nhân, nơi sống.
Các đặc tính sản phẩm và phân phối địa lý cung cấp bức tranh tổng thể giúp định vị thị trường tiềm năng hoặc điều chỉnh danh mục sản phẩm phù hợp với từng khu vực.
Thông qua thống kê mô tả chi tiết:
Các biến định lượng phản ánh sự phân tán lớn giữa các nhóm khách hàng và sản phẩm.
Các biến định tính cho thấy sự đa dạng trong tập khách hàng và danh mục hàng hóa.
Doanh thu tập trung ở một số bang, thành phố và nhóm sản phẩm nhất định, mở ra cơ hội tối ưu hóa chiến lược kinh doanh.
Thống kê mô tả là bước nền tảng không thể thiếu trước khi tiến hành các kỹ thuật phân tích dữ liệu nâng cao như clustering, phân tích RFM, hoặc mô hình hóa hành vi tiêu dùng.