Yêu cầu của nhiệm vụ 1: Tóm tắt cuốn sách Generalized Linear Models With Examples in R và thực hiện thống kê mô tả cho các biến trong file Supermarket Transactions.csv.
Mô hình tuyến tính tổng quát là nội dung được tập trung chủ yếu của cuốn sách này, đồng thời nó cũng là một mô hình cụ thể của mô hình thống kê. Do đó, chúng ta sẽ bắt đầu từ những kiến thức nền tảng trước là khái niệm về mô hình thống kê. Điều này sẽ cho phép chúng ta có cái nhìn tổng thể về các ngôn ngữ, ký hiệu cần thiết cùng các vấn đề quan trọng khác trước khi đi vào tiểu tiết.
Trước tiên, chúng ta sẽ đi vào các quy ước giải thích cách biểu diễn dữ liệu bằng ngôn ngữ toán học. Trong ngữ cảnh này:
\(y\): Biến phản hồi (response variable)
\(n\): Số lượng quan sát
x₁, x₂, …, xₚ: Các biến giải thích (explanatory variables)
Các biến giải thích được chia thành hai loại:
Biến định lượng (quantitative) gọi là covariates
Biến định tính (qualitative) gọi là factors
Nhằm hiểu sơ bộ dữ liệu, ta có thể sử dụng lệnh plot() (phần 1.3) với nhiều loại biểu đồ khác nhau. Lưu ý rằng dấu “==” được sử dụng để thể hiện sự so sánh logic.
Điều đặc biệt là, trong quá trình thực hành, khi muốn sử dụng các dữ liệu định tính, chúng cần được mã hóa thành số bằng cách sử dụng biến giả (dummy variables) trong phần 1.4. Phương pháp mã hóa thường dùng là treatment coding, trong đó một yếu tố có \(k\) mức sẽ cần \(k − 1\) biến giả. Đây cũng là cách mặc định trong phần mềm R.
Tuy nhiên, để hiểu rõ hơn về dữ liệu thì ta cần đến mô hình thống kê. Một mô hình thống kê bao gồm hai thành phần chính (phần 1.5):
Thành phần hệ thống (systematic component): Mô hình hóa cách giá trị trung bình của biến phản hồi thay đổi theo các biến giải thích.
Thành phần ngẫu nhiên (random component): Mô tả sự biến động xung quanh giá trị trung bình.
Theo cách này, mô hình thống kê thể hiện được cả yếu tố có hệ thống và yếu tố ngẫu nhiên của dữ liệu (phần 1.8), và có thể được sử dụng để dự đoán hoặc hiểu mối quan hệ giữa các biến (phần 1.9). Một mô hình phù hợp cần đảm bảo hai tiêu chí: đơn giản và chính xác. Mô hình đơn giản nhất có thể mô tả chính xác cả phần hệ thống và phần ngẫu nhiên là mô hình được ưu tiên (phần 1.10).
Chương cũng giới thiệu mô hình hồi quy tuyến tính theo tham số, với công thức hệ thống thường là:
Nếu bao gồm hằng số \(β₀\), thì số tham số trong mô hình là \(p + 1\), ngược lại là \(p\).
Mô hình thống kê cần có khả năng được diễn giải một cách hợp lý (phần 1.7). Tuy nhiên, các mô hình sau khi ước lượng cần được hiểu và phân tích trong giới hạn của dữ liệu và mô hình (phần 1.11). Ví dụ: trong nghiên cứu quan sát, dữ liệu chỉ được ghi nhận lại mà không có sự can thiệp, do đó không thể rút ra kết luận nhân quả. Trong khi đó, nghiên cứu thực nghiệm cho phép người nghiên cứu kiểm soát một số biến giải thích nhất định, nên có thể đưa ra kết luận nhân quả (phần 1.11). Nói chung, các kết luận rút ra từ việc phân tích mô hình thống kê chỉ áp dụng được cho quần thể mà mẫu đại diện (phần 1.12).
Chương 2 của sách tập trung vào việc giới thiệu và xây dựng các mô hình hồi quy tuyến tính, đặt nền tảng cho việc mô tả mối quan hệ tuyến tính giữa biến phản hồi và các biến giải thích.
Chương bắt đầu bằng việc định nghĩa Mô hình Hồi quy Tuyến tính, trong đó biến phản hồi được giả định có mối quan hệ tuyến tính với một hoặc nhiều biến giải thích. Mô hình có thể là Hồi quy Tuyến tính Đơn giản (một biến giải thích) hoặc Hồi quy Đa biến (nhiều biến giải thích). Mục tiêu là ước lượng cách giá trị trung bình của biến phản hồi thay đổi khi các biến giải thích thay đổi. Dữ liệu ví dụ về dung tích phổi (Lungcap) được sử dụng xuyên suốt để minh họa các khái niệm, với các biến như FEV (biến phản hồi), Tuổi, Chiều cao, Giới tính và Tình trạng hút thuốc (biến giải thích).
Phương pháp tiêu chuẩn để ước lượng các hệ số hồi quy (tham số của mô hình) là phương pháp Bình phương nhỏ nhất (Least Squares Estimation). Phương pháp này tìm kiếm các giá trị hệ số làm giảm thiểu tổng bình phương sai số giữa dữ liệu quan sát và giá trị dự đoán của mô hình.
Để biểu diễn và tính toán một cách hiệu quả, mô hình hồi quy tuyến tính thường được viết dưới dạng ma trận. Công thức ước lượng cho vector hệ số \(β̂\) là: \(β̂ = (XT WX)−1XT Wy\).
Trong đó, \(X\) là ma trận thiết kế chứa các giá trị biến giải thích, \(y\) là vector biến phản hồi, và \(W\) là ma trận trọng số (thường là ma trận đơn vị trong hồi quy bình phương nhỏ nhất thông thường). Ước lượng này là không chệch (unbiased).
Chương cũng hướng dẫn cách ước lượng phương sai của sai số \((σ²)\) và tính toán sai số chuẩn (Standard Errors) cho các hệ số ước lượng. Ma trận hiệp phương sai của \(β̂\) được cho bởi \(var[β̂] = (XT WX)−1σ²\). Sai số chuẩn này quan trọng cho việc kiểm định giả thuyết về các hệ số.
Chương này cũng giới thiệu Phân tích Phương sai (Analysis of Variance - ANOVA) như một công cụ để đánh giá mức độ phù hợp của mô hình hồi quy. Bảng ANOVA phân tách tổng biến thiên của biến phản hồi thành phần được giải thích bởi mô hình (Systematic component) và phần còn lại do sai số ngẫu nhiên (Random component).
Thống kê F được tính toán để kiểm định giả thuyết tổng thể về sự ý nghĩa của mô hình (kiểm tra xem ít nhất một biến giải thích có ảnh hưởng đáng kể không). Thống kê F có mối liên hệ với hệ số xác định \(R²\) (tỷ lệ phần trăm biến thiên được mô hình giải thích) qua công thức:
\(F = [R²/(p′ − 1)] / [(1 − R²)/(n − p′)]\)
Trong đó, \(p′\) là số lượng tham số và n là số quan sát. Chương cũng thảo luận việc so sánh các mô hình lồng nhau (nested models) bằng F-test. Lưu ý rằng thứ tự các biến được thêm vào mô hình có thể ảnh hưởng đến kết quả kiểm định ý nghĩa của chúng trong bảng ANOVA tuần tự.
Chương minh họa cách sử dụng phần mềm R để thực hiện các phân tích hồi quy tuyến tính. Các câu lệnh R cốt lõi bao gồm:
lm(): Hàm để ước lượng mô hình hồi quy tuyến tính. Ví dụ: LC.B <- lm(log(FEV) ~ Age + Ht + Gender + Smoke, data=lungcap)
summary(): Hiển thị tóm tắt kết quả mô hình, bao gồm các hệ số ước lượng, sai số chuẩn, thống kê t, p-value, \(R²\), và thống kê F.
coef(summary()) : Trích xuất bảng hệ số chi tiết từ kết quả summary().
anova(): Tạo bảng phân tích phương sai để đánh giá sự đóng góp của các biến hoặc so sánh mô hình. Ví dụ: anova(LC.B, test=“F”)
drop1(): Kiểm tra xem việc bỏ bớt từng biến giải thích ảnh hưởng thế nào đến mô hình (dựa trên AIC hoặc F-test). Ví dụ: drop1( LC.B, test=“F”)
add1(): Kiểm tra xem việc thêm từng biến giải thích vào mô hình hiện tại ảnh hưởng thế nào. Ví dụ: add1( lm( log(FEV) ~ Smoke, data=lungcap), LC.full, test=“F” )
plot(): Tạo các biểu đồ dữ liệu gốc và biểu đồ chẩn đoán để kiểm tra giả định mô hình (ví dụ: biểu đồ phần dư)
Mục tiêu chính của việc này là kiểm tra xem mô hình hồi quy tuyến tính có đáp ứng các giả định cơ bản của phương pháp bình phương nhỏ nhất hay không, đặc biệt là giả định về tính tuyến tính, phương sai sai số không đổi (homoscedasticity), và sự phân phối của sai số.
Công cụ chính để kiểm tra là phần dư (residuals). Việc phân tích phần dư chuẩn hóa (standardized residuals) hoặc phần dư deviance được thực hiện thông qua các biểu đồ. Các biểu đồ phần dư chuẩn hóa so với giá trị phù hợp (fitted values) rất hữu ích để phát hiện các vấn đề như phương sai không đồng nhất.
Chương cũng giới thiệu cách nhận diện các quan sát có ảnh hưởng lớn đến kết quả ước lượng mô hình, sử dụng các chỉ số như Leverage (hay hat-value, \(hi\)) và Cook’s distance (\(Di\)). Leverage (\(hi\)) đo lường mức độ ảnh hưởng của giá trị biến giải thích của một điểm lên đường hồi quy. Công thức cho hồi quy tuyến tính đơn giản:
\(hi = 1/n + (xi - x̄)² / Σ(xj - x̄)²\).
Tổng của các giá trị leverage bằng \(p'\) (số lượng tham số).
Cook’s distance (\(Di\)) đo lường mức độ thay đổi của tất cả các ước lượng hệ số khi loại bỏ một quan sát cụ thể. Công thức: \(Di = (μ̂ − μ̂(i))ᵀ (μ̂ − μ̂(i)) / (p′s²)\).
Các biểu đồ leverage và Cook’s distance giúp xác định các điểm có ảnh hưởng tiềm tàng.
Khi các chẩn đoán chỉ ra vấn đề, cần phải cải thiện mô hình:
Biến đổi biến (Transformations): Áp dụng các phép biến đổi toán học (như logarit hoặc căn bậc hai) cho biến phản hồi hoặc một hoặc nhiều biến giải thích có thể giúp đáp ứng tốt hơn các giả định của mô hình tuyến tính.
Thêm các số hạng:
Bổ sung các biến giải thích khác vào mô hình.
Thêm các số hạng bậc cao để mô tả mối quan hệ phi tuyến tính.
Thêm số hạng tương tác (interaction terms) để kiểm tra xem ảnh hưởng của một biến giải thích có phụ thuộc vào giá trị của biến khác hay không.
Lựa chọn mô hình (Model Selection): Sử dụng các kiểm định thống kê để so sánh các mô hình khác nhau.
Kiểm định F trong bảng ANOVA là công cụ tiêu chuẩn để so sánh các mô hình lồng nhau (nested models), tức là mô hình phức tạp hơn chứa tất cả các biến của mô hình đơn giản hơn cộng thêm một hoặc nhiều biến. Hàm anova() trong R có thể thực hiện việc này.
Các hàm drop1() và add1() trong R giúp kiểm tra tác động của việc loại bỏ hoặc thêm từng biến vào mô hình.
Nguyên tắc Marginality (Marginality Principle): Đôi khi, ngay cả khi một số hạng chính không có ý nghĩa thống kê, nó vẫn nên được giữ lại nếu nó là một phần của số hạng tương tác có ý nghĩa trong mô hình
Việc diễn giải các hệ số hồi quy phải được thực hiện cẩn thận, đặc biệt là khi các biến đã được biến đổi. Ví dụ, trong mô hình với log(FEV), hệ số của một biến nhị phân như Smoke được diễn giải dưới dạng yếu tố nhân tác động lên FEV trung bình gốc.
Chương sử dụng các hàm R như lm() để ước lượng mô hình, summary() để xem kết quả, anova() để so sánh mô hình, plot(), rstandard(), fitted(), cooks.distance(), qqnorm(), qqline() để thực hiện các chẩn đoán.
Các ví dụ thực tế với dữ liệu như Lungcap và Gopher tortoise minh họa các kỹ thuật chẩn đoán và xây dựng mô hình.
Tóm lại, Chương 3 trang bị các kỹ năng cần thiết để đánh giá độ tin cậy của mô hình hồi quy tuyến tính và sử dụng các kỹ thuật biến đổi, thêm số hạng và lựa chọn mô hình để xây dựng mô hình phù hợp hơn với dữ liệu thực tế.
Chương 2 và 3 đã giới thiệu mô hình hồi quy tuyến tính. Mô hình này hoạt động hiệu quả khi biến phản hồi (response variable) có phương sai sai số không đổi (constant error variance) và thường được giả định tuân theo phân phối chuẩn (normal distribution). Tuy nhiên, trong thực tế, có nhiều loại dữ liệu mà các giả định này không đúng.
Chương 4 chỉ ra các tình huống cụ thể mà mô hình hồi quy tuyến tính gặp khó khăn, . Chúng bao gồm:
Kết quả nhị phân hoặc đếm nhị thức: Ví dụ, kết quả thành công/thất bại hoặc số lần xảy ra một sự kiện trong một số thử nghiệm cố định.
Dữ liệu đếm không giới hạn: Ví dụ, số sự kiện xảy ra trong một khoảng thời gian hoặc không gian nhất định, cần mô hình Poisson hoặc Negative Binomial.
Quan sát liên tục và dương: Dữ liệu chỉ nhận giá trị dương (ví dụ: thời gian, trọng lượng), thường không có phương sai không đổi và có thể cần phân phối Gamma hoặc Inverse Gaussian.
Đối với những loại dữ liệu này, phương pháp ước lượng bình phương nhỏ nhất (least-squares estimation) dùng trong hồi quy tuyến tính truyền thống không còn phù hợp.
Thay vì bình phương nhỏ nhất, ước lượng hợp lý tối đa (Maximum Likelihood Estimation - MLE) là phương pháp thích hợp để ước lượng tham số cho các mô hình vượt ra ngoài hồi quy tuyến tính chuẩn. Ý tưởng chính của MLE là tìm các giá trị tham số của mô hình sao cho khả năng (likelihood) quan sát được dữ liệu hiện có là lớn nhất.
Các Khái niệm Chính của ML:
Chương này đi sâu vào phương pháp ML, giới thiệu các khái niệm quan trọng:
Hàm hợp lý (Likelihood Function): Đo lường “khả năng” xảy ra dữ liệu quan sát được dựa trên các giá trị tham số khác nhau.
Phương trình Score (Score Equations): Đạo hàm của hàm log-hợp lý theo các tham số. Việc giải các phương trình này giúp tìm ra ước lượng MLE. Ví dụ về dạng phương trình score có thể thấy trong Problem 4.7 cho phân phối mũ.
Thông tin (Information): Liên quan đến độ cong của hàm log-hợp lý, được sử dụng để tính toán sai số chuẩn (standard errors) của các ước lượng MLE. Có hai loại: Thông tin Quan sát (Observed Information) và Thông tin Kỳ vọng (Expected Information).
Fisher Scoring: Một thuật toán lặp phổ biến để tính toán ước lượng MLE.
Suy diễn Thống kê và Lựa chọn Mô hình:
ML cung cấp cơ sở để thực hiện suy diễn thống kê, bao gồm:
Kiểm định giả thuyết (Hypothesis Testing): Dựa trên các kết quả tiệm cận mẫu lớn (large sample asymptotic results). Các phương pháp kiểm định phổ biến bao gồm Kiểm định Wald (Wald Tests), Kiểm định Tỷ số Hợp lý (Likelihood Ratio Tests), và Kiểm định Score (Score Tests). Chương này cũng so sánh sự khác biệt giữa các kiểm định này.
Khoảng tin cậy (Confidence Intervals): Dựa trên các ước lượng MLE và sai số chuẩn của chúng.
So sánh các mô hình không lồng nhau (non-nested models): Sử dụng các tiêu chí như AIC và BIC.
Chương 4 cũng đề cập đến việc sử dụng phần mềm R để thực hiện ước lượng ML cho các mô hình này, bao gồm cả code ví dụ để phân tích dữ liệu Quilpie rainfall.
Như đã thảo luận trong Chương 4, giả định về phương sai không đổi này thường không đúng trong nhiều loại dữ liệu thực tế. Mô hình tuyến tính tổng quát (Generalized Linear Models - GLMs) được đưa ra để giải quyết hạn chế này.
Mô hình GLM, giống như các mô hình hồi quy khác, bao gồm hai thành phần chính được lựa chọn một cách riêng biệt:
Thay vì chỉ giới hạn ở phân phối chuẩn (Normal distribution) như trong hồi quy tuyến tính chuẩn, GLM cho phép biến phản hồi tuân theo một phân phối thuộc họ Mô hình Phân tán Hàm mũ (Exponential Dispersion Models - EDMs). Một đặc điểm quan trọng của EDM là mối quan hệ giữa giá trị trung bình (\(μ\)) và phương sai (\(var[y]\)) thông qua một hàm gọi là hàm phương sai (variance function) \(V(μ)\). Công thức chi tiết \(var[y] = φV(μ)\) mô tả cách phương sai thay đổi theo giá trị trung bình, khác với giả định phương sai không đổi của hồi quy tuyến tính chuẩn (ở đó \(V(μ) = 1\) và \(φ = σ²\)).
Kết hợp hai thành phần, GLM được định nghĩa là các mô hình hồi quy tuyến tính theo tham số sử dụng một hàm liên kết để kết nối bộ dự báo tuyến tính với giá trị trung bình của một biến phản hồi có phân phối thuộc họ EDM.
Chương này cũng giới thiệu khái niệm Deviance, một thước đo sự phù hợp của mô hình trong khuôn khổ GLM. Unit Deviance \(d(y, μ)\) là một thành phần quan trọng trong công thức của các phân phối EDM, và tổng Deviance (Total Deviance) được sử dụng để đánh giá mức độ sai lệch giữa dữ liệu quan sát và mô hình dự đoán.
Chương 5 cũng so sánh việc sử dụng GLM với phương pháp truyền thống hơn là biến đổi (transforming) biến phản hồi để phù hợp với giả định của hồi quy tuyến tính chuẩn. GLM thường được ưa chuộng hơn vì nó mô hình hóa trực tiếp giá trị trung bình trên thang đo gốc thông qua hàm liên kết, thay vì mô hình hóa trung bình của biến đã biến đổi.
Giả định Chính của GLM: Nhấn mạnh là biến phản hồi (\(y\)) đến từ một phân phối thuộc họ EDM đã được chỉ định.
Việc chính khi ước lượng GLM là tìm ra các giá trị tốt nhất cho các tham số mô hình (ký hiệu là \(β\)). Các tham số này xác định mối quan hệ giữa các biến dự báo (explanatory variables) và trung bình của biến phản hồi (response variable) thông qua hàm liên kết (link function).
Phương pháp tiêu chuẩn để tìm \(β\) là Ước lượng Hợp lý Tối đa (MLE). Ý tưởng là chọn bộ \(β\) sao cho dữ liệu mà chúng ta quan sát được có khả năng xảy ra cao nhất theo mô hình đã chọn.
Không giống như hồi quy tuyến tính thông thường, việc tìm \(β\) trong GLM thường dẫn đến các phương trình (gọi là Phương trình Điểm số - Score Equations) mà lại là phi tuyến tính đối với \(β\). Điều này có nghĩa là chúng ta không thể giải chúng bằng một công thức đơn giản.
Vì vậy, việc ước lượng \(β\) trong GLM đòi hỏi sử dụng các phương pháp số học lặp (iterative methods).
Một trong những thuật toán chính (ngầm định được mô tả) là quá trình mà ở mỗi bước lặp, việc ước lượng \(β\) lại “cục bộ giống như hồi quy tuyến tính”. Tại mỗi bước, một bộ trọng số (\(W\)) và một “working response” (\(y\)) tạm thời được tính toán, và ước lượng \(β\) được cập nhật bằng một công thức có dạng ma trận tương tự như bình phương tối thiểu có trọng số: \(β̂ = (Xᵀ WX)⁻¹Xᵀ Wy\)
Quá trình này lặp đi lặp lại cho đến khi ước lượng \(β\) hội tụ.
Ngoài \(β\), một số mô hình GLM (tùy thuộc vào phân phối) còn có thêm tham số phân tán (\(φ\)) cần được ước lượng. Có nhiều cách để ước lượng \(φ\), bao gồm các phương pháp dựa trên khả năng tối đa hoặc dựa trên Độ lệch Dư (Deviance) hay phần dư Pearson.
Độ lệch Dư (Residual Deviance) là một đại lượng quan trọng, tương tự như Tổng Bình phương Dư (RSS) trong hồi quy tuyến tính, dùng để đánh giá mức độ mô hình phù hợp với dữ liệu. Giá trị này được tính dựa trên tỷ lệ khả năng giữa mô hình fitted và mô hình bão hòa.
Chương 7 tập trung vào việc đưa ra kết luận thống kê (suy luận) về mô hình Tuyến tính Tổng quát (GLM) đã ước lượng được. Mục tiêu là kiểm tra các giả thuyết về các tham số của mô hình (\(β\)) và đánh giá mức độ phù hợp của mô hình với dữ liệu.
Các phương pháp suy luận tiêu chuẩn cho GLM đều dựa trên lý thuyết khả năng tối đa (likelihood theory). Ba loại kiểm định (test) chính được sử dụng là: Kiểm định Wald (Wald Tests), kiểm định Điểm số (Score Tests), Kiểm định Tỷ lệ Khả năng (Likelihood Ratio Tests - LRT).
Chương này sẽ so sánh ưu nhược điểm của ba loại kiểm định này.
Một phần quan trọng là kiểm tra xem thành phần có hệ thống (systematic component) của mô hình, tức là phần tuyến tính (linear predictor) được liên kết với trung bình của biến phản hồi qua hàm liên kết (link function), có mô tả đầy đủ các xu hướng trong dữ liệu hay không.
Các kết quả phân phối cho các kiểm định độ phù hợp này thường dựa trên các kết quả tiệm cận khi tham số phân tán \(φ\) nhỏ (small dispersion asymptotic results), khác với các kết quả tiệm cận mẫu lớn (large sample asymptotics) thường dùng cho các kiểm định khác.
Chương 7 cũng thảo luận cách so sánh các mô hình GLM khác nhau:
Mô hình Nested : Sử dụng các phương pháp như Phân tích Độ lệch Dư (Analysis of Deviance). Độ lệch Dư (Deviance) là một thước đo quan trọng, tương tự như Tổng Bình phương Dư trong hồi quy tuyến tính, dùng để đánh giá sự phù hợp của mô hình. Bảng phân tích độ lệch dư cho thấy sự đóng góp của từng biến vào việc giải thích sự thay đổi của dữ liệu. Thứ tự các biến được đưa vào mô hình có thể ảnh hưởng đến kết quả ý nghĩa thống kê trong bảng này.
Mô hình Non-nested Models: Sử dụng các tiêu chí thông tin như AIC (Akaike Information Criterion) và BIC (Bayesian Information Criterion).
Trong thực tế, các phép kiểm định và phân tích suy luận cho GLM được thực hiện dễ dàng bằng các phần mềm thống kê như R. Hàm glm() trong R được sử dụng để ước lượng mô hình, và các hàm khác như anova() có thể được dùng để thực hiện các kiểm định như F-test khi ước lượng tham số phân tán \(φ\).
Sau khi ước lượng mô hình Tuyến tính Tổng quát (GLM), điều quan trọng tiếp theo là kiểm tra xem mô hình đó có thực sự phù hợp với dữ liệu hay không và các giả định của mô hình có được đáp ứng không. Chương 8 chuyên sâu vào việc này, tương tự như phần chẩn đoán trong hồi quy tuyến tính thông thường. Mục tiêu chính là đảm bảo rằng các kết luận suy luận rút ra từ mô hình (như ý nghĩa thống kê của các tham số) là đáng tin cậy.
Một mô hình GLM tốt cần đáp ứng vài điều kiện cơ bản:
Dữ liệu phù hợp với các phân phối đã chọn: Dữ liệu phản hồi (\(y\)) phải trông giống như đến từ phân phối bạn đã chọn .
Mối liên hệ giữa trung bình và các biến giải thích là đúng: Cách bạn kết hợp các biến giải thích (\(x\)) để dự đoán giá trị trung bình của \(y\) thông qua hàm liên kết là chính xác.
Độ biến động của dữ liệu (phương sai) phù hợp: Hàm mô tả mối quan hệ giữa giá trị trung bình và phương sai của dữ liệu phản hồi phải chính xác.
Phần dư là sự khác biệt giữa giá trị quan sát được và giá trị mô hình dự đoán. Tuy nhiên, trong GLM, phần dư thông thường không đủ tốt do phương sai thường thay đổi và hàm liên kết không tuyến tính. Chúng ta cần các loại phần dư tốt hơn:
Trong R, bạn có thể dễ dàng thực hiện các kiểm tra này sau khi dùng glm() để fitted mô hình:
Tóm lại, chẩn đoán GLM giúp bạn kiểm tra các giả định quan trọng bằng cách xem xét phần dư và độ ảnh hưởng của các điểm dữ liệu, thường thông qua các biểu đồ. Điều này giúp bạn quyết định mô hình đã fitted có đáng tin cậy hay cần điều chỉnh.
Chương 9 của tài liệu này giới thiệu về mô hình GLM nhị thức (Binomial GLM), một công cụ mạnh mẽ để mô hình hóa các tỷ lệ. Các tỷ lệ này thường đại diện cho số lượng sự kiện “thành công” hoặc “quan tâm” xảy ra trong một tổng số lần thử cố định và độc lập.
Mô hình Binomial GLM cũng tuân theo cấu trúc chung của GLM, gồm hai phần chính:
Phần Ngẫu nhiên: Dữ liệu tỷ lệ được mô tả bằng phân phối nhị thức (binomial distribution).
Nếu \(y\) là số lần “thành công” trong \(m\) lần thử, thì xác suất của \(y\) tuân theo công thức phân phối nhị thức, trong đó μ là tỷ lệ thành công kỳ vọng:\(P(y; μ, m) = (m trên my) * μ^(my) * (1 − μ)^(m(1−y))\).
Trong bối cảnh GLM, tổng số lần thử \(m\) thường được coi là trọng số cho quan sát đó. Tham số phân tán tiêu chuẩn (\(φ\)) cho phân phối nhị thức trong GLM là 1 (\(φ = 1\)).
Phần Hệ thống: Kết nối tỷ lệ thành công kỳ vọng (\(μi\)) với các biến giải thích (\(x1i, ..., xpi\)) thông qua một tổ hợp tuyến tính (bộ dự báo tuyến tính) và một hàm liên kết (link function).
Ba hàm liên kết phổ biến cho mô hình nhị thức GLM là:
Logit Link: Thường được sử dụng nhất, cho phép diễn giải tác động của biến giải thích dưới dạng tỷ số chênh (odds ratio).
Probit Link: Phát sinh từ cách tiếp cận dựa trên phân phối ngưỡng (tolerance distributions).
Complementary Log-Log Link: Được nhắc đến là hữu ích trong một số phân tích (ví dụ: thử nghiệm sinh học).
Mô hình này được sử dụng để phân tích các mối quan hệ khi biến phản hồi là một tỷ lệ, ví dụ như tỷ lệ cây nảy mầm hoặc tỷ lệ côn trùng bị tiêu diệt. Để chạy mô hình Binomial GLM trong phần mềm R, sử dụng hàm glm() và chỉ định family=binomial. Trọng số (tổng số lần thử \(m\)) được cung cấp qua đối số weights.
Việc kiểm tra các giả định của mô hình là quan trọng. Các biểu đồ chẩn đoán, chẳng hạn như biểu đồ Q-Q của phần dư quantile, giúp đánh giá sự phù hợp của mô hình với dữ liệu.
Tóm lại, Binomial GLM là mô hình tiêu chuẩn để phân tích dữ liệu tỷ lệ, dựa trên phân phối nhị thức và sử dụng hàm liên kết để kết nối tỷ lệ trung bình với các yếu tố giải thích. Phần mềm R cung cấp các công cụ trực tiếp để điều chỉnh và đánh giá các mô hình này.
Dữ liệu đếm là các giá trị số nguyên không âm (0, 1, 2, …) thể hiện số lần một sự kiện nào đó xảy ra. Đây là loại dữ liệu phổ biến trong nhiều lĩnh vực.
Mô hình Poisson GLM là mô hình thường dùng nhất cho dữ liệu đếm. Nó dựa trên phân phối Poisson để mô tả tính ngẫu nhiên của dữ liệu.
Thành phần Ngẫu nhiên (Phân phối Poisson):
Xác suất để quan sát được số đếm \(y\), với giá trị trung bình kỳ vọng μ (phải lớn hơn 0), được cho bởi công thức: \(P(y; μ) = exp(−μ)μy / y!\) cho \(y = 0, 1, 2, ...\).
Trong phân phối Poisson, giá trị trung bình (\(E[y]\)) bằng phương sai (\(Var[y] = μ\)). Đây là một giả định quan trọng.
Thành phần Hệ thống (Hàm Liên kết):
Mô hình này liên kết giá trị trung bình kỳ vọng (\(μi\)) với các biến giải thích thông qua một hàm liên kết.
Hàm liên kết phổ biến và thường là mặc định cho phân phối Poisson trong GLM là hàm logarit (log link).
Công thức hàm liên kết logarit: \(log(μi) = β0 + β1x1i + · · · + βpxpi\).
Khi mô hình hóa các tỷ lệ mà tử số là số đếm và mẫu số là một đại lượng tiếp xúc (exposure), chúng ta có thể sử dụng Poisson GLM với một hạng tử bù (offset).
Công thức mô hình tỷ lệ (\(μ/P\), với \(P\) là exposure): \(log(μi / Pi) = β0 + β1x1i + · · · + βpxpi\).
Công thức này tương đương với: \(log(μi) = β0 + β1x1i + · · · + βpxpi + log(Pi)\).
Hạng tử log(\(Pi\)) là offset. Nó là một biến giải thích đã biết, không có tham số (beta) cần ước lượng đi kèm.
Một ứng dụng quan trọng của Poisson GLM là phân tích bảng tần số (contingency tables). Các mô hình GLM Poisson trong trường hợp này được gọi là mô hình log-linear.
Mô hình log-linear thường sử dụng hàm liên kết logarit để mô hình hóa logarit của tần số kỳ vọng trong mỗi ô của bảng.
Các hạng tử chính (main effects) trong mô hình này có thể diễn giải liên quan đến tổng biên (marginal totals) của bảng. Quan tâm khoa học thường tập trung vào các hạng tử tương tác (interaction terms).
Giả định quan trọng của phân phối Poisson là trung bình bằng phương sai (\(E[y] = Var[y] = μ\)). Tuy nhiên, trong dữ liệu đếm thực tế, phương sai thường lớn hơn giá trị trung bình. Hiện tượng này gọi là overdispersion (phân tán dư thừa).
Overdispersion vi phạm giả định của mô hình Poisson thuần túy và có thể dẫn đến ước lượng sai lệch về độ không chắc chắn (như khoảng tin cậy quá hẹp, p-value quá nhỏ).
Để xử lý overdispersion, hai loại GLM phổ biến được sử dụng:
Negative Binomial GLMs: Dựa trên phân phối Negative Binomial, phân phối này có một tham số bổ sung cho phép phương sai lớn hơn giá trị trung bình.
Quasi-Poisson Models: Không dựa trên một phân phối xác suất cụ thể mà chỉ mô hình hóa mối quan hệ trung bình-phương sai, cho phép phương sai tỷ lệ với trung bình (\(Var[y] = φ * μ\), với \(φ > 1\) là tham số phân tán)
Poisson GLM: Sử dụng hàm glm() với family=poisson(). Để đưa offset vào mô hình, sử dụng cú pháp offset(log(Exposure)) trong công thức.
Quasi-Poisson GLM: Sử dụng hàm glm() với family=quasipoisson().
Negative Binomial GLM: Sử dụng hàm glm.nb() từ gói MASS. Để xem kết quả giống hàm glm(), có thể cần sử dụng glm.convert().
Sau khi điều chỉnh mô hình, việc kiểm tra các giả định là cần thiết. Các công cụ chẩn đoán bao gồm:
Kiểm tra phần dư (residuals), ví dụ phần dư quantile (qresid()).
Biểu đồ Q-Q (Q-Q plots) để kiểm tra sự phù hợp với phân phối giả định (hoặc tính chuẩn hóa của phần dư).
Khoảng cách Cook (cooks.distance()) để phát hiện các điểm ảnh hưởng.
Chương 11 giới thiệu cách sử dụng Mô hình Tuyến tính Tổng quát (GLM) để phân tích dữ liệu liên tục có giá trị dương (positive continuous data). Loại dữ liệu này khác với dữ liệu đếm (Chương 10) hay dữ liệu nhị phân (Chương 9) ở chỗ các giá trị có thể là bất kỳ số thực dương nào, không giới hạn ở các số nguyên không âm.
Khi mô hình hóa dữ liệu liên tục dương bằng GLM, chúng ta cần chọn một phân phối xác suất phù hợp cho thành phần ngẫu nhiên của mô hình. Các phân phối thuộc họ phân tán hàm mũ (Exponential Dispersion Models - EDMs) thường được sử dụng. Chương này tập trung vào hai phân phối phổ biến cho loại dữ liệu này: phân phối Gamma và phân phối Inverse Gaussian. Các phân phối này có đặc điểm là phương sai thay đổi theo giá trị trung bình. Cụ thể, hàm phương sai \(V(μ)\) mô tả mối quan hệ này.
Phân phối Gamma: Có hàm phương sai \(V(μ) = μ²\). Điều này có nghĩa là phương sai tỷ lệ với bình phương của giá trị trung bình. Một đặc điểm đi kèm là hệ số biến thiên (coefficient of variation) của phân phối Gamma là hằng số.
Phân phối Inverse Gaussian: Có hàm phương sai \(V(μ) = μ³\). Tức là phương sai tỷ lệ với lũy thừa bậc ba của giá trị trung bình. Phân phối này có thể phù hợp với các mô hình dựa trên chuyển động Brown (Brownian motion), ví dụ như mô hình sự di chuyển của các hạt qua vật liệu
Giống như các GLM khác, thành phần hệ thống liên kết giá trị trung bình kỳ vọng (\(μ\)) với các biến giải thích thông qua một hàm liên kết. Các mô hình này là tuyến tính theo tham số trên thang đo của hàm liên kết. Đối với cả mô hình Gamma GLM và Inverse Gaussian GLM, các hàm liên kết phổ biến và được cho phép trong R bao gồm: inverse, identity, log..
Tham số của mô hình (bao gồm cả tham số phân tán \(φ\)) được ước lượng, thường bằng phương pháp Hợp lý Cực đại (Maximum Likelihood Estimation - MLE). Tham số phân tán φ cần được ước lượng từ dữ liệu cho cả phân phối Gamma và Inverse Gaussian.
Gamma GLM: Sử dụng hàm glm() với family=Gamma().
Inverse Gaussian GLM: Sử dụng hàm glm() với family=inverse.gaussian().
Ngoài ra, việc kiểm tra xem mô hình có phù hợp với dữ liệu hay không là rất quan trọng. Các giả định chính của GLM bao gồm phân phối của biến phụ thuộc, mối quan hệ giữa trung bình và biến giải thích, và tính độc lập của các quan sát.
Chương 12 đi sâu vào một họ phân phối linh hoạt hơn thuộc Mô hình Phân Tán Hàm Mũ (EDMs) được gọi là phân phối Tweedie, và cách sử dụng chúng trong Mô hình Tuyến tính Tổng quát (GLM). Phân phối Tweedie đặc biệt hữu ích khi phân tích dữ liệu liên tục dương mà có mối quan hệ phương sai-trung bình phức tạp, và đặc biệt là dữ liệu có cả giá trị 0 chính xác và giá trị liên tục dương.
Điểm cốt lõi của phân phối Tweedie là mối quan hệ giữa phương sai và giá trị trung bình của dữ liệu. Đối với phân phối Tweedie, hàm phương sai có dạng: \(V(μ) = μ^ξ\) Trong đó \(μ\) là giá trị trung bình và \(ξ (xi)\) là một tham số chỉ số (index parameter). Tham số ξ này quyết định hình dạng cụ thể của phân phối và do đó, mối quan hệ phương sai-trung bình. Điều thú vị là nhiều phân phối thông dụng cho GLMs là các trường hợp đặc biệt của họ Tweedie, tùy thuộc vào giá trị của \(ξ\):
Khi \(ξ = 1\), phân phối Tweedie trở thành phân phối Poisson (với tham số phân tán \(φ = 1\)).
Khi \(ξ = 2\), phân phối Tweedie trở thành phân phối Gamma.
Khi \(ξ = 3\), phân phối Tweedie trở thành phân phối Inverse Gaussian.
Phân phối chuẩn (Normal distribution) cũng là một trường hợp đặc biệt (với \(ξ = 0\)), mặc dù nguồn không nhấn mạnh nhiều về trường hợp này trong ngữ cảnh dữ liệu dương.
Sự linh hoạt của phân phối Tweedie nằm ở chỗ nó cho phép mô hình hóa dữ liệu với mối quan hệ phương sai - trung bình \(μ^ξ\) với \(ξ\) có thể là bất kỳ số thực nào.
Một ứng dụng thực tế và quan trọng của phân phối Tweedie là khả năng mô hình hóa dữ liệu có cả giá trị 0 chính xác và các giá trị dương liên tục. Loại dữ liệu này xuất hiện phổ biến trong nhiều lĩnh vực, ví dụ như dữ liệu bảo hiểm (nhiều người không có yêu cầu bồi thường (giá trị 0), nhưng khi có yêu cầu thì giá trị là liên tục dương). Khi \(ξ\) nằm trong khoảng từ 1 đến 2, phân phối Tweedie có thể mô tả tốt loại dữ liệu hỗn hợp này.
Mô hình Tweedie GLM tuân thủ cấu trúc chung của GLM. Nó bao gồm:
Thành phần Ngẫu nhiên: Dữ liệu được giả định tuân theo phân phối Tweedie với một giá trị \(ξ\) và tham số phân tán \(φ\).
Thành phần Hệ thống: Mối quan hệ giữa biến phụ thuộc và biến giải thích được mô tả bằng một tổ hợp tuyến tính của các biến giải thích (linear predictor).
Hàm Liên kết (Link Function): Một hàm liên kết (\(g()\)) được sử dụng để liên kết giá trị trung bình kỳ vọng (\(μ\)) của biến phụ thuộc với tổ hợp tuyến tính của biến giải thích (\(η\)). Các hàm liên kết phổ biến như log, identity, và inverse thường được sử dụng.
Trong mô hình Tweedie GLM, cần ước lượng các tham số của mô hình, bao gồm các hệ số hồi quy trong thành phần hệ thống, tham số phân tán \(φ\) và, quan trọng nhất, tham số chỉ số \(ξ\) nếu nó không được cố định trước. Việc ước lượng \(ξ\) thường là một thách thức tính toán và là một điểm khác biệt so với GLM truyền thống với các phân phối cố định như Gamma hay Inverse Gaussian.
Phần mềm R cung cấp công cụ để điều chỉnh mô hình Tweedie GLM. Hàm chính được sử dụng là glm(). Để chỉ định sử dụng phân phối Tweedie, bạn sử dụng family=tweedie().
Cú pháp cơ bản sẽ có dạng:
\(glm(BienPhuThuoc ~ BienGiaiThich, family=tweedie(var.power=ξ, link="hàm _ liên _ kết"), data=DuLieu)\)
Trong đó:
BienPhuThuoc là biến phản hồi (biến phụ thuộc).
BienGiaiThich là các biến độc lập/giải thích.
tweedie() là hàm chỉ định họ phân phối Tweedie.
var.power=ξ là nơi bạn chỉ định giá trị của tham số \(ξ\). Nếu ξ cần được ước lượng, có thể cần sử dụng các gói mở rộng hoặc phương pháp khác không chỉ giới hạn trong hàm glm() cơ bản (phần trích không nêu rõ cách ước lượng \(ξ\) trực tiếp trong glm.
link=“hàm_liên_kết” chỉ định hàm liên kết (ví dụ: “log”, “identity”, “inverse”).
Sau khi chạy glm(), bạn có thể xem kết quả ước lượng hệ số, sai số chuẩn, giá trị t và p-value. Tham số phân tán φ cũng sẽ được ước lượng và hiển thị trong kết quả.
Giống như các GLM khác, việc kiểm định các giả định mô hình và thực hiện chẩn đoán là cần thiết. Các công cụ chẩn đoán bao gồm phân tích phần dư (như phần dư deviance chuẩn hóa) và các biểu đồ chẩn đoán.
data <- read.csv(file = 'C:/Users/Admin/Downloads/Supermarket Transactions.csv', header = T)
Supermarket Transactions là một bộ dữ liệu bao gồm 14059 quan sát và 16 biến, cụ thể:
Số thứ tự
Production Date: Ngày mua hàng
Customer ID: ID khách hàng
Gender: Giới tính, F (Female) - nữ và M (Male) - nam
Marital Status: Tình trạng hôn nhân, S (Single) - độc thân và M(Married) - đã kết hôn
Homeowner: Đã có nhà hay chưa, Y (Yes) - đã có nhà và N (No) - chưa có nhà
Children: Số con cái
Annual Income: Thu nhập hàng tháng
City: Thành phố đang sống
Stateor Province: Mã kí hiệu của bang
Country: Đất nước
Product Family: Nhóm sản phẩm, Food: Thực phẩm, Drink: Đồ uống và Non-Consumable: Hàng không tiêu dùng
Product Department: Nhóm sản phẩm chi tiết
Product Category: Danh mục sản phẩm
Units Sold: Doanh số bán hàng theo đơn vị
Revenue: Doanh thu
Trong đó:
Các biến định lượng là: Children, Units Sold và Revenue
Các biến định tính là: Gender, Annual Income, Marital Status, Homeowner, City, Stateor Province, Country, Product Family, Product Department và Product Category
a) Biến Chilren
library("psych")
library(knitr)
bang.children <- describe(data$Children)
kable(bang.children, caption = "Bảng 1: Mô tả thống kê của biến Childern")
| vars | n | mean | sd | median | trimmed | mad | min | max | range | skew | kurtosis | se | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| X1 | 1 | 14059 | 2.530336 | 1.491852 | 3 | 2.532492 | 1.4826 | 0 | 5 | 5 | -0.0212564 | -1.031539 | 0.012582 |
library(ggplot2)
library(dplyr)
data <- data %>%
mutate(Children = factor(Children, levels = c(0, 1, 2, 3, 4, 5)))
counts <- data %>%
group_by(Children) %>%
summarise(Count = n())
ggplot(counts, aes(x = Children, y = Count)) +
geom_bar(stat = "identity", fill = 'skyblue') +
geom_text(aes(label = Count), vjust = -0.5, size = 4) +
labs(
title = "Hình 1: Số lượng con cái của mỗi khách hàng",
x = 'Số lượng con cai',
y = 'Số lượng khách hàng'
) +
theme_minimal()
Dựa vào bảng 1 và hình 1 ta thấy rằng, biến Children đại diện cho số con cái của 14059 khách hàng. 1344 khách hàng có số con cái ít nhất là 0 đứa con và 1439 khách hàng có số con cái cao nhất là 5 đứa con. Như vậy, số con dao động từ 0 đến 5, cho thấy phạm vi biến thiên là 5 đơn vị. Giá trị trung bình là 2.53, cho thấy mỗi khách hàng có trung bình 2 đến 3 đứa con, với độ lệch chuẩn là 1.49, cho thấy mức độ phân tán vừa phải xung quanh giá trị trung bình, không có độ chênh lệch quá cao giữa các khách hàng. Trung vị của phân phối là 3, phản ánh rằng 50% số khách hàng có từ 3 đứa con trở xuống. Chỉ số skewness (độ lệch) gần bằng 0 (-0.02) cho thấy phân phối dữ liệu khá cân đối, không lệch nhiều về phía ít hay nhiều con. Trong khi đó, kurtosis (độ nhọn) có giá trị âm (-1.03), cho thấy phân phối phẳng hơn so với phân phối chuẩn — tức là dữ liệu ít có các trường hợp quá cực đoan (quá nhiều hay quá ít con).
b) Biến Units Sold
library("psych")
library(knitr)
bang.unitssold <- describe(data$UnitsSold)
kable(bang.unitssold, caption = "Bảng 2: Mô tả thống kê của biến Units Sold")
| vars | n | mean | sd | median | trimmed | mad | min | max | range | skew | kurtosis | se | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| X1 | 1 | 14059 | 4.080589 | 1.174421 | 4 | 4.076985 | 1.4826 | 1 | 8 | 7 | 0.0124645 | -0.4381643 | 0.0099048 |
library(ggplot2)
library(dplyr)
data <- data %>%
mutate(UnitsSold = factor(UnitsSold, levels = c(1, 2, 3, 4, 5, 6, 7, 8)))
counts <- data %>%
group_by(UnitsSold) %>%
summarise(Count = n())
ggplot(counts, aes(x = UnitsSold, y = Count)) +
geom_bar(stat = "identity", fill = 'pink') +
geom_text(aes(label = Count), vjust = -0.5, size = 4) +
labs(
title = "Hình 2: Số lượng sản phẩm đã bán ra trong mỗi khách hàng",
x = 'Số lượng sản phẩm đã bán ra',
y = 'Số lượng khách hàng'
) +
theme_minimal()
Units Sold là số lượng sản phẩm đã bán ra trong một thời gian nhất định. Ở đây ta có thể hiểu là số lượng sản phẩm mà cửa hàng này đã bán được cho 1 khách hàng.
Kết quả của bảng 2 và hình 2 cho ta thấy rằng, tại cửa hàng này, trung bình 1 khách hàng sẽ mua 4 sản phẩm của cửa hàng này. Đây cũng là giá trị trung vị, khớp với kết quả mô tả thống kê trước đó. Phần lớn khách hàng mua từ 3 đến 5 sản phẩm, cụ thể là 3.289 khách hàng mua 3 sản phẩm và 3.562 khách hàng mua 5 sản phẩm. Số lượng khách hàng giảm mạnh ở hai đầu phân phối: chỉ có 90 người mua 1 sản phẩm, và rất ít người mua tới 7 hoặc 8 sản phẩm (lần lượt là 168 và 2 người).
Phân phối này khá cân đối, thể hiện rõ ở tính đối xứng quanh điểm trung tâm, phù hợp với hệ số lệch gần bằng 0 và độ nhọn âm nhẹ. Điều này gợi ý rằng hành vi mua hàng của khách không có nhiều điểm bất thường, và có thể được xem là ổn định với xu hướng phổ biến là mua khoảng 4 sản phẩm mỗi lần. Việc chỉ có một tỷ lệ rất nhỏ khách hàng mua quá ít (1–2 sản phẩm) hoặc quá nhiều (7–8 sản phẩm) cho thấy tập khách hàng không bị chi phối bởi nhóm khách có hành vi mua sắm khác biệt hoàn toàn so với phần lớn.
c) Biến Revenue
library("psych")
library(knitr)
bang.revenue <- describe(data$Revenue)
kable(bang.revenue, caption = "Bảng 3: Mô tả thống kê của biến Revenue")
| vars | n | mean | sd | median | trimmed | mad | min | max | range | skew | kurtosis | se | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| X1 | 1 | 14059 | 13.00451 | 8.215543 | 11.25 | 12.04553 | 7.398174 | 0.53 | 56.7 | 56.17 | 1.134659 | 1.390813 | 0.0692882 |
hist(data$Revenue,
breaks = "Sturges",
col = "lightgreen",
main = "Hình 3: Phân phối doanh thu của khách hàng",
xlab = "Doanh thu",
ylab = "Số lượng khách hàng",
border = "gray")
Revenue tại trường hợp này được hiểu là doanh thu mà 1 khách hàng mang lại cho cửa hàng này. Theo kết quả thống kê, doanh thu trung bình của một khách hàng là khoảng 13 đơn vị, với độ lệch chuẩn là 8.22, cho thấy mức chi tiêu giữa các khách hàng có sự dao động tương đối lớn. Trung vị của biến này là 11.25, thấp hơn giá trị trung bình, cho thấy phân phối bị lệch phải nhẹ – điều này được củng cố bởi hệ số lệch (skewness) là 1.13 và hệ số nhọn (kurtosis) là 1.39.
Biểu đồ tần suất (Hình 3) minh họa rõ nét điều này: phần lớn khách hàng tạo ra doanh thu ở mức dưới 20, tập trung nhiều nhất trong khoảng 5–15 đơn vị. Số khách hàng có doanh thu cao giảm dần rõ rệt, và chỉ có rất ít người mang lại doanh thu vượt quá 40. Điều này cho thấy hiện tượng một số khách hàng chi tiêu rất cao nhưng chiếm tỷ lệ nhỏ – nhóm “khách VIP” tiềm năng nhưng không phổ biến.
Tổng thể, phân phối doanh thu theo khách hàng có dạng lệch phải, với phần lớn khách mang lại mức chi tiêu trung bình thấp đến vừa, trong khi chỉ một số ít đóng góp phần lớn doanh thu cao.
a) Biến Gender
tanso.gender <- table(data$Gender)
phantram.gender <- prop.table(tanso.gender) * 100
bang.gender <- data.frame(
gender = names(tanso.gender),
Frequency = as.vector(tanso.gender),
Percentage = round(as.vector(phantram.gender), 2)
)
kable(bang.gender, caption = "Bảng 4: Mô tả thống kê của biến Gender")
| gender | Frequency | Percentage |
|---|---|---|
| F | 7170 | 51 |
| M | 6889 | 49 |
data %>% group_by(Gender) %>% summarise(n = n()) %>%
mutate(percentage = n / sum(n) * 100) %>%
ggplot(aes(x = '', y = n,fill = Gender)) +
geom_col(color = 'black') +
coord_polar('y') +
geom_text(aes(x = 1.3, label = paste0(round(percentage, 1), "%")),position = position_stack(vjust = .5)) +
theme_void() +
labs(title = 'Hình 4: Biểu đồ tròn thể hiện số lượng khách theo giới tính', x = ' ', y = ' ')
Kết quả từ bảng 4 và hình 4 cho thấy có 7.170 khách hàng nữ (chiếm 51%) và 6.889 khách hàng nam (chiếm 49%). Cửa hàng nhận được sự ủng hộ nhiều hơn từ khách hàng nữ, nhưng sự khác biệt giữa hai giới tính là không lớn, chỉ khoảng 2%.
b) Biến Annual Income
Thu nhập hàng năm của 14059 khách hàng khá là đa dạng, trải dài từ 10$ - trên 150$/năm. Vì vậy, để thuận tiện cho việc ước lượng thống kê mô tả, chúng ta sẽ quy ước như sau:
bang.annualincome <- table(data$AnnualIncome)
kable(bang.annualincome, caption = "Bảng 5: Mô tả thống kê của biến Annua Income")
| Var1 | Freq |
|---|---|
| $10K - $30K | 3090 |
| $110K - $130K | 643 |
| $130K - $150K | 760 |
| $150K + | 273 |
| $30K - $50K | 4601 |
| $50K - $70K | 2370 |
| $70K - $90K | 1709 |
| $90K - $110K | 613 |
data <- data %>%
mutate(AI = case_when(
AnnualIncome %in% c('$10K - $30K', '$30K - $50K') ~ 'Thấp',
AnnualIncome %in% c('$50K - $70K', '$70K - $90K', '$90K - $110K') ~ 'Trung bình thấp',
AnnualIncome %in% c('$110K - $130K', '$130K - $150K') ~ 'Trung bình cao',
AnnualIncome == '$150K +' ~ 'Cao',
TRUE ~ 'Không xác định'
))
counts <- data %>%
group_by(AI) %>%
summarise(Count = n())
ggplot(counts, aes(x = AI, y = Count)) +
geom_bar(stat = "identity", fill = 'purple') +
geom_text(aes(label = Count), vjust = -0.5, size = 4) +
labs(
title = "Hình 5: Thu nhập một năm của mỗi khách hàng",
x = 'Thu nhập một năm',
y = 'Số lượng khách hàng'
) +
theme_minimal()
Phân bố thu nhập hàng năm của khách hàng trong bảng 5 và hình 5 cho thấy sự chênh lệch đáng kể giữa các nhóm thu nhập. Cụ thể, phần lớn khách hàng rơi vào nhóm thu nhập thấp (dưới 70K/năm), với tổng cộng 7691 người, chiếm hơn 50% mẫu khảo sát. Nhóm thu nhập trung bình thấp (70K – 110K/năm) cũng chiếm tỷ trọng đáng kể với 4692 người. Trong khi đó, số khách hàng thuộc nhóm thu nhập trung bình cao (110K – 130K/năm) chỉ có 1403 người và nhóm thu nhập cao (trên 150K/năm) là 273 người, thể hiện một tỷ lệ rất nhỏ trong tổng thể.
Kết quả này cho thấy rằng khách hàng của cửa hàng chủ yếu đến từ các nhóm thu nhập trung bình trở xuống. Điều này có thể phản ánh định vị thị trường của cửa hàng đang hướng đến đối tượng có khả năng chi tiêu vừa phải, đồng thời gợi ý về việc cần điều chỉnh các chiến lược tiếp thị hoặc phát triển sản phẩm nếu muốn tiếp cận nhóm khách hàng có thu nhập cao hơn trong tương lai.
c) Biến Marital Status
bang.maritalstatus <- table(data$MaritalStatus)
kable(bang.maritalstatus, caption = "Bảng 6: Mô tả thống kê của biến Marital Status")
| Var1 | Freq |
|---|---|
| M | 6866 |
| S | 7193 |
data %>% group_by(MaritalStatus) %>% summarise(n = n()) %>%
mutate(percentage = n / sum(n) * 100) %>%
ggplot(aes(x = '', y = n,fill = MaritalStatus)) +
geom_col(color = 'black') +
coord_polar('y') +
geom_text(aes(x = 1.3, label = paste0(round(percentage, 1), "%")),position = position_stack(vjust = .5)) +
scale_fill_manual(values = c("M" = "#FFA54F", "S" = "#FFE1FF")) +
theme_void() +
labs(title = 'Hình 6: Biểu đồ tròn thể hiện tình trạng hôn nhân của mỗi khách hàng', x = ' ', y = ' ')
Từ kết quả của bảng 6 và hình 6 cho thấy rằng, tình trạng hôn nhân của khách hàng phân bố khá đồng đều giữa hai nhóm đã kết hôn (M) và độc thân (S). Cụ thể, nhóm độc thân chiếm tỷ lệ nhỉnh hơn với 7193 người (51.2%), trong khi nhóm đã kết hôn là 6866 người (48.8%). Điều này cho thấy rằng không có sự chênh lệch lớn giữa hai nhóm về mặt số lượng, tuy nhiên việc nhóm độc thân chiếm tỷ lệ cao hơn một chút có thể gợi ý rằng đối tượng khách hàng chưa lập gia đình đang chiếm ưu thế nhẹ trong tệp khách hàng hiện tại.
Từ góc nhìn thực tiễn, tình trạng hôn nhân có thể ảnh hưởng đến hành vi tiêu dùng và mức độ chi tiêu của khách hàng. Ví dụ, khách hàng độc thân có thể có xu hướng chi tiêu nhiều hơn cho bản thân và các hoạt động giải trí cá nhân, trong khi nhóm đã kết hôn có thể ưu tiên các nhu cầu cho gia đình.
d) Biến Homeowner
bang.homeowner <- table(data$Homeowner)
kable(bang.homeowner, caption = "Bảng 7: Mô tả thống kê của biến Homeowner")
| Var1 | Freq |
|---|---|
| N | 5615 |
| Y | 8444 |
data %>% group_by(Homeowner) %>% summarise(n = n()) %>%
mutate(percentage = n / sum(n) * 100) %>%
ggplot(aes(x = '', y = n,fill = Homeowner)) +
geom_col(color = 'black') +
coord_polar('y') +
geom_text(aes(x = 1.3, label = paste0(round(percentage, 1), "%")),position = position_stack(vjust = .5)) +
scale_fill_manual(values = c("Y" = "#7FFFD4", "N" = "#CAFF70")) +
theme_void() +
labs(title = 'Hình 7: Biểu đồ tròn thể hiện tình trạng sở hữu nhà riêng của mỗi khách hàng', x = ' ', y = ' ')
Kết quả thống kê cho biến Homeowner từ bảng 7 và hình 7 cho thấy rằng có 60,1% khách hàng sở hữu nhà riêng, trong khi 39,9% còn lại không sở hữu nhà. Tỷ lệ sở hữu nhà cao hơn cho thấy phần lớn khách hàng trong tập dữ liệu có mức độ ổn định nhất định về mặt tài chính hoặc đang ở giai đoạn đời sống đã tích lũy được tài sản cố định. Điều này có thể là yếu tố ảnh hưởng đến hành vi tiêu dùng, nhu cầu vay vốn hoặc xu hướng đầu tư tài chính của họ.
e) Biến City
tanso.city <- table(data$City)
phantram.city <- prop.table(tanso.city) * 100
bang.city <- data.frame(
City = names(tanso.city),
Frequency = as.vector(tanso.city),
Percentage = round(as.vector(phantram.city), 2)
)
kable(bang.city, caption = "Bảng 8: Mô tả thống kê của biến City")
| City | Frequency | Percentage |
|---|---|---|
| Acapulco | 383 | 2.72 |
| Bellingham | 143 | 1.02 |
| Beverly Hills | 811 | 5.77 |
| Bremerton | 834 | 5.93 |
| Camacho | 452 | 3.22 |
| Guadalajara | 75 | 0.53 |
| Hidalgo | 845 | 6.01 |
| Los Angeles | 926 | 6.59 |
| Merida | 654 | 4.65 |
| Mexico City | 194 | 1.38 |
| Orizaba | 464 | 3.30 |
| Portland | 876 | 6.23 |
| Salem | 1386 | 9.86 |
| San Andres | 621 | 4.42 |
| San Diego | 866 | 6.16 |
| San Francisco | 130 | 0.92 |
| Seattle | 922 | 6.56 |
| Spokane | 875 | 6.22 |
| Tacoma | 1257 | 8.94 |
| Vancouver | 633 | 4.50 |
| Victoria | 176 | 1.25 |
| Walla Walla | 160 | 1.14 |
| Yakima | 376 | 2.67 |
Từ kết quả của bảng 8 có thể cho thấy sự phân bố khách hàng không đồng đều giữa các thành phố. Salem là thành phố có số lượng khách hàng cao nhất với 1,386 người, chiếm 9.86% tổng số mẫu khảo sát. Theo sau đó là Tacoma (1,257 người – 8.94%), Portland (876 người – 6.23%), Seattle (922 người – 6.56%), và Los Angeles (926 người – 6.59%) – những khu vực có lượng khách hàng khá lớn.
Ở chiều ngược lại, một số thành phố ghi nhận số lượng khách hàng tương đối thấp như Guadalajara (75 người – 0.53%), San Francisco (130 người – 0.92%), và Walla Walla (160 người – 1.14%). Sự phân bổ này cho thấy một số khu vực có xu hướng tập trung khách hàng cao hơn, có thể do yếu tố dân cư, kinh tế hoặc đặc điểm thị trường tại, đặc điểm văn hóa của các địa phương đó.
f) Biến Stateor Province
tanso.stateorprovince <- table(data$StateorProvince)
phantram.stateorprovince <- prop.table(tanso.stateorprovince) * 100
bang.stateorprovince <- data.frame(
stateorprovince = names(tanso.stateorprovince),
Fequency = as.vector(tanso.stateorprovince),
Percentage = round(as.vector(phantram.stateorprovince), 2)
)
kable(bang.stateorprovince, caption = "Bảng 9: Mô tả thống kê của biến Stateor Province")
| stateorprovince | Fequency | Percentage |
|---|---|---|
| BC | 809 | 5.75 |
| CA | 2733 | 19.44 |
| DF | 815 | 5.80 |
| Guerrero | 383 | 2.72 |
| Jalisco | 75 | 0.53 |
| OR | 2262 | 16.09 |
| Veracruz | 464 | 3.30 |
| WA | 4567 | 32.48 |
| Yucatan | 654 | 4.65 |
| Zacatecas | 1297 | 9.23 |
counts <- data %>%
group_by(StateorProvince) %>%
summarise(Count = n())
ggplot(counts, aes(x = StateorProvince, y = Count)) +
geom_bar(stat = "identity", fill = 'maroon') +
geom_text(aes(label = Count), vjust = -0.5, size = 4) +
labs(
title = "Hình 8: Số lượng mã bang của mỗi khách hàng",
x = "Ma bang",
y = "Số lượng khách hàng"
) +
theme_minimal()
Biến StateorProvince phản ánh phân bố khách hàng theo mã bang hoặc tỉnh. Dữ liệu cho thấy sự chênh lệch đáng kể về tần suất khách hàng giữa các khu vực. Cụ thể, bang Washington (WA) chiếm tỷ trọng lớn nhất với 4.567 khách hàng, tương ứng 32.48% tổng số, cho thấy đây là khu vực tập trung đông đảo khách hàng nhất. Xếp sau là California (CA) với 2.733 khách hàng (19.44%) và Oregon (OR) với 2.262 khách hàng (16.09%). Ba bang này chiếm tổng cộng gần 68% tổng số khách hàng, cho thấy mức độ hiện diện hoặc hoạt động thương mại tập trung tại đây là khá cao.
Ngược lại, một số khu vực có số lượng khách hàng rất thấp như Jalisco với chỉ 75 người, tương đương 0.53%, hay Guerrero và Veracruz chỉ chiếm lần lượt 2.72% và 3.30%. Điều này cho thấy sự hiện diện khách hàng ở những bang này còn khá hạn chế. Các bang còn lại như BC, DF, Yucatan và Zacatecas dao động từ khoảng 4.65% đến 9.23%, phản ánh mức độ trung bình trong phân bố khách hàng.
g) Biến Country
bang.country <- table(data$Country)
kable(bang.country, caption = "Bảng 10: Mô tả thống kê của biến Country")
| Var1 | Freq |
|---|---|
| Canada | 809 |
| Mexico | 3688 |
| USA | 9562 |
data %>% group_by(Country) %>% summarise(n = n()) %>%
mutate(percentage = n / sum(n) * 100) %>%
ggplot(aes(x = '', y = n,fill = Country)) +
geom_col(color = 'black') +
coord_polar('y') +
geom_text(aes(x = 1.3, label = paste0(round(percentage, 1), "%")),position = position_stack(vjust = .5)) +
scale_fill_manual(values = c("USA" = "#836FFF", "Mexico" = "#DDA0DD", "Canada" = "#AFEEEE")) +
theme_void() +
labs(title = 'Hình 9: Biểu đồ tròn thể hiện đất nước của mỗi khách hàng', x = ' ', y = ' ')
Từ bảng 10 và hình 9, biến Country phản ánh phân bố khách hàng theo quốc gia. Kết quả cho thấy khách hàng chủ yếu tập trung tại Hoa Kỳ, chiếm tới 68% tổng số quan sát, tương ứng 9.562 khách hàng. Đây là tỷ lệ vượt trội so với hai quốc gia còn lại, thể hiện rõ ràng vai trò trung tâm của thị trường Mỹ trong dữ liệu.
Mexico là quốc gia có lượng khách hàng đứng thứ hai với 3.688 người, chiếm khoảng 26.2%, cho thấy sự hiện diện khá rõ nét của khách hàng tại quốc gia láng giềng này. Trong khi đó, Canada chỉ đóng góp 809 khách hàng, tương ứng 5.8%, là nhóm chiếm tỷ trọng nhỏ nhất trong ba quốc gia.
Từ kết quả trên, có thể thấy rằng hoạt động hoặc dữ liệu khách hàng trong tập mẫu này có xu hướng tập trung mạnh tại thị trường Hoa Kỳ, với mức độ hiện diện thấp dần tại Mexico và Canada.
h) Biến Product Family
bang.productfamily <- table(data$ProductFamily)
kable(bang.productfamily, caption = "Bảng 11: Mô tả thống kê của biến Product Family")
| Var1 | Freq |
|---|---|
| Drink | 1250 |
| Food | 10153 |
| Non-Consumable | 2656 |
data %>% group_by(ProductFamily) %>% summarise(n = n()) %>%
mutate(percentage = n / sum(n) * 100) %>%
ggplot(aes(x = '', y = n,fill = ProductFamily)) +
geom_col(color = 'black') +
coord_polar('y') +
geom_text(aes(x = 1.3, label = paste0(round(percentage, 1), "%")),position = position_stack(vjust = .5)) +
scale_fill_manual(values = c("Food" = "#98FB98", "Drink" = "#7CCD7C", "Non-Consumable" = "#548B54")) +
theme_void() +
labs(title = 'Hình 10: Biểu đồ tròn thể hiện nhóm sản phẩm mà mỗi khách hàng mua', x = ' ', y = ' ')
Dựa trên bảng 11 và hình 10, thống kê mô tả cho thấy sự phân bố rõ ràng trong các danh mục sản phẩm mà khách hàng đã mua. Tổng cộng, có 10.153 sản phẩm thuộc nhóm Thực phẩm (chiếm 72,2%), 1.250 sản phẩm thuộc nhóm Đồ uống (8,9%), và 2.656 sản phẩm thuộc nhóm Không tiêu dùng (18,9%). Kết quả này cho thấy Thực phẩm là nhóm sản phẩm chiếm ưu thế vượt trội, phản ánh nhu cầu hoặc sở thích tiêu dùng thực phẩm cao của khách hàng. Trong khi đó, Đồ uống và Không tiêu dùng có tỷ lệ thấp hơn, với nhóm Không tiêu dùng nổi bật hơn Đồ uống một chút, có thể do tính đa dạng hoặc nhu cầu thiết yếu của các sản phẩm không tiêu dùng trong đời sống hàng ngày.
i) Biến Product Department
bang.productdepartment <- table(data$ProductDepartment)
kable(bang.productdepartment, caption = "Bảng 12: Mô tả thống kê của biến Product Department")
| Var1 | Freq |
|---|---|
| Alcoholic Beverages | 356 |
| Baked Goods | 425 |
| Baking Goods | 1072 |
| Beverages | 680 |
| Breakfast Foods | 188 |
| Canned Foods | 977 |
| Canned Products | 109 |
| Carousel | 59 |
| Checkout | 82 |
| Dairy | 903 |
| Deli | 699 |
| Eggs | 198 |
| Frozen Foods | 1382 |
| Health and Hygiene | 893 |
| Household | 1420 |
| Meat | 89 |
| Periodicals | 202 |
| Produce | 1994 |
| Seafood | 102 |
| Snack Foods | 1600 |
| Snacks | 352 |
| Starchy Foods | 277 |
Dựa trên kết quả phân loại sản phẩm theo phòng ban , phân tích thống kê mô tả cho thấy sự đa dạng trong các danh mục sản phẩm mà khách hàng lựa chọn. Trong số các nhóm sản phẩm, “Produce” (rau củ quả) có tần suất cao nhất với 1.994 sản phẩm, tiếp theo là “Snacks” (đồ ăn vặt) với 1.600 sản phẩm và “Household” (đồ gia dụng) với 1.420 sản phẩm. Ngược lại, các nhóm như “Carousel” (59 sản phẩm), “Checkout” (82 sản phẩm) và “Meat” (89 sản phẩm) có tần suất thấp nhất, cho thấy mức độ tiêu thụ ít hơn. Kết quả này phản ánh nhu cầu thiết yếu của khách hàng tập trung vào thực phẩm tươi sống và đồ ăn nhẹ, trong khi các sản phẩm tiện lợi hoặc chuyên biệt như thịt, đồ tại quầy thanh toán có sức hút thấp hơn trong ngữ cảnh khảo sát này.
j) Biến Product Category
bang.productcategory <- table(data$ProductCategory)
kable(bang.productcategory, caption = "Bảng 13: Mô tả thống kê của biến Product Category")
| Var1 | Freq |
|---|---|
| Baking Goods | 484 |
| Bathroom Products | 365 |
| Beer and Wine | 356 |
| Bread | 425 |
| Breakfast Foods | 417 |
| Candles | 45 |
| Candy | 352 |
| Canned Anchovies | 44 |
| Canned Clams | 53 |
| Canned Oysters | 35 |
| Canned Sardines | 40 |
| Canned Shrimp | 38 |
| Canned Soup | 404 |
| Canned Tuna | 87 |
| Carbonated Beverages | 154 |
| Cleaning Supplies | 189 |
| Cold Remedies | 93 |
| Dairy | 903 |
| Decongestants | 85 |
| Drinks | 135 |
| Eggs | 198 |
| Electrical | 355 |
| Frozen Desserts | 323 |
| Frozen Entrees | 118 |
| Fruit | 765 |
| Hardware | 129 |
| Hot Beverages | 226 |
| Hygiene | 197 |
| Jams and Jellies | 588 |
| Kitchen Products | 217 |
| Magazines | 202 |
| Meat | 761 |
| Miscellaneous | 42 |
| Packaged Vegetables | 48 |
| Pain Relievers | 192 |
| Paper Products | 345 |
| Pizza | 194 |
| Plastic Products | 141 |
| Pure Juice Beverages | 165 |
| Seafood | 102 |
| Side Dishes | 153 |
| Snack Foods | 1600 |
| Specialty | 289 |
| Starchy Foods | 277 |
| Vegetables | 1728 |
Dựa trên kết quả bảng 13 phân tích thống kê mô tả tiết lộ một sự phân bố không đồng đều và rõ rệt trong các danh mục sản phẩm mà khách hàng đã lựa chọn trong thời gian khảo sát. Nhóm “Vegetables” (rau củ) đứng đầu với tần suất cao nhất là 1.728 sản phẩm, phản ánh nhu cầu mạnh mẽ đối với thực phẩm tươi sống, có thể do lợi ích dinh dưỡng và tính phổ biến trong bữa ăn hàng ngày. Tiếp theo là “Snack Foods” (đồ ăn vặt) với 1.600 sản phẩm, cho thấy xu hướng tiêu dùng các sản phẩm tiện lợi và nhanh chóng, phù hợp với lối sống bận rộn của nhiều người. Nhóm “Fruit” (trái cây) với 765 sản phẩm cũng chiếm vị trí đáng kể, củng cố thêm xu hướng ưu tiên các thực phẩm lành mạnh. Ngược lại, các nhóm như “Canned Oysters” (35 sản phẩm), “Canned Shrimp” (38 sản phẩm), và “Candles” (45 sản phẩm) ghi nhận tần suất rất thấp, điều này có thể xuất phát từ việc các sản phẩm này thuộc nhóm đặc sản hoặc ít được ưa chuộng trong thị trường mục tiêu. Ngoài ra, các danh mục như “Canned Anchovies” (44 sản phẩm) và “Miscellaneous” (42 sản phẩm) cũng cho thấy mức độ tiêu thụ hạn chế, có thể do tính đặc thù hoặc sự cạnh tranh từ các sản phẩm khác. Kết quả này không chỉ phản ánh sở thích tiêu dùng tập trung vào thực phẩm thiết yếu và tiện lợi mà còn gợi ý rằng các sản phẩm chuyên biệt hoặc ít phổ biến có thể cần chiến lược tiếp thị hoặc cải tiến để tăng sức hút trong tương lai.