Generalized Linear Models With Examples in R là một tài liệu hướng
dẫn thực hành về Mô hình Hồi quy Tuyến tính Tổng quát (GLM), kết hợp lý
thuyết thống kê với ví dụ minh họa bằng ngôn ngữ R. Sách giới thiệu các
khái niệm cơ bản của GLM, bao gồm hàm liên kết (link function), phân
phối xác suất và cách xây dựng mô hình cho nhiều loại dữ liệu khác nhau
như nhị phân (hồi quy logistic), dữ liệu đếm (hồi quy Poisson) hay dữ
liệu liên tục dương (hồi quy Gamma). Đồng thời, sách hướng dẫn chi tiết
cách sử dụng hàm glm() trong R để ước lượng, đánh giá và
diễn giải kết quả, cùng với các kiểm định quan trọng như goodness-of-fit
và xử lý overdispersion.
Ngoài ra, sách còn cung cấp nhiều ví dụ thực tế, từ dữ liệu y tế đến sinh thái học, giúp người đọc áp dụng GLM vào các bài toán cụ thể. Cuối cùng, sách mở rộng sang các chủ đề nâng cao như mô hình hỗn hợp (mixed-effects GLM) và so sánh với phương pháp khác như GAM hay machine learning. Đây là tài liệu phù hợp cho sinh viên, nhà nghiên cứu hoặc bất kỳ ai muốn phân tích dữ liệu định hướng thống kê bằng R một cách hiệu quả.
Chương 1 giới thiệu các khái niệm cơ bản trong phân tích dữ liệu và xây dựng mô hình, thường sử dụng dữ liệu dung tích phổi (FEV) làm ví dụ. Nội dung chương bao gồm:
Plotting Data: Chương này bắt đầu bằng việc giới thiệu cách vẽ dữ liệu. Các ví dụ minh họa bao gồm biểu đồ FEV (dung tích thở ra gắng sức trong một giây) so với tuổi và FEV so với chiều cao. Nguồn và đặc biệt đề cập đến việc vẽ dữ liệu FEV so với tuổi cho người hút thuốc và không hút thuốc.
Statistical Models Describe Both Random and Systematic Features of Data: Phần này giải thích rằng các mô hình thống kê mô tả cả các đặc điểm ngẫu nhiên và có hệ thống của dữ liệu.
Chương 1 cũng thảo luận về cách xử lý các biến phân loại (categorical variables) bằng cách sử dụng biến giả (dummy variables). Đối với một yếu tố có k mức (levels), cần k-1 biến giả. Ví dụ, tình trạng hút thuốc có thể được mã hóa bằng một biến giả, trong đó 0 nếu là người không hút thuốc và 1 nếu là người hút thuốc. Nếu tình trạng hút thuốc có ba mức, sẽ cần hai biến giả.
Accuracy vs Parsimony: Một khía cạnh quan trọng được đề cập là sự đánh đổi giữa độ chính xác và tính tiết kiệm (parsimony) của mô hình. Một ứng dụng trong lĩnh vực sức khỏe là thiết lập phạm vi cân nặng bình thường cho trẻ em dựa trên tuổi và giới tính. Mục đích là để xác định xem một đứa trẻ có nằm ngoài phạm vi bình thường hay không. Dữ liệu dung tích phổi thực chất là một phần trích từ một nghiên cứu lớn hơn nhằm thiết lập phạm vi FEV bình thường ở mỗi độ tuổi.
Experiments vs Observational Studies: Causality vs Association: Chương này cũng phân biệt giữa nghiên cứu thực nghiệm và nghiên cứu quan sát, nhấn mạnh sự khác biệt giữa mối quan hệ nhân quả (causality) và mối liên hệ (association).
Tóm lại, Chương 1 giới thiệu các bước ban đầu trong phân tích dữ liệu, bao gồm trực quan hóa dữ liệu, hiểu các thành phần của mô hình thống kê, xử lý biến phân loại, xem xét sự cân bằng giữa độ chính xác và tính tiết kiệm của mô hình, và nhận biết sự khác biệt giữa các loại hình nghiên cứu. Dữ liệu dung tích phổi là một ví dụ chính được sử dụng để minh họa các khái niệm này.
Chương này giới thiệu về công thức ma trận của mô hình hồi quy tuyến tính (Matrix Formulation of Linear Regression Models). Nội dung chính của chương bao gồm:
Giải thích khái niệm và cách tính bậc tự do dư (residual degrees of freedom). Bậc tự do dư bằng số lượng quan sát trừ đi số lượng hệ số được ước lượng trong thành phần hệ thống của mô hình hồi quy tuyến tính. Việc ước lượng mỗi hệ số được coi là “sử dụng” một quan sát, do đó chỉ còn lại n - p’ quan sát độc lập để ước lượng phương sai, trong đó p’ là số tham số ước lượng.
Cách tính tổng bình phương phần dư (residual sum of squares - rss) được trình bày. Ước lượng của phương sai σ² là s², được tính bằng rss chia cho bậc tự do dư.
Chương 2 cũng thảo luận về chọn lọc mô hình (model selection). Các công cụ hỗ trợ như add1() (thêm một biến) và drop1() (loại bỏ một biến) được đề cập. Hàm step() sử dụng các phương pháp tự động để đề xuất mô hình dựa trên AIC (mặc định) hoặc BIC.
Việc so sánh các mô hình không lồng nhau (non-nested models) được thực hiện bằng cách sử dụng AIC (Akaike Information Criterion) và BIC (Bayesian Information Criterion). Công thức tổng quát của AIC và BIC liên quan đến log-likelihood và số lượng tham số của mô hình, và chúng được áp dụng cho mô hình hồi quy tuyến tính bình thường trong Chương 2. Giá trị AIC hoặc BIC càng nhỏ (gần −∞) thì mô hình càng tốt.
Dữ liệu dung tích phổi (lungcap) được sử dụng để minh họa. Trong Chương 2, dữ liệu này được phân tích bằng cách sử dụng logarithm của FEV (log(FEV)) làm biến phản hồi và Chiều cao (Ht) là một trong các biến giải thích. Các mô hình sử dụng Age và Height (cùng với Smoke) làm biến dự đoán cho log(FEV) được so sánh bằng AIC/BIC. Kết quả từ AIC và BIC đều cho thấy sự kết hợp của Ht và Smoke hữu ích hơn Age và Smoke trong việc dự đoán log(FEV).
Dữ liệu tuổi thai và cân nặng sơ sinh (gestation) có khả năng cũng được sử dụng làm ví dụ trong Chương 2, minh họa mối quan hệ gần như tuyến tính giữa cân nặng sơ sinh trung bình và tuổi thai. Cách vẽ dữ liệu này với các điểm được phân biệt dựa trên số lượng quan sát (<20 hoặc ≥20) cũng được trình bày.
Nguyên tắc biên (marginality principle) được đề cập trong ngữ cảnh giữ lại các biến trong mô hình hồi quy tuyến tính.
Các bài tập liên quan đến Chương 2 được tham chiếu, bao gồm việc phân tích dữ liệu về nhu cầu năng lượng hàng ngày và cân nặng của cừu đực thiến và dữ liệu về huyết áp ở nam giới.
Việc thực hiện phân tích chẩn đoán (diagnostic analysis) và nhận thấy sự cần thiết của biến đổi biến phản hồi (như logarit) dường như được giới thiệu trong Chương 2 hoặc thông qua các bài tập của nó, được tham chiếu trong Chương 3.
Phân tích chẩn đoán (Diagnostic Analysis): Đây là một chủ đề trọng tâm của chương. Phân tích chẩn đoán được thực hiện để kiểm tra các giả định của mô hình hồi quy tuyến tính và xác định các vấn đề tiềm ẩn trong dữ liệu hoặc mô hình đã chọn. Điều này thường bao gồm việc kiểm tra phân dư (residuals).
Biến đổi dữ liệu (Data Transformations): Chương này thảo luận về việc biến đổi cả biến phản hồi (response variable) và biến giải thích (explanatory variables) để cải thiện mô hình và đáp ứng các giả định của hồi quy tuyến tính.
Biến đổi biến phản hồi: Ví dụ, việc sử dụng logarit của FEV (log(FEV)) làm biến phản hồi, như đã thấy trong Chương 2, được giải thích là cần thiết để đạt được phương sai gần như không đổi (constant variance). Chương 3 cung cấp các công cụ chẩn đoán (như biểu đồ phân dư chuẩn hóa so với giá trị fitted) giúp xác định sự cần thiết của biến đổi này.
Biến đổi biến giải thích: Các biến đôi khi cần biến đổi, chẳng hạn như logarit hóa, nghiệm đảo,… cũng được xem xét để mô hình hóa mối quan hệ giữa biến phản hồi và biến giải thích một cách phù hợp hơn.
Mô hình hóa xu hướng phi tuyến tính (Modelling Nonlinear Trends): Khi mối quan hệ giữa biến phản hồi và biến giải thích không thể được mô tả tốt bằng các biến đổi đơn giản, Chương 3 giới thiệu các kỹ thuật nâng cao hơn như:
Xu hướng đa thức (Polynomial Trends): Thêm các số mũ cao hơn của biến giải thích (ví dụ: x², x³, …) vào mô hình để tạo ra đường cong phức tạp hơn.
Spline hồi quy (Regression Splines): Sử dụng các hàm spline (như
natural cubic splines – ns() và B-splines –
bs()) để chia miền giá trị của biến giải thích thành các
đoạn và khớp các đoạn đó với các hàm trên mỗi đoạn, tạo ra một đường
cong linh hoạt hơn để mô tả mối quan hệ. Ví dụ: xem sách mô hình spline
(không được học kỹ trong môn này).
Nhận diện các điểm ngoại lệ và có ảnh hưởng (Identifying Outliers and Influential Observations): Chương 3 sẽ đề cập cách xác định các quan sát có ảnh hưởng bất thường hoặc có ảnh hưởng lớn đến mô hình (influential observations). Các thước đo như Cook’s distance và DFFITS được sử dụng để đo lường độ ảnh hưởng của quan sát. Một số đặc điểm cần kiểm tra bao gồm: điểm dư chuẩn hóa lớn và độ ảnh hưởng vượt ngưỡng. Vượt ngưỡng là các quan sát cần được xem xét lại vì có thể là do lỗi số liệu hoặc là kết quả hiếm có.
Nguyên lý ngẫu nhiên hóa (Linearity Principle): Nguyên tắc này được đề cập, nhấn mạnh rằng nếu tất cả các giả định tuyến tính được thỏa mãn thì các sai lệch là ngẫu nhiên.
Các ví dụ minh họa kết luận (Examples and Problems): Chương 3 sử dụng nhiều bộ dữ liệu khác nhau để minh họa các vấn đề như kiểm tra giả định, biến đổi dữ liệu, mô hình phi tuyến, độ ảnh hưởng,… Ví dụ: dữ liệu bệnh hen (FEV), dữ liệu chiều cao - độ tuổi - giới tính (height), dữ liệu thu nhập,…
Chương 4 mở rộng mô hình hồi quy tuyến tính để xử lý các tình huống mà mô hình tuyến tính không còn phù hợp, bằng cách sử dụng phương pháp ước lượng hợp lý cực đại (Maximum Likelihood Estimation - MLE). Các nội dung chính liên quan trong chương này:
Kiểm định giả thuyết mẫu lớn (Large Sample Hypothesis Testing):
Một trích đoạn đề cập đến chủ đề “Hypothesis Testing: Large Sample
Asymptotic Results” và minh họa việc tính kiểm định Wald (thông qua các
đại lượng như W.global và p.W.global) sử dụng
ma trận thông tin (inf.mat). Điều này cho thấy Chương 4 có
thể tập trung vào các phương pháp kiểm định giả thuyết dựa trên lý
thuyết mẫu lớn trong ngữ cảnh của các mô hình thống kê, đặc biệt là các
Mô hình Hồi quy Tuyến tính Tổng quát (GLMs).
Ví dụ dữ liệu tàu con thoi Challenger (Challenger Shuttle Data): Chương 4 có đề cập đến dữ liệu thực nghiệm về số vòng đệm chữ O (O-ring) bị hỏng trong các lần phóng tàu con thoi Challenger. Biến phản hồi là số lượng vòng đệm bị hỏng trong tổng số 6 vòng, đây là biến đếm có giới hạn trên. Nguồn trích dẫn nhấn mạnh rằng không có phép biến đổi dữ liệu nào có thể thay đổi bản chất của biến phản hồi này. Điều này cho thấy chương sử dụng ví dụ này để minh họa cho các khái niệm mô hình hóa hoặc kiểm định giả thuyết, và nhấn mạnh tính phù hợp (hoặc không phù hợp) của các kỹ thuật biến đổi dữ liệu trong từng loại biến.
Chương 4 không nhằm giới thiệu một họ phân phối GLM cụ thể nào, mà thay vào đó đóng vai trò như một chương chuyển tiếp, tập trung vào các nguyên lý thống kê tổng quát, như kiểm định giả thuyết mẫu lớn, kỹ thuật xấp xỉ hoặc minh họa phân tích qua dữ liệu thực nghiệm.
Chương 4 có thể được xem là phần mở rộng từ các chương đầu, cung cấp nền tảng toán học và thống kê cần thiết trước khi đi sâu vào từng dạng phân phối cụ thể trong GLM. Việc đề cập lại chủ đề biến đổi dữ liệu (nối tiếp từ Chương 3), nhưng với lập luận rằng có những trường hợp biến đổi không mang lại hiệu quả (như biến đếm giới hạn trong dữ liệu Challenger), cũng cho thấy chương này đóng vai trò lý thuyết và phản biện quan trọng trong mô hình hóa thống kê.
Chương 5 của cuốn sách tập trung vào cơ sở lý thuyết của Mô hình Tuyến tính Tổng quát (GLMs), đặc biệt là giới thiệu về Mô hình Phân tán Hàm mũ (Exponential Dispersion Models - EDMs).
Các điểm chính về Chương 5 được đề cập trong các nguồn bao gồm:
Mô hình Phân tán Hàm mũ (EDMs): Chương này giới thiệu và thảo luận về EDMs dưới dạng Dispersion Model Form (Dạng mô hình phân tán). Điều này là nền tảng lý thuyết cho các GLM khác nhau.
Độ Lệch Đơn vị (Unit Deviance): Khái niệm về độ lệch đơn vị (d(y, μ)) là một phần quan trọng trong chương này. Chương 5 thảo luận về Dạng mô hình phân tán và Độ lệch đơn vị, đề cập đến giá trị kỳ vọng của độ lệch đơn vị.
Bảng Tóm tắt Phân phối: Chương 5 tóm tắt các mô hình phân tán hàm mũ phổ biến, hiển thị hàm phương sai (V(μ)), hàm tích lũy (κ(θ)), tham số chính tắc (θ), tham số phân tán (φ), độ lệch đơn vị (d(y, μ)), phạm vi hỗ trợ (S), miền giá trị của μ (Ω) và miền giá trị của θ (Θ). Bảng này cũng liệt kê các chương liên quan cho từng phân phối (Chương 2&3 cho Normal, Chương 9 cho Binomial, Chương 10 cho Negative Binomial và Poisson, Chương 11 cho Gamma và Inverse Gaussian, Chương 12 cho Tweedie), lưu ý rằng Chương 5 không được liệt kê là chương chính cho bất kỳ phân phối phổ biến cụ thể nào trong bảng này.
Thảo luận về biến đổi ổn định phương sai, đặc biệt là liên quan đến việc xấp xỉ Tweedie GLMs.
Các Ví dụ và Dữ liệu:
Biểu đồ Chẩn đoán (Diagnostic Plots): Các biểu đồ chẩn đoán cũng được thảo luận, với tham chiếu trở lại.
Tóm lại, Chương 5 dường như đặt nền móng lý thuyết cho GLMs bằng cách giới thiệu về EDMs, Dispersion Model Form và Unit Deviance, đồng thời cung cấp các bảng tóm tắt các phân phối phổ biến và các tính chất của chúng. Nó cũng sử dụng các bộ dữ liệu cụ thể để minh họa các khái niệm hoặc vấn đề được thảo luận.
Chương này trình bày cách ước lượng các tham số chưa biết trong GLMs, bao gồm các hệ số hồi quy (β) và tham số phân tán (φ). Việc ước lượng chủ yếu dựa trên phương pháp ước lượng hợp lý cực đại (MLE).
Các nội dung chính
Phát biểu và phân tích đạo hàm xác suất: Tính đạo hàm của hàm log-likelihood theo β và φ bằng dạng xác suất hàm mũ EDM, từ đó xây dựng phương trình điểm (score equations) và ma trận thông tin Fisher.
Thuật toán Fisher Scoring / IRLS: Dùng để tìm nghiệm của các phương trình điểm và ước lượng các βj. Biến đổi thành dạng Iteratively Reweighted Least Squares (IRLS) — mỗi vòng lặp gồm tính giá trị phản hồi làm việc z, trọng số làm việc W, và cập nhật hệ số bằng hồi quy tuyến tính có trọng số. Giá trị khởi tạo thường là \(\scriptstyle \hat{\mu} = y + 0.1\) để tránh chia cho 0 hoặc log(0).
Phần dư độ lệch (Residual Deviance): Tổng độ lệch là thước đo
biến thiên còn lại sau khi mô hình được ước lượng. Có thể chuẩn hóa bằng
φ để thành scaled residual deviance. Trong R, dùng
deviance(fit) để trả về giá trị này.
Sai số chuẩn của các hệ số (Standard errors): Tính từ ma trận thông tin Fisher ngược, có thể viết: \(\scriptstyle \mathrm{se}(\hat{\beta}_j) = \sqrt{\phi \cdot v_j}\), với \(\scriptstyle v_j\) là phần tử chéo của \(\scriptstyle (X^\top W X)^{-1}\).
Dạng ma trận: Score vector: \(\scriptstyle \mathbf{U} = X^\top W \mathbf{M}(y - \mu)/\phi\), Fisher information: \(\scriptstyle \mathbf{I} = X^\top W X/\phi\)
Phương trình ước lượng:
\[
\hat{\beta}^{(r+1)} = (X^\top W X)^{-1} X^\top W z
\]
GLM cục bộ giống hồi quy tuyến tính: Ở mỗi bước lặp, fitting GLM
giống như hồi quy thường, với z là biến phản hồi và
W là trọng số. Có thể tính leverage, Cook’s distance,
dffits, dfbetas như trong hồi quy thường.
Ước lượng tham số phân tán φ: Không cần biết φ để ước lượng β, nhưng cần φ cho kiểm định giả thuyết và khoảng tin cậy. Có 3 phương pháp chính:
Modified profile likelihood (\(\scriptstyle \hat{\phi}_0\)): lý thuyết tốt nhất, nhưng tính toán phức tạp.
Mean deviance estimator (\(\scriptstyle \tilde{\phi} = \mathcal{D}(y, \hat{\mu}) / (n - p')\))
Pearson estimator (\(\scriptstyle \tilde{\phi} = \chi^2 / (n - p')\)), với \(\scriptstyle \chi^2 = \sum w_i (y_i - \hat{\mu}_i)^2 / V(\hat{\mu}_i)\)
Với GLM chuẩn (normal), cả ba phương pháp trùng nhau.
Với GLM gamma, estimator theo Pearson thường ổn định hơn vì deviance
nhạy cảm với giá trị y nhỏ.
Fitting GLMs trong R: Sử dụng hàm glm(), tương tự
như lm() nhưng thêm đối số family.
Một số family thường dùng: gaussian(),
binomial(), poisson(), Gamma(),
inverse.gaussian()
Một số hàm hỗ trợ: coef(), deviance(),
summary(), df.residual(),
fitted()
Thay đổi thông số fitting: Dùng glm.control() để
điều chỉnh độ chính xác (epsilon), số vòng lặp
(maxit), và in chi tiết (trace=TRUE)
Chương 7 của cuốn sách tập trung vào suy luận thống kê (Inference) cho Mô hình Tuyến tính Tổng quát (Generalized Linear Models - GLMs). Chương này giới thiệu và minh họa các phương pháp chính để đánh giá sự phù hợp của mô hình và kiểm định các giả thuyết về các tham số của mô hình.
Các nội dung chính về Chương 7 được đề cập trong các nguồn bao gồm:
Các phương pháp suy luận chính:
Kiểm định Tỷ số Khả năng (Likelihood Ratio Tests - LRT): Phương
pháp này được sử dụng để so sánh các mô hình lồng nhau (nested models).
Các giá trị kiểm định LRT được tính toán và so sánh với phân phối
Chi-bình phương (pchisq trong R) để thu được giá trị P
(P-values).
Kiểm định Wald (Wald Tests): Phương pháp này được sử dụng để kiểm định ý nghĩa thống kê của từng tham số riêng lẻ trong mô hình. Thống kê Wald được tính bằng tỷ lệ giữa ước lượng tham số (\(\scriptstyle \hat{\beta}_j\)) và sai số chuẩn của nó (\(\scriptstyle \mathrm{se}(\hat{\beta}_j)\)), tức là: \(\scriptstyle z = \hat{\beta}_j / \mathrm{se}(\hat{\beta}_j)\).Giá trị P-value được tính từ phân phối chuẩn tắc.(pnorm).
Khoảng tin cậy (Confidence Intervals): Khoảng tin cậy cho các tham số có thể được tính toán dựa trên ước lượng tham số và sai số chuẩn của chúng, thường sử dụng giá trị phân vị từ phân phối chuẩn tắc (ví dụ: qnorm(0.975) cho khoảng tin cậy 95%).
Phân tích Độ Lệch (Analysis of Deviance): Đây là một phương pháp
tương tự như phân tích phương sai (ANOVA) cho GLMs, được sử dụng để đánh
giá sự đóng góp của các biến giải thích vào mô hình. Bảng phân tích độ
lệch hiển thị độ lệch (Deviance), bậc tự do (df), độ lệch trung bình
(Mean deviance), thống kê F (khi φ không xác định) và giá trị P. Trong
R, hàm anova() với đối số test=“Chisq” được sử dụng để tạo
bảng này và thu được P-values dựa trên phân phối Chi-bình
phương.
Các chủ đề khác liên quan đến suy luận:
Suy luận khi tham số phân tán (dispersion parameter) φ được biết.
Suy luận khi tham số phân tán (dispersion parameter) φ không xác định.
So sánh các GLMs không lồng nhau sử dụng Tiêu chí Thông tin Akaike (AIC) và Tiêu chí Thông tin Bayesian (BIC) .
Các quy trình lựa chọn mô hình tự động như hồi quy tiến (forward regression), loại bỏ lùi (backward elimination), và hồi quy theo bước (step-wise regression).
Các bộ dữ liệu và ví dụ được sử dụng trong Chương 7:
Dữ liệu sự sống sót của chim cút (quail broods survival): Sử dụng Binomial GLM.
Dữ liệu số ngày ở khu vực bầu cử của các nhà lập pháp (legislators constituency days): Sử dụng Poisson GLM.
Dữ liệu về sự phong phú loài vẹm nước ngọt (freshwater mussels species abundance): Phân tích độ lệch và ước lượng tham số.
Dữ liệu noisy miner (nminer): Phân tích độ lệch .
Dữ liệu cây anh đào (trees): Phân tích độ lệch khi φ không xác định.
Tóm lại, Chương 7 cung cấp các công cụ thống kê cần thiết để đưa ra kết luận về các mô hình GLM đã lắp, tập trung vào việc kiểm định giả thuyết về các tham số và so sánh các mô hình khác nhau thông qua các phương pháp như kiểm định Tỷ số Khả năng, kiểm định Wald và phân tích Độ lệch.
Chương 8 tập trung vào chẩn đoán (diagnostics) và xác định các quan sát có ảnh hưởng (influential observations) trong Mô hình Tuyến tính Tổng quát (GLMs).
Các điểm chính về Chương bao gồm:
Sự cần thiết của các phương pháp chẩn đoán mới: Nguồn thảo luận về dữ liệu cây anh đào (cherry tree data) được mô hình hóa bằng gamma GLM. Nó chỉ ra rằng việc chỉ xem xét phần dư đơn giản (\(\scriptstyle y_i - \hat{\mu}_i\)) là không đủ khi phương sai thay đổi theo giá trị trung bình. Nguồn này kết luận rằng cần có “một định nghĩa mới về phần dư”. Điều này nhấn mạnh lý do tại sao các kỹ thuật chẩn đoán chuyên biệt cho GLMs (được đề cập trong Chương 8) lại quan trọng.
Các loại phần dư: Chương này sử dụng và thảo luận về nhiều loại phần dư khác nhau để đánh giá sự phù hợp của mô hình. Các loại phần dư được nhắc đến bao gồm phần dư deviance (deviance residuals), phần dư quantile (quantile residuals), phần dư làm việc (working residuals), và phần dư chuẩn hóa (standardized residuals). Nguồn lưu ý rằng việc giải thích phần dư deviance có thể khó khăn.
Biểu đồ chẩn đoán (Diagnostic plots): Biểu đồ phần dư là công cụ chính để kiểm tra các giả định của mô hình và xác định các vấn đề. Ví dụ, một biểu đồ phần dư quantile chống lại một biến giải thích có thể cho thấy một xu hướng cong, cho thấy mô hình hiện tại là không đủ. Các biểu đồ khác bao gồm phần dư chuẩn hóa chống lại giá trị phù hợp hoặc các biến giải thích, và các biểu đồ phần dư làm việc chống lại bộ dự báo tuyến tính (linear predictor).
Xác định các quan sát có ảnh hưởng (Identifying influential observations): Chương 8 đề cập đến việc tìm kiếm các điểm dữ liệu có ảnh hưởng lớn đến các ước lượng tham số của mô hình. Các thước đo ảnh hưởng được sử dụng bao gồm Khoảng cách Cook (Cook’s distance) và dffits. Các quan sát có thể được xác định là có “đòn bẩy cao” (high leverage), “phần dư lớn” (large residual), hoặc “có ảnh hưởng” (influential). Ví dụ 8.12 và Hình 8.7 minh họa việc sử dụng Khoảng cách Cook và dffits để xác định các quan sát có ảnh hưởng trong dữ liệu cây anh đào.
Biện pháp khắc phục (Remedies): Chương này cũng đề cập đến cách xử lý các quan sát có ảnh hưởng đã được xác định. Một biện pháp là lắp lại mô hình mà không bao gồm các quan sát có ảnh hưởng, mặc dù nguồn ngụ ý rằng ngay cả một quan sát có Khoảng cách Cook lớn cũng có thể không được xác định là significantly influential, và cần thận trọng khi loại bỏ dữ liệu.
Các bộ dữ liệu và ví dụ: Các khái niệm và kỹ thuật trong Chương 8 được minh họa bằng các bộ dữ liệu như dữ liệu cây anh đào (cherry tree data) và dữ liệu noisy miner. Một ví dụ về Binomial GLM cũng được sử dụng để minh họa các biểu đồ phần dư khác nhau.
Tóm lại, Chương 8 trang bị cho người đọc các công cụ cần thiết để đánh giá một cách có hệ thống sự phù hợp của mô hình GLM đã lắp và xác định những điểm dữ liệu có thể làm sai lệch kết quả, cung cấp cơ sở cho việc cải thiện mô hình.
Chương 9 tập trung vào Các Mô hình cho Tỷ lệ: GLMs Nhị thức (Binomial GLMs).
Các nội dung chính được đề cập bao gồm:
Loại dữ liệu được mô hình hóa: Chương này xử lý dữ liệu dưới dạng số lượng thành công trên tổng số lần thử cố định. Đây là dữ liệu về tỷ lệ hoặc xác suất.
Mô hình chính: Mô hình được sử dụng là Mô hình Tuyến tính Tổng quát (GLM) với phân phối Nhị thức (Binomial distribution).
Cách chỉ định biến phản hồi: Biến phản hồi cho GLM Nhị thức có thể được chỉ định dưới dạng tỷ lệ (Fissures/Turbines) hoặc dưới dạng ma trận hai cột cbind(thành công, thất bại) (cbind(Fissures, Turbines-Fissures)).
Các hàm liên kết (Link functions): Chương đề cập đến việc sử dụng các hàm liên kết khác nhau phù hợp cho dữ liệu tỷ lệ, bao gồm hàm liên kết cloglog và hàm liên kết logit (thường được sử dụng trong hồi quy logistic).
Thành phần hệ thống (Systematic component) và Offset: Các mô hình có thể bao gồm biến giải thích trong thành phần hệ thống và có thể sử dụng thuật ngữ offset trong trường hợp mô hình “single-hit”.
Suy luận và So sánh mô hình: Giống như các GLM khác, suy luận và so sánh mô hình được thực hiện. Các nguồn cho thấy việc sử dụng phân tích độ lệch (Analysis of Deviance) với kiểm định Chi-bình phương (test=“Chisq”) để so sánh các mô hình lồng nhau.
Chẩn đoán mô hình (Model Diagnostics): Chương này bao gồm việc kiểm tra sự phù hợp của mô hình thông qua các biểu đồ chẩn đoán, bao gồm việc vẽ biểu đồ phần dư quantile (quantile residuals) chống lại giá trị phù hợp (fitted values).
Các bộ dữ liệu và ví dụ: Các khái niệm được minh họa bằng nhiều bộ dữ liệu thực tế, chẳng hạn như dữ liệu về các vết nứt trên cánh quạt turbine, dữ liệu về sự nảy mầm của hạt giống, dữ liệu về tế bào gốc tuyến vú, dữ liệu về sự hiện diện của chim noisy miner, dữ liệu về tỷ lệ côn trùng bị tiêu diệt bởi thuốc trừ sâu, dữ liệu về tăng huyết áp và ngưng thở khi ngủ, và dữ liệu về bướm đêm bị tiêu diệt bởi thuốc trừ sâu.
Tóm lại, Chương 9 giới thiệu cách sử dụng GLM Nhị thức để mô hình hóa dữ liệu tỷ lệ, bao gồm cách cấu trúc mô hình, chọn hàm liên kết phù hợp, thực hiện suy luận và kiểm tra các giả định thông qua các kỹ thuật chẩn đoán.
Chương 10 tập trung vào Các Mô hình cho Dữ liệu Đếm (Counts): GLMs Poisson và Nhị thức Âm (Poisson and Negative Binomial GLMs).
Các điểm chính về Chương 10 được rút ra từ các nguồn bao gồm:
Loại dữ liệu được mô hình hóa: Chương này xử lý các biến phản hồi là số lượng đếm (counts), tức là các số nguyên không âm (ví dụ: số ca bệnh, số vệ tinh, số pock mark).
Các Mô hình GLM chính:
Mô hình hóa Tỷ lệ (Rates): Khi biến phản hồi là số lượng đếm trên một “kích thước phơi nhiễm” (exposure size) khác nhau cho mỗi quan sát, GLM Poisson có thể được sử dụng để mô hình hóa tỷ lệ. Kích thước phơi nhiễm thường được đưa vào mô hình dưới dạng một thuật ngữ offset (thường là log(exposure size)).
Mô hình Log-linear (Log-linear models): Chương này cũng đề cập đến việc sử dụng GLM Poisson để phân tích các bảng tần số (contingency tables), còn được gọi là mô hình log-linear. Ví dụ: phân tích bảng 2x2 về thái độ đối với thực phẩm biến đổi gen theo thu nhập. Trong các mô hình này, sự quan tâm thường tập trung vào các thuật ngữ tương tác hơn là tổng biên (marginal totals).
Suy luận (Inference):
Chẩn đoán Mô hình (Model Diagnostics):
Các Bộ Dữ liệu và Ví dụ được Sử dụng:
Tóm lại, Chương 10 mở rộng kiến thức về GLMs sang dữ liệu đếm, giới thiệu các mô hình Poisson và Nhị thức Âm, thảo luận về cách xử lý tỷ lệ và overdispersion, đồng thời áp dụng các kỹ thuật suy luận và chẩn đoán đã học từ các chương trước vào các loại dữ liệu này.
Chương 11 mở rộng ứng dụng của GLMs sang dữ liệu liên tục dương bằng cách giới thiệu các phân phối Gamma và Inverse Gaussian, nhấn mạnh vào mối quan hệ trung bình-phương sai đặc trưng của chúng, và áp dụng các kỹ thuật mô hình hóa, suy luận, và chẩn đoán phù hợp cho loại dữ liệu này.
Các điểm chính bao gồm:
Loại dữ liệu được mô hình hóa: Chương này tập trung vào các biến phản hồi là dữ liệu liên tục và dương, tức là các giá trị thực lớn hơn 0.
Các mô hình GLM chính:
Hàm liên kết (Link functions): Các hàm phổ biến bao gồm hàm
logarit (log μ) và hàm nghịch đảo (1/μ). Hàm logarit thường dùng với
phân phối Gamma. Dữ liệu lime minh họa việc sử dụng cả hai
loại hàm liên kết.
Mối quan hệ trung bình - phương sai: Với các phân phối này, phương sai thường tăng theo trung bình. Quan hệ này có thể được kiểm tra bằng biểu đồ log-log của phương sai nhóm so với trung bình nhóm.
Tham số phân tán (φ): Trong các mô hình Gamma và Inverse Gaussian, tham số phân tán được ước lượng từ dữ liệu. Điều này dẫn đến việc sử dụng kiểm định F thay vì kiểm định Chi-bình phương trong phân tích độ lệch.
Suy luận và so sánh mô hình:
Chẩn đoán mô hình:
Các bộ dữ liệu và ví dụ:
Chương này tập trung vào việc áp dụng các mô hình GLM sử dụng họ phân phối Tweedie cho dữ liệu liên tục dương, bao gồm cả trường hợp có số không chính xác.
Các điểm chính bao gồm:
glm() kết hợp với
family = tweedie() từ package statmod.var.power, ví dụ:
family = tweedie(var.power = 3).tweedie.profile().AICtweedie() trong package tweedie.Tóm lại, Chương 12 giới thiệu họ phân phối Tweedie như một công cụ linh hoạt để mô hình hóa dữ liệu liên tục dương, kể cả khi dữ liệu có số không, thông qua tham số ξ. Các phân phối quen thuộc như Normal, Poisson, Gamma và Inverse Gaussian là các trường hợp đặc biệt của họ Tweedie. Việc fitting và phân tích mô hình được trình bày cụ thể bằng nhiều ví dụ thực tế.
Chương 13 bao gồm một số bài tập thực hành, mở rộng việc áp dụng các Mô hình Tuyến tính Tổng quát (GLM) và các kỹ thuật phân tích đã học trong các chương trước cho các bộ dữ liệu khác nhau.
Chương này đóng vai trò cung cấp các bài tập thực hành bổ sung, cho phép người đọc áp dụng kiến thức về GLMs đã học vào các tình huống dữ liệu đa dạng, bao gồm các loại dữ liệu có số không và các vấn đề liên quan đến lựa chọn và chẩn đoán mô hình.
Bộ dữ liệu Supermarket Transactions bao gồm 14.059 dòng, mỗi dòng đại diện cho một giao dịch mua hàng tại siêu thị. Dữ liệu được cấu trúc với 16 cột thông tin, phản ánh các khía cạnh khác nhau của khách hàng và sản phẩm, bao gồm: ngày mua hàng (PurchaseDate), mã khách hàng (CustomerID), giới tính (Gender), tình trạng hôn nhân (MaritalStatus), tình trạng sở hữu nhà (Homeowner), số con (Children), thu nhập hàng năm (AnnualIncome), thành phố (City), bang hoặc tỉnh (StateorProvince), quốc gia (Country), nhóm sản phẩm (ProductFamily), bộ phận sản phẩm (ProductDepartment), danh mục sản phẩm (ProductCategory), số lượng bán ra (UnitsSold) và doanh thu (Revenue).
library(ggplot2)
library(scales)
library(dplyr)
library(ggrepel)
## 'data.frame': 14059 obs. of 16 variables:
## $ X : int 1 2 3 4 5 6 7 8 9 10 ...
## $ PurchaseDate : chr "12/18/2007" "12/20/2007" "12/21/2007" "12/21/2007" ...
## $ 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ần số
##
## F M
## 7170 6889
Tần suất
table(data$Gender)/sum(table(data$Gender))
##
## F M
## 0.5099936 0.4900064
Biểu đồ cột
library(ggplot2)
library(dplyr)
ggplot(data = data, aes(x = Gender)) +
geom_bar(fill = "skyblue", color = "black", width = 0.4) +
theme_minimal(base_size = 14)
ggplot(data =data, aes(x=Gender)) +
geom_bar(aes(y = (..count..)/sum(..count..)),fill = "skyblue", color = "black", width = 0.4) +
ylab('%') + xlab('Gender')+
theme_minimal(base_size = 14)
Biểu đồ tròn
gender_count <- data %>%
count(Gender) %>%
mutate(prop = n / sum(n),
label = paste0(Gender, " (", scales::percent(prop), ")"))
ggplot(gender_count, aes(x = "", y = prop, fill = Gender)) +
geom_col(width = 1, color = "white") +
coord_polar(theta = "y") +
geom_text(aes(label = label), position = position_stack(vjust = 0.5)) +
theme_minimal(base_size = 14)+
theme(
axis.title.x = element_blank(),
axis.title.y = element_blank(),
axis.text = element_blank(),
axis.ticks = element_blank()
)
Nhận xét: Phân bố giới tính trong tập dữ liệu khá đồng đều, với tỷ lệ nam giới chiếm 50.21% và nữ giới chiếm 49.79%. Sự cân bằng này cho thấy không có thiên lệch đáng kể trong cơ cấu khách hàng theo giới tính.
Tần số
##
## M S
## 6866 7193
Tần suất
table(data$MaritalStatus)/sum(table(data$MaritalStatus))
##
## M S
## 0.4883704 0.5116296
Biểu đồ cột
library(ggplot2)
ggplot(data = data, aes(x = MaritalStatus)) +
geom_bar(fill = "lightgreen", color = "black", width = 0.4) +
theme_minimal(base_size = 14)
ggplot(data =data, aes(x=MaritalStatus)) +
geom_bar(aes(y = (..count..)/sum(..count..)),fill = "lightgreen", color = "black", width = 0.4) +
ylab('%') + xlab('MaritalStatus')+
theme_minimal(base_size = 14)
Biểu đồ tròn
marital_count <- data %>%
count(MaritalStatus) %>%
mutate(prop = n / sum(n),
label = paste0(MaritalStatus, " (", scales::percent(prop), ")"))
ggplot(marital_count, aes(x = "", y = prop, fill = MaritalStatus)) +
geom_col(width = 1, color = "white") +
coord_polar(theta = "y") +
geom_text(aes(label = label), position = position_stack(vjust = 0.5)) +
theme_minimal(base_size = 14)+
theme(
axis.title.x = element_blank(),
axis.title.y = element_blank(),
axis.text = element_blank(),
axis.ticks = element_blank()
)
Nhận xét: Khách hàng độc thân chiếm tỷ lệ nhỉnh hơn một chút (51.16%) so với nhóm đã kết hôn (48.84%). Mặc dù sự chênh lệch không lớn, nhưng nó có thể phản ánh những khác biệt trong nhu cầu và động cơ tiêu dùng.
Tần số
##
## N Y
## 5615 8444
Tần suất
table(data$Homeowner)/sum(table(data$Homeowner))
##
## N Y
## 0.3993883 0.6006117
Biểu đồ cột
library(ggplot2)
ggplot(data = data, aes(x = Homeowner)) +
geom_bar(fill = "lightblue", color = "black", width = 0.4) +
theme_minimal(base_size = 14)
ggplot(data =data, aes(x=Homeowner)) +
geom_bar(aes(y = (..count..)/sum(..count..)),fill = "lightgreen", color = "black", width = 0.4) +
ylab('%') + xlab('Homeowner')+
theme_minimal(base_size = 14)
homeowner_count <- data %>%
count(Homeowner) %>%
mutate(prop = n / sum(n),
label = paste0(Homeowner, " (", scales::percent(prop), ")"))
ggplot(homeowner_count, aes(x = "", y = prop, fill = Homeowner)) +
geom_col(width = 1, color = "white") +
coord_polar(theta = "y") +
geom_text(aes(label = label), position = position_stack(vjust = 0.5)) +
theme_minimal(base_size = 14)+
theme(
axis.title.x = element_blank(),
axis.title.y = element_blank(),
axis.text = element_blank(),
axis.ticks = element_blank()
)
Nhận xét: Phần lớn khách hàng (60%) là chủ sở hữu nhà, chỉ có khoảng 40% không sở hữu nhà. Điều này phản ánh rằng đa số người tiêu dùng trong tập dữ liệu có mức độ ổn định tài chính tương đối cao.
data$Children <- as.numeric(data$Children)
summary(data$Children)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.00 1.00 3.00 2.53 4.00 5.00
Nhận xét: Biến Children có giá trị dao động từ 0 đến 5 con, với trung bình (mean) là 2.53, trung vị (median) là 3.00, và giá trị phổ biến (1st và 3rd quartile) nằm trong khoảng 1 đến 4 con. Điều này cho thấy phần lớn khách hàng thuộc nhóm hộ gia đình có con nhỏ, cụ thể là có từ 1 đến 4 người con, chiếm phần giữa của phân phối.
Tần số
table(data$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ần suất
table(data$AnnualIncome) / sum(table(data$AnnualIncome))
##
## $10K - $30K $110K - $130K $130K - $150K $150K + $30K - $50K
## 0.21978804 0.04573583 0.05405790 0.01941817 0.32726367
## $50K - $70K $70K - $90K $90K - $110K
## 0.16857529 0.12155914 0.04360196
Biểu đồ cột
ggplot(data = data, aes(x = AnnualIncome)) +
geom_bar(fill = "yellow", color = "black", width = 0.4) +
theme_minimal(base_size = 10)
ggplot(data = data, aes(x = AnnualIncome)) +
geom_bar(aes(y = (..count..) / sum(..count..)),
fill = "yellow", color = "black", width = 0.4) +
ylab('%') + xlab('AnnualIncome') +
theme_minimal(base_size = 10)
Nhận xét: nhóm khách hàng có thu nhập $30K – $50K chiếm tỷ trọng lớn nhất, đạt khoảng 32.73%, nhóm tiếp theo là $10K – $30K (21.98%) và $50K – $70K (16.86%). Trong khi đó, các nhóm thu nhập cao như $110K – $130K, $130K – $150K và $150K+ chỉ chiếm lần lượt 4.57%, 5.41% và 1.94%, cho thấy đối tượng khách hàng giàu có chiếm tỷ lệ nhỏ trong tập dữ liệu. Nhóm $90K – $110K cũng chỉ chiếm 4.36%, thấp hơn đáng kể so với các nhóm thu nhập thấp hơn.
Tần số
table(data$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ần suất
table(data$City) / sum(table(data$City))
##
## Acapulco Bellingham Beverly Hills Bremerton Camacho
## 0.027242336 0.010171420 0.057685468 0.059321431 0.032150224
## Guadalajara Hidalgo Los Angeles Merida Mexico City
## 0.005334661 0.060103848 0.065865282 0.046518245 0.013798990
## Orizaba Portland Salem San Andres San Diego
## 0.033003770 0.062308841 0.098584537 0.044170994 0.061597553
## San Francisco Seattle Spokane Tacoma Vancouver
## 0.009246746 0.065580767 0.062237712 0.089408920 0.045024539
## Victoria Walla Walla Yakima
## 0.012518671 0.011380610 0.026744434
Nhận xét: các giá trị này dao động từ mức thấp nhất khoảng 0.0053 (Camacho) đến mức cao nhất gần 0.0986 (Salem), cho thấy sự khác biệt khá lớn về mức độ xuất hiện của từng khu vực. Một số thành phố lớn như Los Angeles, Seattle, San Diego và Portland có tỉ lệ khá cao, đều trên 6%, phản ánh sự tập trung dữ liệu chủ yếu vào những vùng đô thị lớn. Điều này có thể minh chứng cho vai trò quan trọng hoặc sự phổ biến cao của các địa phương này trong tổng thể dữ liệu. Ngược lại, một số địa phương như Guadalajara, San Francisco, và Victoria có tỉ lệ thấp hơn nhiều, chỉ khoảng dưới 1.5%, cho thấy sự phân bố dữ liệu tại các vùng này tương đối hạn chế hoặc ít được đại diện trong mẫu.các giá trị này dao động từ mức thấp nhất khoảng 0.0053 (Camacho) đến mức cao nhất gần 0.0986 (Salem), cho thấy sự khác biệt khá lớn về mức độ xuất hiện của từng khu vực. Một số thành phố lớn như Los Angeles, Seattle, San Diego và Portland có tỉ lệ khá cao, đều trên 6%, phản ánh sự tập trung dữ liệu chủ yếu vào những vùng đô thị lớn. Điều này có thể minh chứng cho vai trò quan trọng hoặc sự phổ biến cao của các địa phương này trong tổng thể dữ liệu.
Ngược lại, một số địa phương như Guadalajara, San Francisco, và Victoria có tỉ lệ thấp hơn nhiều, chỉ khoảng dưới 1.5%, cho thấy sự phân bố dữ liệu tại các vùng này tương đối hạn chế hoặc ít được đại diện trong mẫu.
Tần số
table(data$StateorProvince)
##
## BC CA DF Guerrero Jalisco OR Veracruz WA
## 809 2733 815 383 75 2262 464 4567
## Yucatan Zacatecas
## 654 1297
Tần suất
table(data$StateorProvince) / sum(table(data$StateorProvince))
##
## BC CA DF Guerrero Jalisco OR
## 0.057543211 0.194395049 0.057969984 0.027242336 0.005334661 0.160893378
## Veracruz WA Yucatan Zacatecas
## 0.033003770 0.324845295 0.046518245 0.092254072
Biểu đồ cột
ggplot(data = data, aes(x = StateorProvince)) +
geom_bar(fill = "lightgray", color = "black", width = 0.4) +
theme_minimal(base_size = 14)
ggplot(data = data, aes(x = StateorProvince)) +
geom_bar(aes(y = (..count..) / sum(..count..)),
fill = "lightgray", color = "black", width = 0.4) +
ylab('%') + xlab('StateorProvince') +
theme_minimal(base_size = 14)
Biểu đồ tròn
library(ggrepel)
state_count <- data %>%
count(StateorProvince) %>%
mutate(prop = n / sum(n),
label = paste0(percent(prop)))
ggplot(state_count, aes(x = "", y = prop, fill = StateorProvince)) +
geom_col(width = 1, color = "white") +
coord_polar(theta = "y") +
geom_text_repel(
aes(label = label),
position = position_stack(vjust = 0.5),
size = 2.3,
show.legend = FALSE,
box.padding = 0.2
) +
scale_fill_brewer(palette = "Pastel1") +
theme_minimal(base_size = 14) +
theme(legend.position = "right") +
theme(
axis.title.x = element_blank(),
axis.title.y = element_blank(),
axis.text = element_blank(),
axis.ticks = element_blank()
)
Tần số
table(data$ProductFamily)
##
## Drink Food Non-Consumable
## 1250 10153 2656
Tần suất
table(data$ProductFamily) / sum(table(data$ProductFamily))
##
## Drink Food Non-Consumable
## 0.08891102 0.72217085 0.18891813
Biểu đồ cột
ggplot(data = data, aes(x = ProductFamily)) +
geom_bar(fill = "lightyellow", color = "black", width = 0.4) +
theme_minimal(base_size = 14)
ggplot(data = data, aes(x = ProductFamily)) +
geom_bar(aes(y = (..count..) / sum(..count..)),
fill = "lightyellow", color = "black", width = 0.4) +
ylab('%') + xlab('ProductFamilly') +
theme_minimal(base_size = 14)
Biểu đồ tròn
data$ProductFamily <- factor(data$ProductFamily)
product_count <- data %>%
count(ProductFamily) %>%
mutate(prop = n / sum(n),
label = paste0(scales::percent(prop)))
ggplot(product_count, aes(x = "", y = prop, fill = ProductFamily)) +
geom_col(width = 1, color = "white") +
coord_polar(theta = "y") +
geom_text(aes(label = label), position = position_stack(vjust = 0.5), size = 4) +
scale_fill_brewer(palette = "Pastel1") +
theme_minimal(base_size = 14) +
theme(legend.position = "right") +
theme(
axis.title.x = element_blank(),
axis.title.y = element_blank(),
axis.text = element_blank(),
axis.ticks = element_blank()
)
Nhận xét: phần lớn sản phẩm được tiêu thụ thuộc nhóm Food (thực phẩm), chiếm tới 72% tổng số giao dịch. Nhóm này bao gồm các mặt hàng thiết yếu hàng ngày như rau củ, thịt, sữa và thực phẩm đóng gói – phản ánh rõ xu hướng tiêu dùng tập trung vào nhu cầu cơ bản. Nhóm Non-Consumable (hàng không tiêu dùng) chiếm 19%, cho thấy vẫn có một phần đáng kể khách hàng quan tâm đến các sản phẩm như đồ dùng gia đình, vệ sinh cá nhân, v.v. Trong khi đó, Drink (đồ uống) chỉ chiếm 9%, là tỷ lệ thấp nhất trong ba nhóm.
Tần số
table(data$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ần suất
table(data$ProductDepartment) / sum(table(data$ProductDepartment))
##
## Alcoholic Beverages Baked Goods Baking Goods Beverages
## 0.025321858 0.030229746 0.076250089 0.048367594
## Breakfast Foods Canned Foods Canned Products Carousel
## 0.013372217 0.069492852 0.007753041 0.004196600
## Checkout Dairy Deli Eggs
## 0.005832563 0.064229319 0.049719041 0.014083505
## Frozen Foods Health and Hygiene Household Meat
## 0.098300021 0.063518031 0.101002916 0.006330464
## Periodicals Produce Seafood Snack Foods
## 0.014368020 0.141830856 0.007255139 0.113806103
## Snacks Starchy Foods
## 0.025037343 0.019702682
Tần số
table(data$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ần suất
table(data$ProductCategory) / sum(table(data$ProductCategory))
##
## Baking Goods Bathroom Products Beer and Wine
## 0.034426346 0.025962017 0.025321858
## Bread Breakfast Foods Candles
## 0.030229746 0.029660716 0.003200797
## Candy Canned Anchovies Canned Clams
## 0.025037343 0.003129668 0.003769827
## Canned Oysters Canned Sardines Canned Shrimp
## 0.002489508 0.002845153 0.002702895
## Canned Soup Canned Tuna Carbonated Beverages
## 0.028736041 0.006188207 0.010953837
## Cleaning Supplies Cold Remedies Dairy
## 0.013443346 0.006614980 0.064229319
## Decongestants Drinks Eggs
## 0.006045949 0.009602390 0.014083505
## Electrical Frozen Desserts Frozen Entrees
## 0.025250729 0.022974607 0.008393200
## Fruit Hardware Hot Beverages
## 0.054413543 0.009175617 0.016075112
## Hygiene Jams and Jellies Kitchen Products
## 0.014012376 0.041823743 0.015434953
## Magazines Meat Miscellaneous
## 0.014368020 0.054129028 0.002987410
## Packaged Vegetables Pain Relievers Paper Products
## 0.003414183 0.013656732 0.024539441
## Pizza Plastic Products Pure Juice Beverages
## 0.013798990 0.010029163 0.011736254
## Seafood Side Dishes Snack Foods
## 0.007255139 0.010882709 0.113806103
## Specialty Starchy Foods Vegetables
## 0.020556227 0.019702682 0.122910591
Nhận xét: nhóm Vegetables (rau củ) chiếm tỷ lệ cao nhất với 12.29%, theo sau là Snack Foods (đồ ăn vặt) với 11.38%, và Dairy (sản phẩm từ sữa) ở mức 6.42%. Đây đều là các mặt hàng thiết yếu và có tần suất tiêu dùng cao, thường xuất hiện trong giỏ hàng mua sắm hàng ngày. Một số nhóm khác cũng có tỷ trọng đáng chú ý như Fruit (trái cây) chiếm 5.44%, Meat (thịt) chiếm 5.41%, và Jams and Jellies (mứt) chiếm 4.18%, cho thấy khách hàng có xu hướng tiêu dùng thực phẩm tươi sống hoặc chế biến sẵn nhiều hơn các mặt hàng khác. Trong khi đó, các sản phẩm như Canned Seafood (cá/hải sản đóng hộp), Candles, Miscellaneous, hay các sản phẩm rất đặc thù như Canned Oysters hoặc Canned Sardines đều có tỷ lệ dưới 1%, phản ánh rằng chúng chỉ phục vụ cho một số nhóm khách hàng nhỏ hoặc nhu cầu không thường xuyên.
data$UnitsSold <- as.numeric(data$UnitsSold)
summary(data$UnitsSold)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1.000 3.000 4.000 4.081 5.000 8.000
Nhận xét: Biến UnitsSold có giá trị dao động từ 1 đến 8, với giá trị trung bình (mean) là 4.081 và trung vị (median) là 4.000. Phân vị thứ nhất (Q1) là 3.000 và phân vị thứ ba (Q3) là 5.000, cho thấy phần lớn giao dịch tập trung trong khoảng 3 đến 5 sản phẩm mỗi lần mua. Điều này phản ánh một xu hướng tiêu dùng đều đặn, không quá nhỏ lẻ cũng không quá tích trữ.
summary(data$Revenue)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.53 6.84 11.25 13.00 17.37 56.70
Nhận xét: Doanh thu giá trị dao động từ 0.53 đến 56.70, với trung bình (mean) là 13.00 và trung vị (median) là 11.25. Khoảng 50% giá trị doanh thu nằm trong khoảng từ 6.84 (1st Quartile) đến 17.37 (3rd Quartile), phản ánh một mức doanh thu điển hình cho phần lớn giao dịch là khá hợp lý – vừa đủ để gợi ý rằng mỗi đơn hàng có giá trị ở mức tiêu dùng cá nhân hoặc hộ gia đình. Giá trị trung bình lớn hơn trung vị (13.00 > 11.25) cho thấy phân phối doanh thu có phần lệch phải – tức là tồn tại một số đơn hàng có doanh thu rất cao, kéo trung bình lên. Đây có thể là những đơn hàng lớn bất thường hoặc liên quan đến sản phẩm đắt tiền. Tuy nhiên, phần lớn khách hàng vẫn chi tiêu ở mức thấp đến trung bình, tập trung quanh mức 11–13 đơn vị tiền tệ.