PHÂN TÍCH CÁC YẾU TỐ HÀNH VI VÀ DI TRUYỀN ẢNH HƯỞNG ĐẾN MỨC ĐỘ CÂN NẶNG

Phần 1: Tổng quan nghiên cứu và cơ sở nghiên cứu

1.1 Tổng quan nghiên cứu

1.1.1 Lý do chọn đề tài

Trong những năm gần đây, tình trạng thừa cân, béo phì ngày càng trở nên phổ biến và trở thành một vấn đề sức khỏe cộng đồng đáng báo động ở nhiều quốc gia, trong đó có Việt Nam. Béo phì không chỉ ảnh hưởng tiêu cực đến chất lượng cuộc sống của cá nhân mà còn làm gia tăng gánh nặng cho hệ thống y tế do liên quan đến các bệnh mãn tính như tim mạch, tiểu đường và cao huyết áp.

Trong bối cảnh đó, việc phân tích các yếu tố ảnh hưởng đến mức độ cân nặng có ý nghĩa thực tiễn to lớn, đặc biệt là các yếu tố hành vi như thói quen ăn uống (ví dụ: tiêu thụ thực phẩm giàu calo, kiểm soát khẩu phần) và yếu tố di truyền như tiền sử gia đình bị thừa cân. Những yếu tố này có thể thay đổi hoặc can thiệp được (về hành vi), hoặc cần được lưu ý trong quá trình tư vấn, dự phòng (về di truyền).

Thông qua việc ứng dụng các mô hình thống kê hiện đại, đề tài này nhằm mục tiêu xác định và đánh giá mức độ ảnh hưởng của các yếu tố hành vi và di truyền đến khả năng một cá nhân rơi vào các mức độ béo phì khác nhau. Kết quả nghiên cứu không chỉ góp phần làm rõ cơ chế hình thành béo phì mà còn là cơ sở định hướng cho các biện pháp phòng ngừa và can thiệp chính sách hiệu quả hơn trong tương lai.

1.1.2 Mục tiêu và câu hỏi nghiên cứu

Mục tiêu của nghiên cứu này là tìm hiểu và đánh giá mức độ ảnh hưởng của các yếu tố hành vi và di truyền đến tình trạng cân nặng, đặc biệt là nguy cơ rơi vào các nhóm béo phì ở mức độ nặng như Obesity_Type_I và Obesity_Type_III. Cụ thể, nghiên cứu tập trung vào việc xác định mối liên hệ giữa các hành vi như thói quen tiêu thụ thực phẩm giàu calo, việc theo dõi lượng calo hằng ngày, cùng với yếu tố tiền sử gia đình bị thừa cân, nhằm làm rõ vai trò của từng yếu tố trong việc hình thành nguy cơ béo phì. Ngoài ra, nghiên cứu còn đặt mục tiêu so sánh hiệu quả của các mô hình hồi quy nhị phân khác nhau (logit, probit, cloglog) trong việc dự đoán xác suất mắc béo phì dựa trên các yếu tố đã nêu, từ đó lựa chọn mô hình phù hợp nhất để mô tả hiện tượng.

Từ các mục tiêu trên, nghiên cứu đặt ra các câu hỏi chính: (1) Những hành vi nào có liên quan mật thiết đến khả năng bị béo phì ở mức độ nghiêm trọng? (2) Liệu việc có người thân trong gia đình từng bị thừa cân có làm tăng nguy cơ béo phì hay không, và nếu có thì mức độ ảnh hưởng là bao nhiêu? (3) Trong số các mô hình thống kê được sử dụng, mô hình nào cho thấy sự phù hợp tốt nhất với dữ liệu về béo phì theo các yếu tố hành vi và di truyền? (4) Có tồn tại sự tương tác đáng kể nào giữa yếu tố hành vi và yếu tố di truyền trong quá trình hình thành tình trạng béo phì hay không?

1.1.3 Đối tượng và phạm vi nghiên cứu

Đối tượng nghiên cứu trong đề tài này là các cá nhân có đặc điểm nhân khẩu học và lối sống khác nhau, được ghi nhận trong bộ dữ liệu liên quan đến sức khỏe, hành vi ăn uống và yếu tố di truyền, cụ thể là biến số tình trạng cân nặng được phân loại theo chuẩn NObeyesdad. Các đặc điểm cá nhân được phân tích bao gồm hành vi tiêu thụ thực phẩm giàu calo (FAVC), việc theo dõi lượng calo tiêu thụ (SCC), và yếu tố tiền sử gia đình bị thừa cân (family_history_with_overweight). Đây là ba biến đại diện cho hai nhóm yếu tố chính: hành vi và di truyền, vốn được xem là có ảnh hưởng lớn đến nguy cơ mắc béo phì.

Phạm vi nghiên cứu giới hạn ở việc phân tích ảnh hưởng của các yếu tố kể trên đến xác suất rơi vào các nhóm béo phì nghiêm trọng, đặc biệt là Obesity_Type_I và Obesity_Type_III. Phân tích được thực hiện dựa trên các mô hình hồi quy nhị phân như logit, probit, và cloglog, với mục tiêu không chỉ đo lường mức độ ảnh hưởng của từng yếu tố mà còn đánh giá mức độ phù hợp của các mô hình này với dữ liệu thực tế. Nghiên cứu không xem xét đến các yếu tố kinh tế, xã hội, hay các can thiệp y tế cụ thể, mà tập trung vào khía cạnh định lượng và hành vi để làm rõ cơ chế hình thành tình trạng béo phì trong cộng đồng.

1.1.4 Phương pháp nghiên cứu

Nghiên cứu này sử dụng phương pháp định lượng, cụ thể là phân tích hồi quy nhị phân để đánh giá ảnh hưởng của các yếu tố hành vi và di truyền đến khả năng một cá nhân rơi vào các mức độ béo phì khác nhau. Dữ liệu được xử lý và phân tích bằng ngôn ngữ lập trình R, với các biến định danh như NObeyesdad được mã hóa nhị phân để phục vụ mục đích mô hình hóa.

Ba mô hình hồi quy nhị phân chính được sử dụng bao gồm: hồi quy logistic (logit), hồi quy chuẩn tắc (probit) và hồi quy complementary log-log (cloglog). Các mô hình này được triển khai nhằm so sánh khả năng dự đoán và mức độ phù hợp với dữ liệu thông qua chỉ số AIC. Bên cạnh đó, phân tích đơn biến và đa biến được áp dụng để xem xét riêng lẻ cũng như tổng hợp ảnh hưởng của các biến độc lập như FAVC (ăn nhiều đồ calo), SCC (theo dõi lượng calo), và family_history_with_overweight (tiền sử gia đình bị thừa cân) đến xác suất rơi vào nhóm béo phì.

Ngoài ra, để hỗ trợ việc diễn giải mô hình, các chỉ số như tỷ số odds (odds ratio) và chênh lệch xác suất giữa các nhóm cũng được tính toán và phân tích chi tiết. Việc so sánh các mô hình dựa trên cả yếu tố thống kê và ý nghĩa thực tiễn nhằm đưa ra kết luận chính xác và có giá trị ứng dụng.

1.2 Cơ sở lý thuyết

1.2.1 Relative Risk (RR)

Relative Risk (RR) – hay còn gọi là nguy cơ tương đối – so sánh xác suất xảy ra hành vi vay tiêu dùng giữa hai nhóm:

\[ RR = \frac{P_1}{P_0} \]

Trong đó:

  • \(P_1\): Xác suất khách hàng có đặc điểm thực hiện hành vi vay tiêu dùng
  • \(P_0\): Xác suất khách hàng không có đặc điểm thực hiện hành vi vay tiêu dùng

Diễn giải:

  • RR = 1: Không có sự khác biệt giữa hai nhóm
  • RR > 1: Nhóm có đặc điểm có khả năng vay cao hơn
  • RR < 1: Nhóm có đặc điểm có khả năng vay thấp hơn

1.2.2 Odds Ratio (OR)

Odds Ratio (OR) đo lường tỷ lệ odds (khả năng xảy ra so với không xảy ra) giữa hai nhóm:

\[ OR = \frac{P_1 / (1 - P_1)}{P_0 / (1 - P_0)} = \frac{P_1 (1 - P_0)}{P_0 (1 - P_1)} \]

Trong mô hình hồi quy logistic, kết quả hồi quy chính là log(OR):

\[ \log(OR) = X\beta \]

Diễn giải:

  • OR = 1: Không có sự khác biệt giữa hai nhóm
  • OR > 1: Nhóm có đặc điểm có odds vay cao hơn
  • OR < 1: Nhóm có đặc điểm có odds vay thấp hơn

1.2.3 Mô hình Hồi quy Logistic (Logit Model)

Mô hình Logit được sử dụng phổ biến để phân tích mối quan hệ giữa một biến phụ thuộc nhị phân và một hoặc nhiều biến độc lập (liên tục hoặc định tính). Mục tiêu là ước lượng xác suất xảy ra sự kiện (ở đây là tái phát bệnh).

Xác suất tái phát của cá thể thứ \(i\) được mô hình hóa như sau:

\[ P_i = P(Y_i = 1 | X_i) = \frac{1}{1 + e^{-(\beta_0 + \beta_1 X_{1i} + \dots + \beta_k X_{ki})}} = \frac{e^{Z_i}}{1 + e^{Z_i}} \]

Trong đó:

  • \(P_i\): Xác suất cá thể \(i\) bị tái phát bệnh.
  • \(X_{1i}, \dots, X_{ki}\): Giá trị của các biến độc lập của cá thể \(i\).
  • \(\beta_0, \beta_1, \dots, \beta_k\): Các hệ số hồi quy cần ước lượng.
  • \(Z_i = \beta_0 + \beta_1 X_{1i} + \dots + \beta_k X_{ki}\)

Để tuyến tính hóa mô hình, người ta sử dụng hàm logit:

\[ L_i = \ln\left( \frac{P_i}{1 - P_i} \right) = \beta_0 + \beta_1 X_{1i} + \dots + \beta_k X_{ki} \]

Tỷ số \(\frac{P_i}{1 - P_i}\) được gọi là tỷ số chênh (odds), cho biết khả năng xảy ra sự kiện so với không xảy ra sự kiện. Mỗi hệ số \(\beta_k\) được diễn giải bằng tỷ số chênh lệch (Odds Ratio – OR):

\[ OR_k = e^{\beta_k} \]

Ý nghĩa: Khi biến \(X_k\) tăng một đơn vị (và các biến khác giữ nguyên), odds của việc tái phát bệnh sẽ thay đổi \(e^{\beta_k}\) lần.

1.1.4 Mô hình Probit

Mô hình Probit là một lựa chọn thay thế cho Logit, với khác biệt chính nằm ở hàm liên kết. Probit sử dụng hàm phân phối tích lũy chuẩn \(\Phi(Z)\) thay vì hàm logistic.

Mô hình có dạng:

\[ P_i = P(Y_i = 1 | X_i) = \Phi(Z_i) = \int_{-\infty}^{Z_i} \frac{1}{\sqrt{2\pi}} e^{-t^2/2} dt \]

Trong đó:

\[ Z_i = \beta_0 + \beta_1 X_{1i} + \dots + \beta_k X_{ki} \]

Mặc dù Logit và Probit sử dụng các phân phối khác nhau (logistic vs. chuẩn), trong thực tế hai mô hình thường cho kết quả khá tương đồng. Tuy nhiên, Logit được ưa chuộng hơn do khả năng diễn giải đơn giản thông qua Odds Ratio.

1.2.5 Hàm hợp lý (Likelihood Function)

Với một mẫu gồm \(n\) quan sát độc lập, hàm hợp lý của mô hình được xây dựng như sau:

\[ L(\beta_0, \dots, \beta_k) = \prod_{i=1}^{n} P_i^{Y_i} (1 - P_i)^{1 - Y_i} \]

Trong đó:

  • \(Y_i = 1\) nếu cá thể \(i\) bị tái phát, ngược lại \(Y_i = 0\).
  • \(P_i\): xác suất tái phát, tính theo mô hình Logit hoặc Probit.

1.2.6 Hàm log-likelihood

Do hàm Likelihood là một tích phức tạp, người ta thường sử dụng logarit của nó để dễ tính toán:

\[ \ln L = \sum_{i=1}^{n} \left[ Y_i \ln(P_i) + (1 - Y_i) \ln(1 - P_i) \right] \]

Quá trình ước lượng sẽ tìm các giá trị \(\hat{\beta}_0, \hat{\beta}_1, \dots, \hat{\beta}_k\) sao cho hàm log-likelihood đạt cực đại. Việc tối ưu hóa này thường được thực hiện bằng các thuật toán số như Newton-Raphson, Fisher scoring, hay Gradient ascent.

Phần 2: Tìm hiểu và Chuẩn bị Dữ liệu

2.1 Đọc bộ dữ liệu

l <- read.csv(file.choose(), header = T)

Bộ dữ liệu “Obesity Prediction Dataset”, được cung cấp trên nền tảng Kaggle bởi tác giả Adeniran Stephen, là một nguồn dữ liệu thực nghiệm được xây dựng nhằm phục vụ cho các mục đích nghiên cứu khoa học, ứng dụng học máy và phân tích dữ liệu y sinh. Tập dữ liệu này tập trung vào việc phản ánh các yếu tố ảnh hưởng đến tình trạng béo phì ở con người, bao gồm sự kết hợp giữa các đặc điểm sinh lý học (như chiều cao, cân nặng, chỉ số BMI), hành vi cá nhân (như tần suất tiêu thụ thức ăn nhanh, thói quen vận động thể chất, mức độ tiêu thụ nước, rượu), và yếu tố lối sống – xã hội (như tiền sử gia đình, mức độ stress, môi trường làm việc học tập).

Với cấu trúc rõ ràng, dễ xử lý và quy mô vừa phải (khoảng 2111 quan sát), bộ dữ liệu phù hợp cho nhiều phương pháp phân tích thống kê cũng như các kỹ thuật học máy như hồi quy logistic, cây quyết định, SVM, và mạng nơ-ron nhân tạo. Tập dữ liệu cung cấp nhãn phân loại theo nhiều mức độ béo phì, từ “Thiếu cân” đến “Béo phì cấp độ III”, cho phép xây dựng các mô hình phân loại đa cấp (multi-class classification) hoặc nhị phân tùy theo mục tiêu nghiên cứu.

Ngoài giá trị học thuật trong lĩnh vực khoa học dữ liệu và trí tuệ nhân tạo, bộ dữ liệu còn có ý nghĩa thực tiễn sâu sắc đối với y học dự phòng, dịch tễ học, và chính sách sức khỏe cộng đồng. Phân tích dữ liệu này có thể giúp nhận diện các yếu tố nguy cơ chính dẫn đến béo phì, từ đó xây dựng các chương trình can thiệp sớm, giáo dục sức khỏe và nâng cao nhận thức trong cộng đồng. Đồng thời, việc sử dụng dữ liệu này còn mở ra tiềm năng cho các ứng dụng công nghệ hỗ trợ ra quyết định trong y tế, ví dụ như hệ thống cảnh báo sớm nguy cơ béo phì dựa trên hành vi cá nhân.

Tóm lại, “Obesity Prediction Dataset” không chỉ là một bộ dữ liệu phục vụ mô phỏng kỹ thuật mà còn là cầu nối giữa khoa học dữ liệu và chăm sóc sức khỏe cộng đồng, góp phần thúc đẩy các nghiên cứu liên ngành nhằm đối phó với vấn đề béo phì đang gia tăng trong xã hội hiện đại.

2.1.1 Các biến có trong bộ dữ liệu

names(l)
##  [1] "Gender"                         "Age"                           
##  [3] "Height"                         "Weight"                        
##  [5] "family_history_with_overweight" "FAVC"                          
##  [7] "FCVC"                           "NCP"                           
##  [9] "CAEC"                           "SMOKE"                         
## [11] "CH2O"                           "SCC"                           
## [13] "FAF"                            "TUE"                           
## [15] "CALC"                           "MTRANS"                        
## [17] "NObeyesdad"
Tên biến Mô tả
Gender Giới tính của cá nhân (Male, Female)
Age Tuổi của cá nhân
Height Chiều cao (mét)
Weight Cân nặng (kg)
family_history_with_overweight Có người thân bị thừa cân/béo phì không (yes/no)
FAVC Có thường ăn thức ăn giàu calo không (yes/no)
FCVC Mức độ tiêu thụ rau củ trung bình mỗi ngày (1 đến 3)
NCP Số lượng bữa ăn chính trong ngày
CAEC Tần suất ăn vặt giữa các bữa (Never, Sometimes, Frequently, Always)
SMOKE Có hút thuốc không (yes/no)
CH2O Lượng nước tiêu thụ mỗi ngày (1 đến 3 lít)
SCC Có theo dõi lượng calo tiêu thụ không (yes/no)
FAF Mức độ hoạt động thể chất mỗi tuần (0 đến 3 giờ hoặc hơn)
TUE Thời gian sử dụng thiết bị công nghệ mỗi ngày (giờ)
CALC Tần suất tiêu thụ đồ uống có cồn (no, Sometimes, Frequently, Always)
MTRANS Phương tiện di chuyển chính (Public_Transportation, Walking, etc.)
NObeyesdad Mức độ cân nặng (Normal, Overweight, Obesity Types…)

2.1.2 Cấu trúc bộ dữ liệu

  • Đầu tiên dùng lệnh str để xem tổng quan bộ dữ liệu
str(l)
## 'data.frame':    2111 obs. of  17 variables:
##  $ Gender                        : chr  "Female" "Female" "Male" "Male" ...
##  $ Age                           : int  21 21 23 27 22 29 23 22 24 22 ...
##  $ Height                        : num  1.62 1.52 1.8 1.8 1.78 1.62 1.5 1.64 1.78 1.72 ...
##  $ Weight                        : num  64 56 77 87 89.8 53 55 53 64 68 ...
##  $ family_history_with_overweight: chr  "yes" "yes" "yes" "no" ...
##  $ FAVC                          : chr  "no" "no" "no" "no" ...
##  $ FCVC                          : num  2 3 2 3 2 2 3 2 3 2 ...
##  $ NCP                           : num  3 3 3 3 1 3 3 3 3 3 ...
##  $ CAEC                          : chr  "Sometimes" "Sometimes" "Sometimes" "Sometimes" ...
##  $ SMOKE                         : chr  "no" "yes" "no" "no" ...
##  $ CH2O                          : num  2 3 2 2 2 2 2 2 2 2 ...
##  $ SCC                           : chr  "no" "yes" "no" "no" ...
##  $ FAF                           : num  0 3 2 2 0 0 1 3 1 1 ...
##  $ TUE                           : num  1 0 1 0 0 0 0 0 1 1 ...
##  $ CALC                          : chr  "no" "Sometimes" "Frequently" "Frequently" ...
##  $ MTRANS                        : chr  "Public_Transportation" "Public_Transportation" "Public_Transportation" "Walking" ...
##  $ NObeyesdad                    : chr  "Normal_Weight" "Normal_Weight" "Normal_Weight" "Overweight_Level_I" ...

Kết quả từ hàm str(l) cho thấy bộ dữ liệu là một data frame gồm 2.111 quan sát (observations) và 17 biến (variables). Các biến trong dữ liệu thuộc nhiều kiểu dữ liệu khác nhau, bao gồm:

  • chr (character): cho các biến dạng phân loại như Gender, family_history_with_overweight, FAVC, CAEC, SMOKE, CALC, MTRANS, NObeyesdad,…

  • int (integer): như biến Age, đại diện cho tuổi.

  • num (numeric): gồm các biến số thực như Height, Weight, FCVC, NCP, CH2O, FAF, TUE,…

Các biến dạng character chủ yếu mô tả đặc điểm phân loại hoặc hành vi của cá nhân, trong khi các biến numeric và integer cung cấp thông tin định lượng. Biến mục tiêu (NObeyesdad) là một biến phân loại thể hiện mức độ béo phì của mỗi cá nhân, được thể hiện dưới dạng chuỗi văn bản (chr).

Cấu trúc này phù hợp để áp dụng các phương pháp phân tích thống kê, mô hình học máy và trực quan hóa dữ liệu trong các bài toán phân loại.

  • Tiếp theo ta sẽ xem head và tail của bộ dữ liệu nhằm hiểu hơn về bộ dữ liệu này

Trước tiên với head(5)

head(l,5)
##   Gender Age Height Weight family_history_with_overweight FAVC FCVC NCP
## 1 Female  21   1.62   64.0                            yes   no    2   3
## 2 Female  21   1.52   56.0                            yes   no    3   3
## 3   Male  23   1.80   77.0                            yes   no    2   3
## 4   Male  27   1.80   87.0                             no   no    3   3
## 5   Male  22   1.78   89.8                             no   no    2   1
##        CAEC SMOKE CH2O SCC FAF TUE       CALC                MTRANS
## 1 Sometimes    no    2  no   0   1         no Public_Transportation
## 2 Sometimes   yes    3 yes   3   0  Sometimes Public_Transportation
## 3 Sometimes    no    2  no   2   1 Frequently Public_Transportation
## 4 Sometimes    no    2  no   2   0 Frequently               Walking
## 5 Sometimes    no    2  no   0   0  Sometimes Public_Transportation
##            NObeyesdad
## 1       Normal_Weight
## 2       Normal_Weight
## 3       Normal_Weight
## 4  Overweight_Level_I
## 5 Overweight_Level_II

Sau đó đi đến với tail(5)

tail(l,5)
##      Gender Age Height Weight family_history_with_overweight FAVC FCVC NCP
## 2107 Female  21   1.71 131.41                            yes  yes    3   3
## 2108 Female  22   1.75 133.74                            yes  yes    3   3
## 2109 Female  23   1.75 133.69                            yes  yes    3   3
## 2110 Female  24   1.74 133.35                            yes  yes    3   3
## 2111 Female  24   1.74 133.47                            yes  yes    3   3
##           CAEC SMOKE CH2O SCC  FAF   TUE      CALC                MTRANS
## 2107 Sometimes    no 1.73  no 1.68 0.906 Sometimes Public_Transportation
## 2108 Sometimes    no 2.01  no 1.34 0.599 Sometimes Public_Transportation
## 2109 Sometimes    no 2.05  no 1.41 0.646 Sometimes Public_Transportation
## 2110 Sometimes    no 2.85  no 1.14 0.586 Sometimes Public_Transportation
## 2111 Sometimes    no 2.86  no 1.03 0.714 Sometimes Public_Transportation
##            NObeyesdad
## 2107 Obesity_Type_III
## 2108 Obesity_Type_III
## 2109 Obesity_Type_III
## 2110 Obesity_Type_III
## 2111 Obesity_Type_III

2.2 Lựa chọn các biến định tính sử dụng cho việc phân tích

ldt <- c("Gender", 
         "family_history_with_overweight", 
         "FAVC", 
         "CAEC", 
         "SMOKE", 
         "SCC", 
         "CALC", 
         "MTRANS", 
         "NObeyesdad")
ldt
## [1] "Gender"                         "family_history_with_overweight"
## [3] "FAVC"                           "CAEC"                          
## [5] "SMOKE"                          "SCC"                           
## [7] "CALC"                           "MTRANS"                        
## [9] "NObeyesdad"

2.3 Kiểm tra xem có giá trị thiếu (NA) trong các cột định tính

colSums(is.na(l[ldt]))
##                         Gender family_history_with_overweight 
##                              0                              0 
##                           FAVC                           CAEC 
##                              0                              0 
##                          SMOKE                            SCC 
##                              0                              0 
##                           CALC                         MTRANS 
##                              0                              0 
##                     NObeyesdad 
##                              0

Sau khi lựa chọn các biến định tính từ bộ dữ liệu, bao gồm các thông tin như giới tính, tiền sử gia đình, thói quen ăn uống và mức độ béo phì, ta tiến hành kiểm tra sự thiếu dữ liệu (NA) trong các cột này. Kết quả cho thấy tất cả các biến định tính đều không có giá trị bị thiếu, đảm bảo độ đầy đủ và sẵn sàng cho các bước phân tích tiếp theo.

2.4 Chuyển đổi các biến cần thiết sang kiểu factor

sapply(l[ldt], is.factor)
##                         Gender family_history_with_overweight 
##                          FALSE                          FALSE 
##                           FAVC                           CAEC 
##                          FALSE                          FALSE 
##                          SMOKE                            SCC 
##                          FALSE                          FALSE 
##                           CALC                         MTRANS 
##                          FALSE                          FALSE 
##                     NObeyesdad 
##                          FALSE

Kết quả cho thấy tất cả các biến định tính đều chưa ở dạng factor, mà đang ở dạng chuỗi ký tự (character). Điều này là bình thường vì khi đọc dữ liệu từ file CSV, R mặc định sẽ coi các biến dạng phân loại là chuỗi. Việc chưa chuyển sang factor có thể ảnh hưởng đến việc xử lý thống kê hoặc vẽ biểu đồ sau này.

  for (col in ldt) {
  if (!is.factor(l[[col]])) {
    l[[col]] <- as.factor(l[[col]])
  }
}
sapply(l[ldt], is.factor)
##                         Gender family_history_with_overweight 
##                           TRUE                           TRUE 
##                           FAVC                           CAEC 
##                           TRUE                           TRUE 
##                          SMOKE                            SCC 
##                           TRUE                           TRUE 
##                           CALC                         MTRANS 
##                           TRUE                           TRUE 
##                     NObeyesdad 
##                           TRUE

Sau khi thực hiện chuyển đổi, toàn bộ các biến định tính đã được chuyển sang kiểu factor. Kết quả trả về là TRUE cho tất cả các biến, điều này đảm bảo rằng dữ liệu đã sẵn sàng cho các bước phân tích thống kê hoặc mô hình hóa sử dụng các phương pháp xử lý biến phân loại.

Phần 3: Phân tích Mô tả Một biến

Dựa trên kết quả nghiên cứu của Trần Thị Xuân Ngọc (2012) về các nguy cơ liên quan đến thừa cân, béo phì của học sinh cũng như bài báo “Changes in diet and lifestyle and long-term weight gain in women and men” của Dariush Mozaffarian và cộng sự (2011) em đề xuất mô hình gồm 4 biến định tính và 1 biến định lượng quan trọng để phân tích, tìm hiểu sâu về nó. Bao gồm:

  • family_history_with_overweight

  • FAVC

  • SCC

  • NCP

  • NObeyesdad

3.1 Biến family_history_with_overweight (Có người thân bị thừa cân/béo phì không)

  • Bảng tần số
table(l$family_history_with_overweight)
## 
##   no  yes 
##  385 1726

Kết quả bảng tần số cho thấy có 1.726 người (chiếm phần lớn) trong dữ liệu có tiền sử gia đình bị thừa cân hoặc béo phì, trong khi chỉ có 385 người không có. Điều này cho thấy yếu tố di truyền có thể đóng vai trò đáng kể trong việc ảnh hưởng đến nguy cơ béo phì, và là một biến quan trọng cần được xem xét trong phân tích tiếp theo.

  • Bảng tần suất
l1 <- table(l$family_history_with_overweight)/sum(nrow(l))
table(l$family_history_with_overweight)/sum(nrow(l))
## 
##       no      yes 
## 0.182378 0.817622

Từ bảng tần suất, ta thấy khoảng 81.76% số người trong tập dữ liệu có tiền sử gia đình thừa cân, trong khi chỉ khoảng 18.24% không có. Điều này cho thấy phần lớn người tham gia khảo sát có yếu tố gia đình liên quan đến béo phì, gợi ý rằng đây là một yếu tố nguy cơ phổ biến và đáng chú ý trong các phân tích tiếp theo.

  • Trực quan hóa
library(ggplot2)
library(tidyverse)
library(scales)
l1_df <- as.data.frame(l1)
names(l1_df) <- c("family_history_with_overweight", "Tansuat")
ggplot(l1_df, aes(x = "", y = Tansuat, fill = family_history_with_overweight)) +
  geom_col(width = 1, color = "black") +
  coord_polar(theta = "y") +
  scale_fill_manual(values = c("no" = "#00C49A", "yes" = "#FF6384")) +
  labs(title = "Biểu đồ tần suất có người thân bị thừa cân/béo phì không ") +
  theme_void() +  
  geom_text(aes(label = paste0(round(Tansuat,6), "%")), 
            position = position_stack(vjust = 0.3),
            color = "white", size = 4)

Biểu đồ tròn thể hiện tần suất của biến family_history_with_overweight cho thấy rằng phần lớn cá nhân trong tập dữ liệu (khoảng 81.76%) có người thân bị thừa cân hoặc béo phì, trong khi chỉ có khoảng 18.24% không có. Sự chênh lệch đáng kể này cho thấy yếu tố di truyền là một đặc điểm phổ biến và có thể đóng vai trò quan trọng trong nguy cơ béo phì, từ đó làm nổi bật tính cần thiết của việc phân tích sâu hơn về mối liên hệ giữa tiền sử gia đình và tình trạng sức khỏe.

3.2 Biến FAVC (Có thường ăn thức ăn giàu calo không)

  • Bảng tần số
table(l$FAVC)
## 
##   no  yes 
##  245 1866

Kết quả bảng tần số cho thấy có 1.866 người (chiếm phần lớn) trong tập dữ liệu thường xuyên tiêu thụ thức ăn giàu calo (FAVC = yes), trong khi chỉ có 245 người không tiêu thụ (FAVC = no). Điều này cho thấy thói quen ăn uống giàu năng lượng khá phổ biến trong nhóm khảo sát, và đây có thể là một yếu tố nguy cơ quan trọng dẫn đến thừa cân hoặc béo phì.

  • Bảng tần suất
l2 <- table(l$FAVC)/sum(nrow(l))
table(l$FAVC)/sum(nrow(l))
## 
##        no       yes 
## 0.1160587 0.8839413

Tỷ lệ tần suất cho thấy có đến 88.39% người tham gia khảo sát thường xuyên tiêu thụ thức ăn giàu calo, trong khi chỉ có 11.61% không có thói quen này. Điều này phản ánh một thực trạng đáng chú ý về thói quen ăn uống không lành mạnh, có thể góp phần làm gia tăng nguy cơ thừa cân và béo phì trong cộng đồng được khảo sát.

  • Trực quan hóa
l2_df <- as.data.frame(l2)
names(l2_df) <- c("FAVC", "Tansuat")
ggplot(l2_df, aes(x = FAVC, y = Tansuat, fill = FAVC)) +
  geom_col(width = 0.6) +
  geom_text(aes(label = round(Tansuat, 3)), vjust = -0.2, size = 5) +  
  scale_y_continuous(labels = scales::percent_format(accuracy = 1)) +  
  scale_fill_manual(values = c("no" = "#9966FF", "yes" = "#4BC0C0")) +  
  labs(
    title = "Biểu đồ tần suất FAVC ",
    x = "Ăn nhiều đồ calo",
    y = "Tần suất (%)"
  ) +
  theme_minimal(base_size = 14)

Biểu đồ cho thấy phần lớn người trong tập dữ liệu (khoảng 88.4%) có thói quen ăn nhiều đồ ăn giàu calo, trong khi chỉ khoảng 11.6% không có thói quen này. Đây là một kết quả đáng lưu ý, vì thói quen tiêu thụ thực phẩm nhiều calo là một trong những yếu tố nguy cơ phổ biến dẫn đến tình trạng thừa cân hoặc béo phì. Sự chênh lệch rõ rệt này cho thấy đây là một đặc điểm quan trọng cần được xem xét kỹ trong các phân tích tiếp theo.

3.3 Biến SCC (Có theo dõi lượng calo tiêu thụ không)

  • Bảng tần số
table(l$SCC)
## 
##   no  yes 
## 2015   96

Phân tích biến SCC cho thấy phần lớn người tham gia khảo sát không có thói quen kiểm soát lượng calo tiêu thụ khi ăn vặt giữa các bữa, với 2.015 người thuộc nhóm “no”, chiếm tỷ lệ áp đảo trong tổng số mẫu. Trong khi đó, chỉ có 96 người (khoảng 4.5%) cho biết có thực hiện việc kiểm soát calo (“yes”). Điều này cho thấy hành vi tự giám sát calo khi ăn vặt vẫn chưa phổ biến trong cộng đồng khảo sát, dù đây là một yếu tố có thể đóng vai trò quan trọng trong việc kiểm soát cân nặng và nguy cơ béo phì. Sự mất cân đối lớn giữa hai nhóm cũng cần được cân nhắc khi đưa biến này vào các mô hình phân tích định lượng, đặc biệt là các mô hình nhạy với dữ liệu không cân bằng như cloglog.

  • Bảng tần suất
l3 <- table(l$SCC)/sum(nrow(l))
table(l$SCC)/sum(nrow(l))
## 
##         no        yes 
## 0.95452392 0.04547608

Kết quả phân tích biến SCC (thói quen kiểm soát calo khi ăn vặt) cho thấy tỷ lệ người không thực hiện kiểm soát calo chiếm phần lớn, với 95.45% số người khảo sát thuộc nhóm “no”. Ngược lại, chỉ có khoảng 4.55% người trả lời “yes”, tức có kiểm soát lượng calo khi ăn vặt giữa các bữa. Điều này phản ánh rằng việc chủ động theo dõi hoặc kiểm soát lượng calo nạp vào khi ăn vặt vẫn còn là hành vi hiếm gặp trong cộng đồng khảo sát. Thực tế này cần được lưu ý khi đánh giá vai trò của hành vi kiểm soát calo đối với nguy cơ thừa cân và béo phì, đặc biệt trong bối cảnh các mô hình phân tích có thể bị ảnh hưởng bởi sự chênh lệch lớn giữa các nhóm.

  • Trực quan hóa
library(ggplot2)
library(tidyverse)
library(scales)
l3_df <- as.data.frame(l3)
names(l3_df) <- c("SCC", "Tansuat")
ggplot(l3_df, aes(x = "", y = Tansuat, fill = SCC)) +
  geom_col(width = 1, color = "black") +
  coord_polar(theta = "y") +
  scale_fill_manual(values = c("no" = "#00C49A", "yes" = "#FF6384", "Frequently" = "purple", "Sometimes"= "orange")) +
  labs(title = "Biểu đồ tần suất theo dõi calo") +
  theme_void() +  
  geom_text(aes(label = paste0(round(Tansuat,3), "%")), 
            position = position_stack(vjust = 0.35),
            color = "white", size = 4)

Dựa trên biểu đồ tròn mô tả tần suất theo dõi calo từ biến SCC, ta nhận thấy sự chênh lệch rõ rệt giữa hai nhóm. Cụ thể, 95.5% người tham gia khảo sát không theo dõi lượng calo tiêu thụ khi ăn uống, trong khi chỉ có 4.5% thực hiện hành vi này. Điều này cho thấy việc kiểm soát calo chưa phải là một thói quen phổ biến trong cộng đồng được khảo sát.

Sự mất cân đối này là một yếu tố quan trọng cần lưu ý trong các phân tích về thói quen ăn uống và nguy cơ béo phì, bởi nó có thể ảnh hưởng đến độ chính xác và ý nghĩa thống kê của các mô hình hồi quy. Việc khuyến khích người dân theo dõi lượng calo nạp vào là điều cần thiết nhằm nâng cao nhận thức về dinh dưỡng và phòng ngừa thừa cân, béo phì trong cộng đồng.

3.4 Biến NObeyesdad (Mức độ cân nặng)

  • Bảng tần số
table(l$NObeyesdad)
## 
## Insufficient_Weight       Normal_Weight      Obesity_Type_I     Obesity_Type_II 
##                 272                 287                 351                 297 
##    Obesity_Type_III  Overweight_Level_I Overweight_Level_II 
##                 324                 290                 290

Biến NObeyesdad phản ánh tình trạng cân nặng của người tham gia khảo sát với sự phân bố tương đối đồng đều giữa các nhóm, tuy nhiên nhóm Obesity_Type_I chiếm tỷ lệ cao nhất (351 người), cho thấy béo phì độ I là tình trạng phổ biến nhất. Các nhóm Obesity_Type_II (297 người) và Obesity_Type_III (324 người) cũng chiếm tỷ lệ đáng kể, trong khi nhóm Normal_Weight và hai nhóm thừa cân (Overweight_Level_I và Overweight_Level_II) dao động quanh mức 287–290 người. Nhóm có tỷ lệ thấp nhất là Insufficient_Weight với 272 người. Nhìn chung, dữ liệu cho thấy phần lớn người tham gia có tình trạng cân nặng từ thừa cân đến béo phì, điều này gợi ý mối liên hệ tiềm năng giữa cân nặng và các yếu tố khác cần được phân tích sâu hơn.

  • Bảng tần suất
l5 <- table(l$NObeyesdad)/sum(nrow(l))
table(l$NObeyesdad)/sum(nrow(l))
## 
## Insufficient_Weight       Normal_Weight      Obesity_Type_I     Obesity_Type_II 
##           0.1288489           0.1359545           0.1662719           0.1406916 
##    Obesity_Type_III  Overweight_Level_I Overweight_Level_II 
##           0.1534818           0.1373757           0.1373757

Dựa trên bảng tần suất, ta thấy rằng biến NObeyesdad – thể hiện tình trạng cân nặng – có sự phân bố khá đồng đều giữa các nhóm. Nhóm Obesity_Type_I chiếm tỷ lệ cao nhất với khoảng 16.63%, tiếp theo là Obesity_Type_III (15.35%) và Obesity_Type_II (14.07%), cho thấy rằng các mức độ béo phì là phổ biến trong tập dữ liệu. Hai nhóm Overweight_Level_I và Overweight_Level_II cùng chiếm 13.74%, phản ánh một tỷ lệ đáng kể những người đang ở mức thừa cân. Nhóm Normal_Weight chiếm 13.60%, trong khi nhóm Insufficient_Weight chiếm thấp nhất với 12.88%. Từ đó có thể thấy, phần lớn người tham gia khảo sát đang đối mặt với vấn đề cân nặng vượt mức bình thường, điều này gợi ý rằng các yếu tố liên quan đến béo phì có thể đóng vai trò quan trọng trong phân tích tiếp theo.

  • Trực quan hóa
l5_df <- as.data.frame(l5)
names(l5_df) <- c("NObeyesdad", "Tansuat")
ggplot(l5_df, aes(x = NObeyesdad, y = round(Tansuat, 3), fill = NObeyesdad)) +
  geom_bar(stat = "identity", color = "black", width = 0.7) +
  geom_text(aes(label = round(Tansuat, 3)), vjust = -0.3, size = 4) +
  labs(
    title = "Biểu đồ tỷ lệ mức độ cân nặng",
    x = "Mức độ cân nặng",
    y = "Tần suất (%)"
  ) +
  theme_minimal() +
  theme(
    axis.text.x = element_text(angle = 45, hjust = 1), 
    plot.title = element_text(hjust = 0.5, face = "bold")
  )

Biểu đồ cột trên thể hiện tỷ lệ phần trăm các mức độ béo phì (obesity) trong tập dữ liệu thông qua biến NObeyesdad. Kết quả cho thấy nhóm chiếm tỷ lệ cao nhất là Obesity_Type_I với khoảng 16.6%, tiếp theo là Obesity_Type_III (15.3%) và Obesity_Type_II (14.1%). Các nhóm thừa cân nhẹ như Overweight_Level_I và Overweight_Level_II có tỷ lệ ngang bằng nhau (khoảng 13.7%), trong khi Normal_Weight chiếm 13.6%. Đáng chú ý, nhóm Insufficient_Weight (thiếu cân) có tỷ lệ thấp nhất với 12.9%. Nhìn chung, phần lớn mẫu nghiên cứu nằm trong các nhóm từ thừa cân đến béo phì, phản ánh xu hướng thừa cân là phổ biến hơn so với nhóm cân nặng bình thường hoặc thiếu cân. Phát hiện này cho thấy cần đặc biệt quan tâm đến các vấn đề sức khỏe liên quan đến thừa cân và béo phì trong cộng đồng.

3.5 Biến NCP (Số lượng bữa ăn chính trong ngày)

  • Bảng thống kê mô tả
library(skimr)
library(dplyr)
library(kableExtra)
## 
## Attaching package: 'kableExtra'
## The following object is masked from 'package:dplyr':
## 
##     group_rows
# Tạo bảng skimr cho biến NCP trong dataset l
skim_ncp <- skim(l %>% select(NCP))

# Hiển thị bảng
skim_ncp %>%
  kable(caption = "<b style='display:block; text-align:center;'>Bảng: Thống kê mô tả biến NCP</b>",
        escape = FALSE, align = "c") %>%
  kable_styling(position = "center", font_size = 13,
                full_width = FALSE, bootstrap_options = c("striped", "hover"))
Bảng: Thống kê mô tả biến NCP
skim_type skim_variable n_missing complete_rate numeric.mean numeric.sd numeric.p0 numeric.p25 numeric.p50 numeric.p75 numeric.p100 numeric.hist
numeric NCP 0 1 2.685651 0.7780788 1 2.66 3 3 4 ▂▁▁▇▁

Dữ liệu cho thấy số lượng bữa ăn chính mỗi ngày của các cá nhân trong mẫu dao động từ 1 đến 4 bữa, với giá trị trung bình là khoảng 2.69 bữa/ngày và độ lệch chuẩn là 0.78. Phân vị thứ 25, 50 và 75 lần lượt là 2, 3 và 3 cho thấy phần lớn người tham gia khảo sát có thói quen ăn từ 2 đến 3 bữa/ngày, trong đó 3 bữa là phổ biến nhất. Biểu đồ mini trong bảng cũng xác nhận xu hướng phân phối lệch trái, tập trung cao quanh mức 3 bữa.

  • Trục quan hoá
hist(l$NCP, col = "lightblue", main = "Phân bố số bữa ăn chính mỗi ngày", xlab = "Số bữa ăn chính")

Biểu đồ cho thấy phần lớn người tham gia khảo sát ăn 3 bữa chính mỗi ngày, với tần suất vượt trội so với các mức còn lại. Số người ăn 1 bữa/ngày cũng chiếm tỷ lệ khá đáng kể, trong khi các giá trị như 1.5, 2.5, 3.5 chỉ xuất hiện rải rác với tần suất rất thấp. Điều này cho thấy thói quen ăn 3 bữa/ngày vẫn là phổ biến nhất, trong khi việc ăn ít hơn hoặc nhiều hơn là không thường xuyên.

Phần 4: Ước lượng khoảng và kiểm định giả thiết cho tỷ lệ (Một biến)

4.1: Xác định hạng mục quan tâm

Ta chọn 2 hạng mục từ 2 biến của danh sách các biến định tính trên, bao gồm:

Hạng mục “yes” của biến family_history_with_overweight - Có người thân bị thừa cân/béo phì không

Hạng mục “Obesity_Type_I” của biến NObeyesdad - Mức độ cân nặng

4.2 Ước lượng Khoảng Tin cậy và Kiểm định Giả thuyết của từng hạng mục

Hạng mục “yes” của biến family_history_with_overweight

prop.test(sum(l$family_history_with_overweight == "yes"), nrow(l), p = 0.5, conf.level = 0.95)
## 
##  1-sample proportions test with continuity correction
## 
## data:  sum(l$family_history_with_overweight == "yes") out of nrow(l), null probability 0.5
## X-squared = 850.59, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
##  0.8003324 0.8337411
## sample estimates:
##        p 
## 0.817622

Giả thiết kiểm định

  • H₀: p = 0.5 (Tỷ lệ người có người thân bị thừa cân/béo phì là 50%)

  • H₁: p ≠ 0.5 (Tỷ lệ người có người thân bị thừa cân/béo phì khác 50%)

Dựa trên kết quả kiểm định, ta thu được giá trị p-value rất nhỏ, cụ thể là p-value < 2.2e-16, nhỏ hơn mức ý nghĩa 5%. Do đó, ta bác bỏ giả thuyết H₀ (tỷ lệ người có người thân bị thừa cân/béo phì là 50%) và chấp nhận giả thuyết đối H₁ rằng tỷ lệ này khác 50%. Tỷ lệ ước lượng trong mẫu là 81.76% (p = 0.817622), nghĩa là có tới hơn 80% người tham gia khảo sát có người thân từng bị thừa cân hoặc béo phì. Khoảng tin cậy 95% cho tỷ lệ này nằm trong khoảng từ 80.03% đến 83.37%, cho thấy sự khác biệt giữa tỷ lệ thực tế và tỷ lệ giả định là có ý nghĩa thống kê. Kết quả này phản ánh rằng yếu tố tiền sử gia đình có liên quan đáng kể đến tình trạng thừa cân/béo phì, và cần được xem xét kỹ hơn trong các phân tích tiếp theo.

Hạng mục “Obesity_Type_I” của biến NObeyesdad

prop.test(sum(l$NObeyesdad == "Obesity_Type_I"), nrow(l), p = 0.8, conf.level = 0.95)
## 
##  1-sample proportions test with continuity correction
## 
## data:  sum(l$NObeyesdad == "Obesity_Type_I") out of nrow(l), null probability 0.8
## X-squared = 5294.8, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is not equal to 0.8
## 95 percent confidence interval:
##  0.1507708 0.1830034
## sample estimates:
##         p 
## 0.1662719

Giả thiết kiểm định

  • H₀: p = 0.8 (80% người tham gia khảo sát thuộc nhóm béo phì mức độ I – Obesity Type I).

  • H₁: p ≠ 0.8 (Tỷ lệ người thuộc nhóm béo phì mức độ I khác 80%).

Kết quả kiểm định tỷ lệ một mẫu cho thấy p-value < 2.2e-16, nhỏ hơn mức ý nghĩa 5%, do đó ta bác bỏ giả thuyết H₀. Điều này cho thấy tỷ lệ thực tế người thuộc nhóm Obesity Type I khác 80%. Cụ thể, tỷ lệ ước lượng trong mẫu là 16.63% (p = 0.1662719), thấp hơn rất nhiều so với tỷ lệ giả thuyết. Khoảng tin cậy 95% cho tỷ lệ thực nằm trong khoảng [15.08%; 18.30%], cho thấy sự khác biệt là có ý nghĩa thống kê. Như vậy, không có bằng chứng để khẳng định 80% người khảo sát rơi vào nhóm béo phì mức độ I, mà thực tế chỉ khoảng một phần sáu người thuộc nhóm này. Điều này cho thấy sự phân bố mức độ béo phì đa dạng hơn và cần được phân tích thêm trong các phần sau.

Phần 5: Phân tích Mối quan hệ giữa Hai biến Định tính (Bivariate Analysis)

Trong phần này, tập trung phân tích mối quan hệ giữa biến phụ thuộc là NObeyesdad – đại diện cho tình trạng cân nặng của người tham gia khảo sát – với ba biến độc lập định tính gồm: FAVC (thói quen tiêu thụ thức ăn giàu calo), SCC (Có theo dõi lượng calo tiêu thụ không) và family_history_with_overweight (Có người thân bị thừa cân/béo phì không). Mục tiêu là đánh giá xem liệu các hành vi liên quan đến chế độ ăn uống và tiêu thụ năng lượng này có mối liên hệ thống kê đáng kể nào với tình trạng cân nặng hay không. Việc xác định mối quan hệ giữa các biến độc lập và biến phụ thuộc sẽ giúp làm rõ hơn các yếu tố nguy cơ có thể góp phần dẫn đến thừa cân hoặc béo phì.

5.1 Cặp biến NObeyesdad và FAVC

Lý do chọn cặp: Liệu thói quen tiêu thụ thức ăn giàu calo (FAVC) có liên quan đến tình trạng cân nặng (NObeyesdad) của người tham gia khảo sát hay không? Đây là câu hỏi nghiên cứu được đặt ra nhằm kiểm tra xem hành vi ăn uống này có thể là một yếu tố nguy cơ dẫn đến thừa cân hoặc béo phì.

5.1.1 Bảng tần số và tần suất chéo

Sau đây là bảng tần số chéo giữa NObeyesdad và FAVC, giúp quan sát sự phân bố tình trạng cân nặng theo thói quen ăn nhiều đồ calo. Đây là bước đầu để xem xét mối liên hệ giữa hai biến này.

tab1 <- table(l$NObeyesdad, l$FAVC)
tab1
##                      
##                        no yes
##   Insufficient_Weight  51 221
##   Normal_Weight        79 208
##   Obesity_Type_I       11 340
##   Obesity_Type_II       7 290
##   Obesity_Type_III      1 323
##   Overweight_Level_I   22 268
##   Overweight_Level_II  74 216

Bảng tần số cho thấy phần lớn người trong nhóm béo phì (đặc biệt là Obesity_Type_I, II, III và Overweight) có xu hướng trả lời “yes” cho biến FAVC – tức là thường xuyên ăn nhiều đồ ăn có hàm lượng calo cao. Ngược lại, trong các nhóm Insufficient_Weight và Normal_Weight, số lượng người trả lời “no” cao hơn tương đối. Điều này bước đầu cho thấy khả năng tồn tại mối liên hệ giữa thói quen ăn uống giàu calo và tình trạng thừa cân, béo phì.

# Chuyển bảng chéo thành data frame
df_freq <- as.data.frame(tab1)

# Biểu đồ cột nhóm theo tần số
library(ggplot2)

ggplot(df_freq, aes(x = Var1, y = Freq, fill = Var2)) +
  geom_col(position = "dodge", color = "black") +
  geom_text(aes(label = Freq),
            position = position_dodge(width = 0.9),
            vjust = -0.3, size = 3.5) +
  labs(
    title = "Biểu đồ tần số theo mức độ béo phì và thói quen ăn nhiều đồ calo",
    x = "Mức độ cân nặng",
    y = "Tần số",
    fill = "FAVC"
  ) +
  theme_minimal() +
  theme(
    axis.text.x = element_text(angle = 30, hjust = 1),
    plot.title = element_text(hjust = 0.5, face = "bold")
  )

Biểu đồ tần số minh họa rõ xu hướng gia tăng số người có thói quen ăn nhiều đồ calo (FAVC = “yes”) tương ứng với mức độ thừa cân và béo phì. Ở các nhóm Obesity_Type_I, II, III, số lượng người trả lời “yes” vượt trội so với “no”, với khoảng cách rất lớn, đặc biệt nhóm Obesity_Type_III chỉ ghi nhận 1 người “no” so với 323 người “yes”. Trong khi đó, nhóm có cân nặng bình thường (Normal_Weight) và thiếu cân (Insufficient_Weight) vẫn có tỷ lệ “yes” cao nhưng khoảng cách giữa hai nhóm FAVC là nhỏ hơn. Điều này củng cố thêm nhận định rằng việc ăn nhiều đồ calo có thể là yếu tố góp phần làm gia tăng nguy cơ béo phì.

prop1 <- prop.table(tab1, margin = 1) * 100

# Hiển thị bảng
round(prop1, 2)
##                      
##                          no   yes
##   Insufficient_Weight 18.75 81.25
##   Normal_Weight       27.53 72.47
##   Obesity_Type_I       3.13 96.87
##   Obesity_Type_II      2.36 97.64
##   Obesity_Type_III     0.31 99.69
##   Overweight_Level_I   7.59 92.41
##   Overweight_Level_II 25.52 74.48

Bảng tần suất cho thấy tỷ lệ trả lời “yes” đối với biến FAVC (ăn nhiều đồ ăn calo cao) tăng rõ rệt ở các nhóm có mức độ thừa cân và béo phì. Cụ thể, các nhóm Obesity_Type_I, II và III có tỷ lệ “yes” lần lượt là 96.87%, 97.64% và 99.69%, cao vượt trội so với các nhóm có cân nặng bình thường như Normal_Weight (72.47%) hay Insufficient_Weight (81.25%). Trong khi đó, nhóm Overweight_Level_I và II cũng có tỷ lệ “yes” tương đối cao, lần lượt là 92.41% và 74.48%. Điều này củng cố giả thiết rằng có mối liên hệ giữa việc thường xuyên tiêu thụ thực phẩm nhiều calo và tình trạng béo phì.

df_prop1 <- as.data.frame(prop1)
colnames(df_prop1) <- c("NObeyesdad", "FAVC", "Percent")

# Vẽ biểu đồ tần suất
library(ggplot2)
ggplot(df_prop1, aes(x = NObeyesdad, y = Percent, fill = FAVC)) +
  geom_col(position = "dodge", color = "black") +
  geom_text(aes(label = round(Percent, 1)),
            position = position_dodge(width = 0.9),
            vjust = -0.3, size = 3.5) +
  labs(
    title = "Biểu đồ tần suất (%) theo mức độ cân nặng và thói quen ăn nhiều đồ calo",
    x = "Mức độ cân nặng",
    y = "Tần suất (%)",
    fill = "FAVC"
  ) +
  theme_minimal() +
  theme(
    axis.text.x = element_text(angle = 30, hjust = 1),
    plot.title = element_text(hjust = 0.5, face = "bold")
  )

Biểu đồ cho thấy có sự khác biệt rõ rệt trong thói quen ăn nhiều đồ calo giữa các nhóm cân nặng. Ở các nhóm béo phì và thừa cân, tỷ lệ người trả lời “yes” (có thói quen ăn nhiều đồ calo) chiếm ưu thế áp đảo. Cụ thể, nhóm Obesity_Type_III có đến 99.7% người ăn nhiều đồ calo, theo sau là Obesity_Type_II (97.6%), Obesity_Type_I (96.9%), và các nhóm thừa cân như Overweight_Level_I (92.4%) và Overweight_Level_II (74.5%) cũng có tỷ lệ cao. Trong khi đó, nhóm Normal_Weight và Insufficient_Weight có tỷ lệ thấp hơn đáng kể, lần lượt là 72.5% và 81.2%, và đặc biệt nhóm trả lời “no” trong hai mức cân nặng này lần lượt là 27.5% và 18.8%, cao hơn nhiều so với các nhóm béo phì.

Những con số này cho thấy một xu hướng rất rõ ràng: càng thừa cân hoặc béo phì thì khả năng có thói quen ăn nhiều đồ calo càng cao. Ngược lại, người có cân nặng bình thường hoặc thiếu cân thì tỷ lệ này giảm xuống, và khả năng không có thói quen ăn nhiều đồ calo lại tăng lên. Điều này gợi ý mối liên hệ tiềm năng giữa thói quen ăn uống và tình trạng cân nặng, đồng thời củng cố giả thuyết rằng việc tiêu thụ thực phẩm giàu calo là yếu tố góp phần lớn vào tình trạng béo phì.

5.1.2 Phân tích Relative Risk giữa mức độ cân nặng và thói quen ăn nhiều đồ calo

library(epitools)
riskratio(tab1)
## $data
##                      
##                        no  yes Total
##   Insufficient_Weight  51  221   272
##   Normal_Weight        79  208   287
##   Obesity_Type_I       11  340   351
##   Obesity_Type_II       7  290   297
##   Obesity_Type_III      1  323   324
##   Overweight_Level_I   22  268   290
##   Overweight_Level_II  74  216   290
##   Total               245 1866  2111
## 
## $measure
##                      risk ratio with 95% C.I.
##                        estimate     lower    upper
##   Insufficient_Weight 1.0000000        NA       NA
##   Normal_Weight       0.8919861 0.8141229 0.977296
##   Obesity_Type_I      1.1921981 1.1226462 1.266059
##   Obesity_Type_II     1.2017612 1.1320468 1.275769
##   Obesity_Type_III    1.2269706 1.1585145 1.299472
##   Overweight_Level_I  1.1374005 1.0648320 1.214915
##   Overweight_Level_II 0.9167109 0.8392343 1.001340
## 
## $p.value
##                      two-sided
##                         midp.exact fisher.exact   chi.square
##   Insufficient_Weight           NA           NA           NA
##   Normal_Weight       1.429231e-02 1.615376e-02 1.409230e-02
##   Obesity_Type_I      7.033307e-11 7.384363e-11 1.063126e-10
##   Obesity_Type_II     2.197753e-11 3.884657e-11 1.075925e-10
##   Obesity_Type_III    0.000000e+00 7.995071e-18 1.919689e-15
##   Overweight_Level_I  8.165412e-05 8.714015e-05 8.350229e-05
##   Overweight_Level_II 5.464349e-02 5.479954e-02 5.387693e-02
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"

Kết quả phân tích Relative Risk (RR) giúp xác định mức độ liên quan giữa từng nhóm cân nặng với khả năng có thói quen ăn nhiều đồ calo. Trong đó, nhóm “Insufficient_Weight” được dùng làm nhóm tham chiếu (RR = 1). So sánh với nhóm tham chiếu, các nhóm béo phì có nguy cơ cao hơn đáng kể.

Cụ thể, nhóm Obesity_Type_I có RR = 1.19, tức là khả năng có thói quen ăn nhiều đồ calo cao hơn 19% so với nhóm thiếu cân. Nhóm Obesity_Type_II có RR = 1.20, và nhóm Obesity_Type_III có RR = 1.23 – đây là mức cao nhất, cho thấy người thuộc nhóm này có nguy cơ cao hơn 23% trong việc duy trì thói quen ăn nhiều calo so với nhóm thiếu cân. Tất cả các RR này đều có khoảng tin cậy 95% không chứa giá trị 1, cho thấy sự khác biệt có ý nghĩa thống kê.

Ngoài ra, nhóm Overweight_Level_I cũng có RR = 1.14, trong khi nhóm Normal_Weight và Overweight_Level_II có RR lần lượt là 0.89 và 0.92, thấp hơn 1 – điều này cho thấy họ ít khả năng ăn nhiều calo hơn nhóm thiếu cân. Tuy nhiên, RR của Overweight_Level_II có khoảng tin cậy (0.839–1.001) gần chạm 1 nên sự khác biệt này có thể chưa thật sự chắc chắn về mặt thống kê.

Nhìn chung, phân tích RR cho thấy có mối liên hệ rõ ràng giữa mức độ béo phì và thói quen tiêu thụ nhiều đồ calo, đặc biệt là ở các nhóm béo phì loại I, II và III. Điều này hỗ trợ giả định rằng thói quen ăn uống có thể là một yếu tố nguy cơ góp phần vào tình trạng thừa cân, béo phì.

5.1.3 Phân tích odds ratio giữa mức độ cân nặng và thói quen ăn nhiều đồ calo

oddsratio(tab1)
## $data
##                      
##                        no  yes Total
##   Insufficient_Weight  51  221   272
##   Normal_Weight        79  208   287
##   Obesity_Type_I       11  340   351
##   Obesity_Type_II       7  290   297
##   Obesity_Type_III      1  323   324
##   Overweight_Level_I   22  268   290
##   Overweight_Level_II  74  216   290
##   Total               245 1866  2111
## 
## $measure
##                      odds ratio with 95% C.I.
##                         estimate      lower        upper
##   Insufficient_Weight  1.0000000         NA           NA
##   Normal_Weight        0.6086839  0.4060656    0.9059708
##   Obesity_Type_I       7.0346161  3.7139634   14.5652385
##   Obesity_Type_II      9.3496478  4.4261302   23.1599125
##   Obesity_Type_III    65.0290523 14.3119209 1521.5330999
##   Overweight_Level_I   2.7955507  1.6619723    4.8469780
##   Overweight_Level_II  0.6746041  0.4487410    1.0078318
## 
## $p.value
##                      two-sided
##                         midp.exact fisher.exact   chi.square
##   Insufficient_Weight           NA           NA           NA
##   Normal_Weight       1.429231e-02 1.615376e-02 1.409230e-02
##   Obesity_Type_I      7.033307e-11 7.384363e-11 1.063126e-10
##   Obesity_Type_II     2.197753e-11 3.884657e-11 1.075925e-10
##   Obesity_Type_III    0.000000e+00 7.995071e-18 1.919689e-15
##   Overweight_Level_I  8.165412e-05 8.714015e-05 8.350229e-05
##   Overweight_Level_II 5.464349e-02 5.479954e-02 5.387693e-02
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"

Phân tích odds ratio cho thấy sự khác biệt rất lớn giữa các nhóm cân nặng về thói quen ăn nhiều đồ calo. Nếu lấy nhóm thiếu cân (Insufficient_Weight) làm chuẩn so sánh, thì tỷ lệ người béo phì độ III ăn nhiều đồ calo trên người béo phì độ III không ăn nhiều calo cao hơn 65 lần so với tỷ lệ người thiếu cân có ăn nhiều calo trên người thiếu cân không ăn. Nhóm béo phì độ II cũng có tỷ lệ này cao hơn khoảng 9,35 lần, và béo phì độ I là 7,03 lần. Điều này cho thấy khi mức độ béo phì tăng thì xu hướng ăn nhiều calo cũng tăng rõ rệt. Ở chiều ngược lại, nhóm cân nặng bình thường (Normal_Weight) lại có odds thấp hơn nhóm thiếu cân, với tỷ lệ người ăn nhiều calo trên không ăn chỉ bằng 0,61 lần, tức là còn thấp hơn cả nhóm chuẩn. Các kết quả này phản ánh rõ rằng thói quen ăn nhiều thực phẩm calo cao có mối liên hệ mạnh với tình trạng béo phì, và mức độ này tăng dần theo cấp độ thừa cân.

5.1.4 Hiệu tỉ lệ

Sau khi phân tích mức độ rủi ro tương đối (RR) và odds ratio (OR) giữa các nhóm cân nặng (NObeyesdad) đối với hành vi ăn nhiều đồ calo (FAVC), ta tiếp tục xem xét hiệu tỷ lệ nhằm đo lường mức chênh lệch tuyệt đối trong tỉ lệ hành vi này giữa các nhóm. Việc này giúp làm rõ mức độ khác biệt thực tế trong tỉ lệ ăn nhiều đồ calo giữa nhóm thừa cân và nhóm thiếu cân.

success <- c(tab1["Insufficient_Weight", "yes"], tab1["Obesity_Type_III", "yes"])

# Lấy tổng số người ở 2 nhóm đó
n <- c(sum(tab1["Insufficient_Weight", ]), sum(tab1["Obesity_Type_III", ]))

# Kiểm định hiệu tỷ lệ một phía: p2 > p1
prop.test(success, n, alternative = "less", correct = FALSE)
## 
##  2-sample test for equality of proportions without continuity correction
## 
## data:  success out of n
## X-squared = 63.146, df = 1, p-value = 9.598e-16
## alternative hypothesis: less
## 95 percent confidence interval:
##  -1.0000000 -0.1451576
## sample estimates:
##    prop 1    prop 2 
## 0.8125000 0.9969136
  • H₀: Tỷ lệ ăn nhiều đồ calo ở hai nhóm Insufficient_Weight và Obesity_Type_III bằng nhau.

  • H₁: Tỷ lệ ăn nhiều đồ calo ở nhóm Obesity_Type_III cao hơn so với nhóm Insufficient_Weight.

Kết quả kiểm định cho thấy tỷ lệ ăn nhiều đồ calo ở nhóm Insufficient_Weight là khoảng 81.25%, trong khi ở nhóm Obesity_Type_III gần như tuyệt đối, đạt 99.69%. Hiệu tỉ lệ giữa hai nhóm là khoảng 18.44 điểm phần trăm. Kiểm định chi bình phương hai tỷ lệ độc lập (không hiệu chỉnh) cho kết quả X² = 63.15, với p-value ≈ 9.6e-16, nhỏ hơn rất nhiều so với mức ý nghĩa 0.05. Vì vậy, ta bác bỏ giả thuyết H₀ và chấp nhận H₁. Kết luận, tỷ lệ ăn nhiều đồ calo ở nhóm Obesity_Type_III cao hơn một cách có ý nghĩa thống kê so với nhóm Insufficient_Weight.

5.1.5 Kiểm định sự độc lập thông qua kiểm định Chi-bình phương

Để đánh giá xem có mối liên hệ hay sự phụ thuộc giữa mức độ cân nặng của một người (biến NObeyesdad) và thói quen ăn nhiều đồ calo (biến FAVC), ta sử dụng kiểm định chi bình phương về sự độc lập giữa hai biến định tính.

chisq.test(tab1)
## 
##  Pearson's Chi-squared test
## 
## data:  tab1
## X-squared = 233.34, df = 6, p-value < 2.2e-16
  • H₀: Biến NObeyesdad và biến FAVC độc lập với nhau. Nói cách khác, mức độ cân nặng không ảnh hưởng đến hành vi ăn nhiều đồ calo)

  • H₁: Biến NObeyesdad và biến FAVC không độc lập, tức là có mối liên hệ giữa mức độ cân nặng và thói quen ăn nhiều đồ calo.

Kết quả kiểm định cho thấy giá trị thống kê Chi-squared = 233.34, với 6 bậc tự do, và p-value < 2.2e-16. Vì p-value rất nhỏ (nhỏ hơn 0.05), ta bác bỏ giả thuyết H₀ và chấp nhận H₁. Điều này cho thấy giữa mức độ cân nặng và thói quen ăn nhiều đồ calo tồn tại mối quan hệ có ý nghĩa thống kê, tức là hành vi ăn nhiều đồ calo có sự khác biệt rõ rệt giữa các nhóm cân nặng.

5.2 Cặp biến NObeyesdad và SCC

Lý do chọn cặp: Biến SCC (việc có theo dõi lượng calo tiêu thụ hay không) có thể liên quan chặt chẽ đến tình trạng cân nặng, bởi việc chủ động kiểm soát lượng calo là một hành vi giúp phòng tránh thừa cân, béo phì. Vì vậy, phân tích mối liên hệ giữa SCC và NObeyesdad sẽ giúp làm rõ liệu việc theo dõi calo có thực sự đóng vai trò như một yếu tố bảo vệ chống lại tình trạng béo phì hay không ?

5.2.1 Bảng tần số và tần suất chéo

Bảng tần số dưới đây mô tả mối liên hệ giữa mức độ béo phì (NObeyesdad) và việc có theo dõi lượng calo tiêu thụ (SCC)

tab2 <- table(l$NObeyesdad, l$SCC)
tab2
##                      
##                        no yes
##   Insufficient_Weight 250  22
##   Normal_Weight       257  30
##   Obesity_Type_I      349   2
##   Obesity_Type_II     296   1
##   Obesity_Type_III    324   0
##   Overweight_Level_I  253  37
##   Overweight_Level_II 286   4

Bảng tần số chéo giữa biến NObeyesdad (tình trạng cân nặng) và SCC (việc có theo dõi lượng calo tiêu thụ hay không) cho thấy phần lớn người tham gia khảo sát ở mọi mức độ cân nặng đều không có thói quen theo dõi calo (giá trị “no”). Cụ thể, trong các nhóm thừa cân và béo phì – đặc biệt là Obesity_Type_I, Obesity_Type_II, và Obesity_Type_III – hầu như tuyệt đối số người trả lời là “no” (với lần lượt 349, 296, và 324 người), trong khi số người “yes” chỉ dao động từ 0 đến 2. Ở các nhóm có cân nặng thấp hơn như Insufficient_Weight, Normal_Weight và Overweight_Level_I, tuy số người theo dõi calo cao hơn một chút (lần lượt là 22, 30 và 37), nhưng vẫn chiếm tỷ lệ nhỏ so với nhóm “no”. Điều này gợi ý rằng việc theo dõi lượng calo tiêu thụ chưa phải là một thói quen phổ biến trong cộng đồng khảo sát, đặc biệt ở những người có mức độ béo phì cao.

# Chuyển sang data frame
df_freq <- as.data.frame(tab2)

# Vẽ biểu đồ cột nhóm
library(ggplot2)

ggplot(df_freq, aes(x = Var1, y = Freq, fill = Var2)) +
  geom_col(position = "dodge", color = "black") +
  geom_text(aes(label = Freq),
            position = position_dodge(width = 0.9),
            vjust = -0.3, size = 3.5) +
  labs(
    title = "Biểu đồ tần số theo mức độ béo phì và việc theo dõi calo",
    x = "Mức độ cân nặng",
    y = "Tần số",
    fill = "Theo dõi calo?"
  ) +
  theme_minimal() +
  theme(
    axis.text.x = element_text(angle = 30, hjust = 1),
    plot.title = element_text(hjust = 0.5, face = "bold")
  )

Biểu đồ tần số cho thấy xu hướng rõ rệt: phần lớn người ở mọi mức độ cân nặng đều không theo dõi lượng calo tiêu thụ (màu đỏ – “no”). Đặc biệt, ở các nhóm béo phì như Obesity_Type_I, Obesity_Type_II, và Obesity_Type_III, gần như toàn bộ người tham gia đều không theo dõi calo (với số lượng “yes” gần như bằng 0). Trong khi đó, nhóm Overweight_Level_I là trường hợp ngoại lệ duy nhất có số người theo dõi calo (37 người) cao hơn đáng kể so với các nhóm khác. Dù vậy, nhìn chung biểu đồ cho thấy thiếu thói quen theo dõi calo là phổ biến, kể cả trong các nhóm thừa cân và béo phì – điều này gợi ý rằng việc không kiểm soát năng lượng nạp vào có thể là một yếu tố góp phần vào tình trạng béo phì.

prop2 <- prop.table(tab2, margin = 1) * 100

# Hiển thị bảng
round(prop2, 2)
##                      
##                           no    yes
##   Insufficient_Weight  91.91   8.09
##   Normal_Weight        89.55  10.45
##   Obesity_Type_I       99.43   0.57
##   Obesity_Type_II      99.66   0.34
##   Obesity_Type_III    100.00   0.00
##   Overweight_Level_I   87.24  12.76
##   Overweight_Level_II  98.62   1.38

Bảng tần suất theo hàng cho thấy phần trăm người không theo dõi calo luôn chiếm áp đảo ở tất cả các nhóm mức độ cân nặng. Đặc biệt, các nhóm béo phì nặng hơn như Obesity_Type_I (99.43%), Obesity_Type_II (99.66%) và Obesity_Type_III (100%) gần như hoàn toàn không có ai theo dõi lượng calo tiêu thụ. Trong khi đó, nhóm Overweight_Level_I có tỷ lệ theo dõi calo cao nhất (12.76%), nhưng vẫn ở mức khá thấp. Xu hướng này củng cố nhận định rằng việc không theo dõi calo có thể là một thói quen phổ biến trong nhóm thừa cân và béo phì, và khả năng đây là một yếu tố nguy cơ quan trọng góp phần vào tình trạng này.

df_prop2 <- as.data.frame(prop2)
colnames(df_prop2) <- c("NObeyesdad", "SCC", "Percent")

# Vẽ biểu đồ tần suất
library(ggplot2)
ggplot(df_prop2, aes(x = NObeyesdad, y = Percent, fill = SCC)) +
  geom_col(position = "dodge", color = "black") +
  geom_text(aes(label = round(Percent, 1)),
            position = position_dodge(width = 0.9),
            vjust = -0.3, size = 3.5) +
  labs(
    title = "Biểu đồ tần suất (%) theo mức độ cân nặng và việc theo dõi calo",
    x = "Mức độ cân nặng",
    y = "Tần suất (%)",
    fill = "Theo dõi calo?"
  ) +
  theme_minimal() +
  theme(
    axis.text.x = element_text(angle = 30, hjust = 1),
    plot.title = element_text(hjust = 0.5, face = "bold")
  )

Biểu đồ tần suất (%) theo mức độ cân nặng và việc theo dõi calo cho thấy một xu hướng rõ rệt: tỷ lệ người không theo dõi calo luôn chiếm đa số tuyệt đối trong mọi nhóm cân nặng. Đáng chú ý, ở các nhóm béo phì nặng như Obesity_Type_I, Obesity_Type_II và Obesity_Type_III, tỷ lệ không theo dõi calo gần như đạt mức tuyệt đối (trên 99%, trong đó nhóm Obesity_Type_III là 100%). Trong khi đó, nhóm Overweight_Level_I có tỷ lệ theo dõi calo cao nhất (12.8%), nhưng vẫn rất khiêm tốn. Kết quả này cho thấy thói quen không theo dõi lượng calo tiêu thụ có thể liên quan đến tình trạng thừa cân, béo phì, và việc thiếu kiểm soát calo có thể là một yếu tố nguy cơ quan trọng cần được quan tâm trong quản lý cân nặng.

5.2.2 Phân tích Relative Risk giữa mức độ cân nặng và việc theo dõi calo

library(epitools)
riskratio(tab2)
## $data
##                      
##                         no yes Total
##   Insufficient_Weight  250  22   272
##   Normal_Weight        257  30   287
##   Obesity_Type_I       349   2   351
##   Obesity_Type_II      296   1   297
##   Obesity_Type_III     324   0   324
##   Overweight_Level_I   253  37   290
##   Overweight_Level_II  286   4   290
##   Total               2015  96  2111
## 
## $measure
##                      risk ratio with 95% C.I.
##                         estimate       lower     upper
##   Insufficient_Weight 1.00000000          NA        NA
##   Normal_Weight       1.29236617 0.764850388 2.1837085
##   Obesity_Type_I      0.07044807 0.016710399 0.2969965
##   Obesity_Type_II     0.04162841 0.005649298 0.3067503
##   Obesity_Type_III    0.00000000 0.000000000       NaN
##   Overweight_Level_I  1.57742947 0.955741481 2.6035113
##   Overweight_Level_II 0.17053292 0.059531121 0.4885088
## 
## $p.value
##                      two-sided
##                         midp.exact fisher.exact   chi.square
##   Insufficient_Weight           NA           NA           NA
##   Normal_Weight       3.412238e-01 3.831403e-01 3.360146e-01
##   Obesity_Type_I      7.785200e-07 7.343806e-07 1.324472e-06
##   Obesity_Type_II     7.496290e-07 9.338869e-07 2.735883e-06
##   Obesity_Type_III    1.979398e-08 1.979398e-08 1.824850e-07
##   Overweight_Level_I  7.262599e-02 7.491798e-02 7.106355e-02
##   Overweight_Level_II 1.216577e-04 1.660386e-04 1.544125e-04
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"

Kết quả bảng tỷ số rủi ro (risk ratio) cho thấy có sự khác biệt rõ rệt về hành vi theo dõi lượng calo tiêu thụ (SCC) giữa các nhóm cân nặng (NObeyesdad). Cụ thể, so với nhóm tham chiếu là người thiếu cân (Insufficient_Weight), những người béo phì loại I và II có khả năng theo dõi calo thấp hơn lần lượt khoảng 14 lần và 24 lần, với các tỷ số rủi ro (RR) lần lượt là 0.070 và 0.042, và đều có ý nghĩa thống kê rất cao (p < 0.001). Đặc biệt, trong nhóm béo phì loại III, không có ai theo dõi lượng calo, tương ứng với RR = 0. Ngược lại, nhóm thừa cân mức I (Overweight_Level_I) lại có khả năng theo dõi calo cao hơn khoảng 1.6 lần so với nhóm thiếu cân, tuy nhiên kết quả này chưa đạt ngưỡng ý nghĩa thống kê (p ≈ 0.07). Những nhóm như Overweight_Level_II và Normal_Weight cũng có RR lần lượt là 0.17 và 1.29, trong đó chỉ nhóm Overweight_Level_II có ý nghĩa thống kê (p < 0.001).

Tóm lại, hành vi theo dõi calo dường như giảm mạnh ở các nhóm có mức béo phì cao hơn, điều này phản ánh một nghịch lý đáng quan tâm: những người cần kiểm soát calo nhất lại là những người ít thực hiện hành vi này nhất. Phát hiện này nhấn mạnh vai trò then chốt của việc nâng cao ý thức theo dõi năng lượng tiêu thụ trong các chương trình can thiệp phòng chống và điều trị béo phì.

5.2.3 Phân tích odds ratio giữa mức độ cân nặng và việc theo dõi calo

Do bảng tần số giữa NObeyesdad và SCC có chứa các ô bằng 0, khiến việc tính odds ratio bằng phương pháp thông thường bị lỗi. Do đó, ta sử dụng phương pháp Wald’s odds ratio với hiệu chỉnh để đảm bảo tính toán chính xác mà không loại bỏ dữ liệu. Đây là cách tiếp cận phù hợp khi xử lý các bảng chéo có tần suất hiếm.

library(epitools)

# Áp dụng odds ratio kiểu Wald cho bảng nhiều hàng và chỉnh sửa ô bằng 0
oddsratio.wald(tab2, correction = TRUE)
## $data
##                      
##                         no yes Total
##   Insufficient_Weight  250  22   272
##   Normal_Weight        257  30   287
##   Obesity_Type_I       349   2   351
##   Obesity_Type_II      296   1   297
##   Obesity_Type_III     324   0   324
##   Overweight_Level_I   253  37   290
##   Overweight_Level_II  286   4   290
##   Total               2015  96  2111
## 
## $measure
##                      odds ratio with 95% C.I.
##                         estimate       lower     upper
##   Insufficient_Weight 1.00000000          NA        NA
##   Normal_Weight       1.32649452 0.744904817 2.3621645
##   Obesity_Type_I      0.06512113 0.015174836 0.2794601
##   Obesity_Type_II     0.03839066 0.005138398 0.2868293
##   Obesity_Type_III    0.00000000 0.000000000       NaN
##   Overweight_Level_I  1.66187567 0.953213089 2.8973907
##   Overweight_Level_II 0.15893198 0.054038282 0.4674348
## 
## $p.value
##                      two-sided
##                         midp.exact fisher.exact   chi.square
##   Insufficient_Weight           NA           NA           NA
##   Normal_Weight       3.412238e-01 3.831403e-01 4.142690e-01
##   Obesity_Type_I      7.785200e-07 7.343806e-07 3.724739e-06
##   Obesity_Type_II     7.496290e-07 9.338869e-07 7.582464e-06
##   Obesity_Type_III    1.979398e-08 1.979398e-08 5.784737e-07
##   Overweight_Level_I  7.262599e-02 7.491798e-02 9.543729e-02
##   Overweight_Level_II 1.216577e-04 1.660386e-04 3.397432e-04
## 
## $correction
## [1] TRUE
## 
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"

Phân tích odds ratio cho thấy có sự khác biệt đáng kể giữa các nhóm cân nặng về thói quen theo dõi lượng calo tiêu thụ. Nếu lấy nhóm thiếu cân (Insufficient_Weight) làm mốc so sánh, thì tỷ lệ người béo phì độ III theo dõi calo trên người béo phì độ III không theo dõi calo bằng 0 lần, tức là không có ai trong nhóm này theo dõi calo. Tương tự, nhóm béo phì độ II có tỷ lệ này thấp hơn 26 lần so với nhóm thiếu cân (odds ratio ≈ 0.038), và béo phì độ I cũng thấp hơn khoảng 15,4 lần (odds ratio ≈ 0.065). Những con số này cho thấy xu hướng không theo dõi calo tăng mạnh ở các nhóm béo phì nặng.

Ở chiều ngược lại, nhóm thừa cân cấp I (Overweight_Level_I) lại có tỷ lệ người theo dõi calo cao hơn 1,66 lần so với nhóm thiếu cân – dấu hiệu cho thấy có thể nhóm này đã có nhận thức hoặc hành vi can thiệp. Trong khi đó, nhóm cân nặng bình thường (Normal_Weight) cũng có odds cao hơn (1,33 lần), nhưng không đáng kể về mặt thống kê. Nhóm thừa cân cấp II lại có odds thấp hơn nhiều (khoảng 0.16 lần), cho thấy không nhất quán giữa hai nhóm thừa cân.

Tóm lại, kết quả odds ratio chỉ ra rằng việc theo dõi calo không phổ biến ở các nhóm béo phì nặng, trong khi một số nhóm có cân nặng ở mức độ vừa phải (thừa cân nhẹ) có xu hướng theo dõi nhiều hơn. Điều này gợi ý rằng nhận thức và hành vi phòng ngừa có thể chưa phổ biến đúng đối tượng có nguy cơ cao nhất.

5.2.4 Hiệu tỉ lệ

Sau khi phân tích tần số và tần suất của biến SCC (thói quen theo dõi lượng calo tiêu thụ) theo từng nhóm mức độ béo phì (NObeyesdad), ta tiếp tục kiểm định hiệu tỷ lệ giữa hai nhóm cụ thể là Insufficient_Weight (thiếu cân) và Overweight_Level_I (thừa cân cấp độ I). Mục tiêu là đánh giá xem liệu tỷ lệ người có hành vi theo dõi calo ở nhóm thừa cân cấp độ I có cao hơn đáng kể so với nhóm thiếu cân hay không.

success <- c(tab2["Insufficient_Weight", "yes"],
             tab2["Overweight_Level_I", "yes"])

# Tổng số người trong mỗi nhóm
n <- c(sum(tab2["Insufficient_Weight", ]),
       sum(tab2["Overweight_Level_I", ]))

# Kiểm định hiệu tỷ lệ một phía: p2 < p1 (tỷ lệ theo dõi calo ở nhóm Obesity_Type_III thấp hơn)
prop.test(success, n, alternative = "less", correct = FALSE)
## 
##  2-sample test for equality of proportions without continuity correction
## 
## data:  success out of n
## X-squared = 3.2583, df = 1, p-value = 0.03553
## alternative hypothesis: less
## 95 percent confidence interval:
##  -1.000000000 -0.004538749
## sample estimates:
##     prop 1     prop 2 
## 0.08088235 0.12758621
  • H₀: Tỷ lệ theo dõi calo ở nhóm Overweight_Level_I nhỏ hơn hoặc bằng tỷ lệ ở nhóm Insufficient_Weight.

  • H₁: Tỷ lệ theo dõi calo ở nhóm Overweight_Level_I cao hơn nhóm Insufficient_Weight

Kết quả kiểm định cho thấy:

  • Tỷ lệ theo dõi calo ở nhóm Insufficient_Weight là 8.09%, trong khi ở nhóm Overweight_Level_I là 12.76%.

  • Hiệu tỷ lệ giữa hai nhóm là khoảng 4.67 điểm phần trăm.

Giá trị thống kê kiểm định \(\chi^2 = 3.26\), với p-value = 0.0355, nhỏ hơn mức ý nghĩa 0.05.

Kết luận: Với mức ý nghĩa 5%, ta bác bỏ H₀ và chấp nhận H₁, tức là có đủ bằng chứng thống kê để kết luận rằng tỷ lệ theo dõi calo ở nhóm Overweight_Level_I cao hơn đáng kể so với nhóm Insufficient_Weight. Điều này phản ánh rằng người thừa cân cấp độ 1 có xu hướng quan tâm nhiều hơn đến lượng calo tiêu thụ so với người thiếu cân.

5.2.5 Kiểm định sự độc lập thông qua kiểm định Chi-bình phương

Để kiểm tra xem giữa tình trạng cân nặng (biến NObeyesdad) và hành vi theo dõi lượng calo tiêu thụ (biến SCC) có mối liên hệ thống kê hay không, ta thực hiện kiểm định chi-bình phương về sự độc lập. Phương pháp này giúp xác định liệu tỷ lệ người theo dõi calo có khác nhau một cách đáng kể giữa các nhóm mức độ cân nặng hay không.

chisq.test(tab2)
## 
##  Pearson's Chi-squared test
## 
## data:  tab2
## X-squared = 123.02, df = 6, p-value < 2.2e-16
  • H₀: Hai biến NObeyesdad (tình trạng cân nặng) và SCC (hành vi theo dõi lượng calo tiêu thụ) độc lập với nhau, tức là tỷ lệ theo dõi calo không khác biệt giữa các nhóm cân nặng.

  • H₁: Hai biến không độc lập, tức là có mối liên hệ giữa tình trạng cân nặng và hành vi theo dõi calo.

Với giá trị p rất nhỏ (p-value < 0.05), ta bác bỏ giả thuyết H₀, tức là không có mối liên hệ giữa hai biến. Điều đó đồng nghĩa với việc có đủ bằng chứng thống kê để kết luận rằng tình trạng cân nặng và hành vi theo dõi calo có mối liên hệ phụ thuộc lẫn nhau. Nói cách khác, tỷ lệ người theo dõi calo có sự khác biệt rõ rệt giữa các nhóm mức độ cân nặng, cho thấy thói quen theo dõi năng lượng tiêu thụ có thể liên quan đến tình trạng béo phì.

5.3 Cặp biến NObeyesdad và family_history_with_overweight

Lý do chọn cặp: Biến family_history_with_overweight (việc trong gia đình có người từng bị thừa cân hay không) phản ánh yếu tố di truyền và môi trường sống chung trong gia đình – những yếu tố đã được nhiều nghiên cứu xác nhận là có ảnh hưởng đến nguy cơ béo phì. Việc phân tích mối liên hệ giữa family_history_with_overweight và NObeyesdad sẽ giúp làm rõ liệu tiền sử thừa cân trong gia đình có thực sự làm gia tăng khả năng một cá nhân mắc tình trạng béo phì hay không ?

5.3.1 Bảng tần số và tần suất chéo

Để tìm hiểu mối liên hệ giữa tiền sử thừa cân trong gia đình (family_history_with_overweight) và tình trạng cân nặng (NObeyesdad), ta xây dựng bảng tần số chéo thể hiện số lượng cá nhân thuộc từng nhóm mức độ béo phì, được phân loại theo việc có hay không có người thân trong gia đình từng bị thừa cân. Phân tích bảng này cho phép đánh giá sơ bộ liệu yếu tố di truyền và môi trường gia đình có liên quan đến xu hướng phát triển tình trạng thừa cân hoặc béo phì hay không.

tab3 <- table(l$NObeyesdad, l$family_history_with_overweight)
tab3
##                      
##                        no yes
##   Insufficient_Weight 146 126
##   Normal_Weight       132 155
##   Obesity_Type_I        7 344
##   Obesity_Type_II       1 296
##   Obesity_Type_III      0 324
##   Overweight_Level_I   81 209
##   Overweight_Level_II  18 272

Bảng tần số cho thấy xu hướng rất rõ rệt: phần lớn các trường hợp béo phì nặng đều xuất hiện ở nhóm có tiền sử gia đình thừa cân. Cụ thể, trong nhóm Obesity_Type_III, toàn bộ 324 trường hợp đều có người thân thừa cân, trong khi không có trường hợp nào ở nhóm không có tiền sử gia đình. Tương tự, với nhóm Obesity_Type_II, chỉ có 1 trường hợp không có tiền sử, trong khi có đến 296 người thuộc nhóm có tiền sử. Ngược lại, ở các nhóm Insufficient_Weight và Normal_Weight, số lượng người không có tiền sử gia đình lại chiếm tỷ lệ khá lớn (lần lượt 146 và 132 người).

# Chuyển sang data frame
df_freq <- as.data.frame(tab3)

# Vẽ biểu đồ cột nhóm
library(ggplot2)

ggplot(df_freq, aes(x = Var1, y = Freq, fill = Var2)) +
  geom_col(position = "dodge", color = "black") +
  geom_text(aes(label = Freq),
            position = position_dodge(width = 0.9),
            vjust = -0.3, size = 3.5) +
  labs(
    title = "Biểu đồ tần số theo mức độ béo phì và có người nhà bị béo phì",
    x = "Mức độ cân nặng",
    y = "Tần số",
    fill = "Người thân béo ?"
  ) +
  theme_minimal() +
  theme(
    axis.text.x = element_text(angle = 30, hjust = 1),
    plot.title = element_text(hjust = 0.5, face = "bold")
  )

Biểu đồ thể hiện rõ sự phân hoá giữa hai nhóm: những người có và không có người thân từng bị béo phì. Ở các mức béo phì cao như Obesity_Type_I, Obesity_Type_II, và Obesity_Type_III, số lượng người thuộc nhóm có tiền sử gia đình thừa cân vượt trội áp đảo. Đặc biệt, với Obesity_Type_III, toàn bộ 324 trường hợp đều thuộc nhóm này, cho thấy mối liên hệ gần như tuyệt đối giữa yếu tố di truyền/môi trường gia đình và tình trạng béo phì nghiêm trọng.

Ngược lại, ở các mức cân nặng bình thường như Insufficient_Weight và Normal_Weight, tỷ lệ giữa hai nhóm trở nên cân bằng hơn, thậm chí nhóm không có người thân béo phì chiếm ưu thế nhẹ (ví dụ: 146 người so với 126 trong nhóm thiếu cân).

Xu hướng này cho thấy rõ rằng tiền sử gia đình bị béo phì là một yếu tố nguy cơ mạnh mẽ – không chỉ liên quan đến xác suất mắc béo phì mà còn đến mức độ nghiêm trọng của béo phì. Biểu đồ củng cố giả định rằng yếu tố gia đình không nên bị bỏ qua khi xây dựng các mô hình dự đoán hoặc chiến lược can thiệp phòng ngừa béo phì trong cộng đồng.

prop3 <- prop.table(tab3, margin = 1) * 100

# Hiển thị bảng
round(prop3, 2)
##                      
##                           no    yes
##   Insufficient_Weight  53.68  46.32
##   Normal_Weight        45.99  54.01
##   Obesity_Type_I        1.99  98.01
##   Obesity_Type_II       0.34  99.66
##   Obesity_Type_III      0.00 100.00
##   Overweight_Level_I   27.93  72.07
##   Overweight_Level_II   6.21  93.79

Bảng tần suất theo hàng cho thấy tỷ lệ người có tiền sử gia đình béo phì tăng rõ rệt theo mức độ béo phì. Ở nhóm Obesity_Type_I, II, và III, trên 98% cá nhân có người thân từng bị béo phì, riêng Obesity_Type_III là 100%. Ngược lại, ở nhóm nhẹ cân và bình thường, tỷ lệ giữa hai nhóm khá cân bằng. Điều này cho thấy tiền sử gia đình béo phì là một yếu tố nguy cơ mạnh, đặc biệt trong các mức độ béo phì nặng.

df_prop3 <- as.data.frame(prop3)
colnames(df_prop3) <- c("NObeyesdad", "family_history_with_overweight", "Percent")

# Vẽ biểu đồ tần suất
library(ggplot2)
ggplot(df_prop3, aes(x = NObeyesdad, y = Percent, fill = family_history_with_overweight)) +
  geom_col(position = "dodge", color = "black") +
  geom_text(aes(label = round(Percent, 1)),
            position = position_dodge(width = 0.9),
            vjust = -0.3, size = 3.5) +
  labs(
    title = "Biểu đồ tần suất (%) theo mức độ cân nặng và có người thân bị béo phì",
    x = "Mức độ cân nặng",
    y = "Tần suất (%)",
    fill = "Người thân béo ?"
  ) +
  theme_minimal() +
  theme(
    axis.text.x = element_text(angle = 30, hjust = 1),
    plot.title = element_text(hjust = 0.5, face = "bold")
  )

Biểu đồ tần suất (%) cho thấy xu hướng nhất quán với bảng số liệu: càng ở mức độ béo phì cao, tỷ lệ người có người thân từng bị béo phì càng áp đảo. Đặc biệt, từ Obesity_Type_I trở lên, tỷ lệ này đều vượt 98%, và đạt 100% ở Obesity_Type_III. Ngược lại, ở nhóm nhẹ cân và bình thường, hai nhóm gần như cân bằng. Điều này tiếp tục khẳng định vai trò rõ rệt của yếu tố gia đình trong nguy cơ phát triển béo phì, đặc biệt ở các mức độ nghiêm trọng.

5.3.2 Phân tích Relative Risk giữa mức độ cân nặng và việc theo dõi calo

library(epitools)
riskratio(tab3)
## $data
##                      
##                        no  yes Total
##   Insufficient_Weight 146  126   272
##   Normal_Weight       132  155   287
##   Obesity_Type_I        7  344   351
##   Obesity_Type_II       1  296   297
##   Obesity_Type_III      0  324   324
##   Overweight_Level_I   81  209   290
##   Overweight_Level_II  18  272   290
##   Total               385 1726  2111
## 
## $measure
##                      risk ratio with 95% C.I.
##                       estimate     lower    upper
##   Insufficient_Weight 1.000000        NA       NA
##   Normal_Weight       1.165865 0.9869255 1.377247
##   Obesity_Type_I      2.115679 1.8600126 2.406487
##   Obesity_Type_II     2.151462 1.8927901 2.445484
##   Obesity_Type_III    2.158730 1.8995088 2.453327
##   Overweight_Level_I  1.555774 1.3435961 1.801460
##   Overweight_Level_II 2.024740 1.7755939 2.308846
## 
## $p.value
##                      two-sided
##                         midp.exact fisher.exact   chi.square
##   Insufficient_Weight           NA           NA           NA
##   Normal_Weight       7.027790e-02 7.576759e-02 6.937322e-02
##   Obesity_Type_I      0.000000e+00 8.919985e-56 5.667057e-50
##   Obesity_Type_II     0.000000e+00 9.051385e-58 9.102193e-48
##   Obesity_Type_III    0.000000e+00 3.637989e-63 5.034591e-52
##   Overweight_Level_I  4.736984e-10 5.011433e-10 5.097313e-10
##   Overweight_Level_II 0.000000e+00 4.664121e-38 3.752980e-35
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"

So với nhóm tham chiếu là Insufficient_Weight (RR = 1), các mức độ cân nặng khác đều có Risk Ratio cao hơn, cho thấy tỷ lệ người có người thân bị béo phì ở các nhóm thừa cân và béo phì cao hơn rõ rệt.

Cụ thể, nhóm Normal_Weight có RR = 1.17, nghĩa là tỷ lệ người có người thân béo phì ở nhóm này cao hơn 17% so với nhóm thiếu cân, tuy nhiên chưa đạt ý nghĩa thống kê rõ rệt (CI bao gồm 1). Nhóm Overweight_Level_I có RR = 1.56, cho thấy tỷ lệ này cao hơn 56%, và Overweight_Level_II có RR = 2.02, tức gấp đôi so với nhóm thiếu cân.

Tại các mức độ béo phì, các tỷ số RR đều vượt ngưỡng 2: nhóm Obesity_Type_I có RR = 2.12, Obesity_Type_II là 2.15, và Obesity_Type_III cao nhất với RR = 2.16. Điều này cho thấy rằng tỷ lệ người có người thân bị béo phì trong các nhóm béo phì nặng cao gấp hơn 2 lần so với nhóm thiếu cân.

Tất cả các RR từ Overweight_Level_I trở lên đều có khoảng tin cậy 95% không chứa 1, đồng nghĩa với việc các khác biệt này có ý nghĩa thống kê. Như vậy, Risk Ratio cho thấy một xu hướng nhất quán: càng béo phì nặng, tỷ lệ có người thân béo phì càng cao so với nhóm thiếu cân.

5.3.3 Phân tích odds ratio giữa mức độ cân nặng và việc theo dõi calo

oddsratio.wald(tab3, correction = TRUE)
## $data
##                      
##                        no  yes Total
##   Insufficient_Weight 146  126   272
##   Normal_Weight       132  155   287
##   Obesity_Type_I        7  344   351
##   Obesity_Type_II       1  296   297
##   Obesity_Type_III      0  324   324
##   Overweight_Level_I   81  209   290
##   Overweight_Level_II  18  272   290
##   Total               385 1726  2111
## 
## $measure
##                      odds ratio with 95% C.I.
##                        estimate      lower       upper
##   Insufficient_Weight   1.00000         NA          NA
##   Normal_Weight         1.36063  0.9755585    1.897697
##   Obesity_Type_I       56.94331 25.9643502  124.884336
##   Obesity_Type_II     342.98413 47.4653372 2478.400413
##   Obesity_Type_III          Inf        NaN         Inf
##   Overweight_Level_I    2.98981  2.1065683    4.243377
##   Overweight_Level_II  17.50970 10.2730389   29.844100
## 
## $p.value
##                      two-sided
##                         midp.exact fisher.exact   chi.square
##   Insufficient_Weight           NA           NA           NA
##   Normal_Weight       7.027790e-02 7.576759e-02 8.338780e-02
##   Obesity_Type_I      0.000000e+00 8.919985e-56 2.290368e-49
##   Obesity_Type_II     0.000000e+00 9.051385e-58 3.668647e-47
##   Obesity_Type_III    0.000000e+00 3.637989e-63 2.152194e-51
##   Overweight_Level_I  4.736984e-10 5.011433e-10 8.784167e-10
##   Overweight_Level_II 0.000000e+00 4.664121e-38 1.187194e-34
## 
## $correction
## [1] TRUE
## 
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"

Phân tích odds ratio cho thấy sự khác biệt rất rõ rệt giữa các nhóm cân nặng về tỷ lệ có người thân bị béo phì. Nếu lấy nhóm thiếu cân (Insufficient_Weight) làm chuẩn, thì tỷ lệ người béo phì độ III có người thân từng bị béo phì trên người béo phì độ III không có người thân béo phì là vô cùng lớn (OR = ∞), vì không có cá nhân nào trong nhóm này thuộc nhóm không có tiền sử.

Tỷ lệ người béo phì độ II có người thân béo phì trên người không có người thân bị béo phì cao hơn 343 lần so với tỷ lệ tương ứng ở nhóm thiếu cân. Ở nhóm béo phì độ I, tỉ lệ này cũng cao hơn 56.9 lần. Với nhóm thừa cân độ II (Overweight_Level_II), odds cao hơn 17.5 lần, và thừa cân độ I (Overweight_Level_I) là gần 3 lần so với nhóm chuẩn.

Ngược lại, ở nhóm cân nặng bình thường (Normal_Weight), odds chỉ cao hơn 1.36 lần và không có ý nghĩa thống kê rõ ràng. Như vậy, khi mức độ thừa cân và béo phì tăng lên, tỷ lệ người có người thân béo phì trên không có người thân béo phì cũng tăng mạnh, và mức tăng đó cao gấp hàng chục đến hàng trăm lần so với nhóm thiếu cân. Đây là bằng chứng rõ rệt cho thấy yếu tố gia đình có liên hệ chặt chẽ với tình trạng béo phì, đặc biệt ở các mức độ nghiêm trọng.

5.3.4 Hiệu tỉ lệ

# Số người có người thân bị béo phì trong mỗi nhóm
success <- c(tab3["Overweight_Level_I", "yes"],
             tab3["Insufficient_Weight", "yes"])

# Tổng số người trong mỗi nhóm
n <- c(sum(tab3["Overweight_Level_I", ]),
       sum(tab3["Insufficient_Weight", ]))

# Kiểm định tỷ lệ một phía: p1 < p2
prop.test(success, n, alternative = "less", correct = FALSE)
## 
##  2-sample test for equality of proportions without continuity correction
## 
## data:  success out of n
## X-squared = 38.64, df = 1, p-value = 1
## alternative hypothesis: less
## 95 percent confidence interval:
##  -1.0000000  0.3234184
## sample estimates:
##    prop 1    prop 2 
## 0.7206897 0.4632353
  • H₀: Tỷ lệ người có người thân bị béo phì ở nhóm Overweight_Level_I lớn hơn hoặc bằng tỷ lệ ở nhóm Insufficient_Weight.

  • H₁: Tỷ lệ người có người thân bị béo phì ở nhóm Overweight_Level_I nhỏ hơn tỷ lệ ở nhóm Insufficient_Weight

Kết luận: Dữ liệu không ủng hộ giả thuyết rằng tỷ lệ người có người thân béo phì ở nhóm Overweight_Level_I thấp hơn nhóm Insufficient_Weight. Trái lại, kết quả cho thấy tỷ lệ này thực tế cao hơn, cho thấy yếu tố gia đình vẫn có vai trò rõ rệt ở nhóm thừa cân nhẹ.

5.3.5 Kiểm định sự độc lập thông qua kiểm định Chi-bình phương

chisq.test(tab3)
## 
##  Pearson's Chi-squared test
## 
## data:  tab3
## X-squared = 621.98, df = 6, p-value < 2.2e-16

Kết luận: Với p-value rất nhỏ, gần bằng 0, ta bác bỏ giả thuyết độc lập. Điều này cho thấy có mối liên hệ có ý nghĩa thống kê rất mạnh giữa tình trạng cân nặng và tiền sử gia đình bị béo phì. Nói cách khác, tình trạng béo phì không phân bố ngẫu nhiên giữa hai nhóm, mà liên quan rõ rệt đến việc trong gia đình có người từng bị béo phì hay không.

Phần 6: Hồi quy đa biến

6.1 Mô hình hồi quy tuyến tính

Trong phần này, ta sẽ xây dựng mô hình hồi quy tuyến tính tổng quát (GLM) nhằm đánh giá tác động đồng thời của bốn yếu tố hành vi và nhân khẩu học đến xác suất rơi vào nhóm béo phì cấp độ I (Obesity_Type_I). Biến phụ thuộc NObeyesdad được mã hóa nhị phân, với giá trị 1 nếu cá nhân thuộc nhóm Obesity_Type_I, và 0 nếu thuộc các nhóm còn lại.

  • FAVC: thể hiện thói quen tiêu thụ thực phẩm giàu calo;

  • SCC: thói quen theo dõi lượng calo tiêu thụ;

  • family_history_with_overweight: yếu tố di truyền liên quan đến tiền sử thừa cân trong gia đình.

  • NCP: số lượng bữa ăn chính mỗi ngày.

Việc đưa đồng thời bốn biến vào mô hình giúp đánh giá ảnh hưởng riêng biệt của từng yếu tố khi đã kiểm soát các yếu tố còn lại, từ đó cung cấp cái nhìn toàn diện và khách quan hơn về nguy cơ béo phì loại I dưới góc độ hành vi và môi trường gia đình.

# Tạo biến nhị phân: 1 nếu là Obesity_Type_I, 0 nếu không
l$NObeyesdad_bin <- ifelse(l$NObeyesdad == "Obesity_Type_I", 1, 0)

# Mô hình hồi quy tuyến tính đa biến với 3 biến giải thích
model_linear_multi <- glm(NObeyesdad_bin ~ FAVC + SCC + family_history_with_overweight + NCP, data = l)

# Hiển thị kết quả mô hình
summary(model_linear_multi)
## 
## Call:
## glm(formula = NObeyesdad_bin ~ FAVC + SCC + family_history_with_overweight + 
##     NCP, data = l)
## 
## Coefficients:
##                                   Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                        0.15974    0.03795   4.209 2.67e-05 ***
## FAVCyes                            0.08423    0.02532   3.326 0.000895 ***
## SCCyes                            -0.07364    0.03874  -1.901 0.057452 .  
## family_history_with_overweightyes  0.17011    0.02103   8.088 1.01e-15 ***
## NCP                               -0.07583    0.01010  -7.511 8.60e-14 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for gaussian family taken to be 0.1294639)
## 
##     Null deviance: 292.64  on 2110  degrees of freedom
## Residual deviance: 272.65  on 2106  degrees of freedom
## AIC: 1682.1
## 
## Number of Fisher Scoring iterations: 2

Kết luận:

Kết quả từ mô hình hồi quy tuyến tính cho thấy có sự khác biệt rõ rệt giữa các yếu tố trong việc ảnh hưởng đến xác suất rơi vào nhóm béo phì cấp độ I.

Cụ thể, các biến FAVC (thói quen tiêu thụ thực phẩm giàu calo) và family_history_with_overweight (có người thân thừa cân) đều có hệ số hồi quy dương và rất có ý nghĩa thống kê, cho thấy những cá nhân có đặc điểm này có khả năng cao hơn rơi vào nhóm béo phì loại I.

Ngược lại, hai biến SCC (thói quen theo dõi lượng calo tiêu thụ) và NCP (số bữa ăn chính mỗi ngày) có hệ số âm, cho thấy những người thường xuyên theo dõi calo và ăn nhiều bữa hơn trong ngày có xu hướng ít khả năng bị béo phì loại I hơn. Trong đó, biến NCP có ý nghĩa thống kê rất cao, củng cố thêm giả thiết rằng chia nhỏ bữa ăn có thể là một yếu tố bảo vệ.

Tóm lại, mô hình cho thấy những yếu tố như ăn nhiều calo và có tiền sử gia đình là nguy cơ thúc đẩy béo phì, trong khi ăn nhiều bữa nhỏ và kiểm soát calo có thể là yếu tố bảo vệ. Đây là cơ sở quan trọng cho các chương trình can thiệp hành vi và tư vấn cá nhân hóa trong phòng ngừa béo phì.

6.2 Mô hình Logit

# Tạo biến nhị phân: 1 nếu là Obesity_Type_I, 0 nếu không
l$NObeyesdad_bin <- ifelse(l$NObeyesdad == "Obesity_Type_I", 1, 0)

# Mô hình hồi quy logistic (logit) đa biến
model_logit_multi <- glm(NObeyesdad_bin ~ FAVC + SCC + family_history_with_overweight + NCP,
                         data = l, family = binomial(link = "logit"))

# Hiển thị kết quả mô hình
summary(model_logit_multi)
## 
## Call:
## glm(formula = NObeyesdad_bin ~ FAVC + SCC + family_history_with_overweight + 
##     NCP, family = binomial(link = "logit"), data = l)
## 
## Coefficients:
##                                   Estimate Std. Error z value Pr(>|z|)    
## (Intercept)                       -3.59678    0.50382  -7.139 9.40e-13 ***
## FAVCyes                            1.26338    0.32443   3.894 9.85e-05 ***
## SCCyes                            -1.93405    0.73646  -2.626  0.00864 ** 
## family_history_with_overweightyes  2.65246    0.39246   6.758 1.39e-11 ***
## NCP                               -0.61308    0.07642  -8.023 1.03e-15 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 1899.6  on 2110  degrees of freedom
## Residual deviance: 1701.4  on 2106  degrees of freedom
## AIC: 1711.4
## 
## Number of Fisher Scoring iterations: 6

Phương trình hồi quy logit có dạng:

\[ \log\left(\frac{\pi}{1 - \pi}\right) = -3.59678 + 1.26338\cdot \text{FAVC}_{\text{yes}} - 1.93405 \cdot \text{SCC}_{\text{yes}} + 2.65246\cdot \text{FamilyHistory}_{\text{yes}} - 0.61308\cdot \text{NCP} \]

  • Hệ số chặn \(\beta_0 = -3.5968\): Đây là log-odds rơi vào nhóm đối với người không có thói quen ăn nhiều calo, không theo dõi calo, không có người thân bị béo phì và có \(NCP = 0\).

  • Hệ số hồi quy FAVC\(_{\text{yes}}\): \(\beta_1 = 1.2634\), với \(p = 9.85 \times 10^{-5} < 0.001\). Nghĩa là khi giữ các yếu tố khác không đổi, người có thói quen ăn thực phẩm giàu calo có log-odds rơi vào nhóm béo phì loại I cao hơn 1.263 đơn vị so với người không có thói quen này. Kết quả này có ý nghĩa thống kê rất cao.

  • Hệ số hồi quy SCC\(_{\text{yes}}\): \(\beta_2 = -1.9340\), với \(p = 0.0086\). Hệ số âm cho thấy người thường xuyên theo dõi lượng calo có log-odds thấp hơn đáng kể so với người không theo dõi, tức là có xu hướng giảm nguy cơ béo phì loại I.

  • Hệ số hồi quy family_history_with_overweight\(_{\text{yes}}\): \(\beta_3 = 2.6525\), với \(p < 0.0001\). Đây là một trong những yếu tố nguy cơ mạnh nhất trong mô hình. Khi giữ các yếu tố khác không đổi, người có người thân bị thừa cân/béo phì có log-odds cao hơn rất nhiều so với người không có tiền sử gia đình.

  • Hệ số hồi quy NCP: \(\beta_4 = -0.6131\), với \(p < 0.0001\). Hệ số âm và có ý nghĩa thống kê rất cao cho thấy rằng khi số bữa ăn chính trong ngày tăng, log-odds rơi vào nhóm béo phì loại I giảm xuống, tức là ăn nhiều bữa hơn có thể giúp giảm nguy cơ béo phì.

Tỷ số Odds (Odds Ratio):

# Tính Odds Ratio
exp(coef(model_logit_multi))
##                       (Intercept)                           FAVCyes 
##                        0.02741185                        3.53736592 
##                            SCCyes family_history_with_overweightyes 
##                        0.14456183                       14.18891247 
##                               NCP 
##                        0.54167875

\[ \text{OR}_{\text{FAVC}} = e^{1.2634} \approx 3.54 \]

\[ \text{OR}_{\text{SCC}} = e^{-1.9340} \approx 0.14 \]

\[ \text{OR}_{\text{FamilyHistory}} = e^{2.6525} \approx 14.19 \]

\[ \text{OR}_{\text{NCP}} = e^{-0.6131} \approx 0.54 \] Kết luận:

Những người thường xuyên ăn thực phẩm giàu calo có nguy cơ thuộc nhóm béo phì loại I cao gấp khoảng 3.54 lần so với người không có thói quen này. Người có thói quen theo dõi lượng calo có nguy cơ thấp hơn, với odds chỉ bằng khoảng 14% so với người không theo dõi. Đặc biệt, người có người thân bị béo phì có nguy cơ cao gấp khoảng 14 lần, cho thấy yếu tố di truyền là một trong những yếu tố nguy cơ mạnh nhất. Ngoài ra, việc ăn nhiều bữa hơn trong ngày có liên quan đến nguy cơ thấp hơn, khi mỗi bữa ăn thêm làm giảm odds rơi vào nhóm béo phì loại I còn khoảng 54%, cho thấy vai trò bảo vệ của việc chia nhỏ khẩu phần ăn trong ngày.

6.3 Mô hình Probit

l$NObeyesdad_bin <- ifelse(l$NObeyesdad == "Obesity_Type_I", 1, 0)

# Mô hình hồi quy probit đa biến với 3 biến giải thích
model_probit_multi <- glm(NObeyesdad_bin ~ FAVC + SCC + family_history_with_overweight + NCP,
                          data = l, family = binomial(link = "probit"))

# Hiển thị kết quả mô hình
summary(model_probit_multi)
## 
## Call:
## glm(formula = NObeyesdad_bin ~ FAVC + SCC + family_history_with_overweight + 
##     NCP, family = binomial(link = "probit"), data = l)
## 
## Coefficients:
##                                   Estimate Std. Error z value Pr(>|z|)    
## (Intercept)                        -1.7587     0.2247  -7.828 4.95e-15 ***
## FAVCyes                             0.6052     0.1549   3.907 9.33e-05 ***
## SCCyes                             -0.7817     0.3022  -2.586   0.0097 ** 
## family_history_with_overweightyes   1.2569     0.1622   7.749 9.24e-15 ***
## NCP                                -0.3394     0.0441  -7.696 1.40e-14 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 1899.6  on 2110  degrees of freedom
## Residual deviance: 1708.3  on 2106  degrees of freedom
## AIC: 1718.3
## 
## Number of Fisher Scoring iterations: 6

Phương trình hồi quy:

\[ \pi = \Phi\left(-1.7587 + 0.6052 \cdot \text{FAVC}_{\text{yes}} - 0.7817 \cdot \text{SCC}_{\text{yes}} + 1.2569 \cdot \text{FamilyHistory}_{\text{yes}} - 0.3394 \cdot \text{NCP} \right) \]

Trong đó:

  • \(\Phi(\cdot)\): là xác suất một cá nhân thuộc nhóm Obesity_Type_I

  • \(\pi\): là hàm phân phối tích lũy chuẩn tắc (standard normal CDF)

Diễn giải kết quả:

  • Hệ số chặn: \(\beta^0 = -1.7587\), với \(p < 0.001\)

Tương ứng với người không ăn nhiều calo, không theo dõi calo, không có người thân bị béo phì và có \(NCP = 0\). Khi đó, xác suất rơi vào nhóm béo phì độ I là:

\[ \pi_0 = \Phi(-1.7587) \approx 0.0393 \]

  • Hệ số FAVCyes:\(\beta^1 = 0.6052\), \(p = 9.33 \times 10^{-5}\)

Người có thói quen ăn nhiều calo sẽ có xác suất:

\[ \pi_{\text{FAVC}} = \Phi(-1.7587 + 0.6052) = \Phi(-1.1535) \approx 0.1243 \]

\[ \Delta \pi = 0.1243 - 0.0393 = 0.0850 \]

Tức là xác suất tăng khoảng 8.5 phần trăm.

  • Hệ số SCCyes:\(\beta^2 = -0.7817\), \(p = 0.0097\)

Người theo dõi calo có xác suất:

\[ \pi_{\text{SCC}} = \Phi(-1.7587 - 0.7817) = \Phi(-2.5404) \approx 0.0055 \]

\[ \Delta \pi = 0.0055 - 0.0393 = -0.0338 \]

Tức là xác suất giảm khoảng 3.38 phần trăm.

  • Hệ số family_history_with_overweightyes: \(\beta^3 = 1.2569\), \(p < 0.001\)

Người có tiền sử gia đình bị béo phì có xác suất:

\[ \pi_{\text{Family}} = \Phi(-1.7587 + 1.2569) = \Phi(-0.5018) \approx 0.3084 \]

\[ \Delta \pi = 0.3084 - 0.0393 = 0.2691 \]

Tức là xác suất tăng khoảng 26.91 phần trăm.

  • Hệ số NCP: \(\beta^4 = -0.3394\), \(p < 0.001\)

Với mỗi bữa ăn chính tăng thêm, log-probit giảm, kéo theo xác suất giảm. Ví dụ:

\[ \pi_{\text{NCP = 1}} = \Phi(-1.7587 - 0.3394 \cdot 1) = \Phi(-2.0981) \approx 0.0179 \]

\[ \pi_{\text{NCP = 3}} = \Phi(-1.7587 - 0.3394 \cdot 3) = \Phi(-2.777) \approx 0.0027 \]

\[ \Delta \pi = 0.0027 - 0.0393 = -0.0366 \]

Tức là ăn nhiều bữa hơn có thể giúp giảm nguy cơ mắc béo phì loại I.

Kết luận:

Kết quả từ mô hình hồi quy Probit cho thấy cả bốn yếu tố — thói quen ăn thực phẩm giàu calo (FAVC), hành vi theo dõi lượng calo tiêu thụ (SCC), tiền sử gia đình bị thừa cân (family_history_with_overweight), và số lượng bữa ăn chính mỗi ngày (NCP) — đều có ảnh hưởng rõ rệt đến xác suất rơi vào nhóm béo phì loại I.

Biến family_history_with_overweight tiếp tục là yếu tố nguy cơ mạnh nhất, làm tăng xác suất mắc béo phì lên tới gần 27 điểm phần trăm, có ý nghĩa thống kê cực kỳ cao. Tiếp theo là biến FAVC, với mức tăng gần 8.5 điểm phần trăm. Ngược lại, các hành vi bảo vệ như theo dõi calo (SCC) và ăn nhiều bữa hơn mỗi ngày (NCP) đều làm giảm đáng kể xác suất béo phì, lần lượt khoảng 3.43.7 điểm phần trăm.

Mô hình Probit không chỉ cung cấp ước lượng xác suất trực tiếp, mà còn giúp lượng hóa hiệu ứng thực tế của từng yếu tố lên nguy cơ béo phì. Đây là công cụ hữu ích để thiết kế các chính sách phòng chống bệnh lý, tập trung vào thay đổi hành vi và can thiệp sớm đối với những nhóm có nguy cơ di truyền cao.

6.4 Mô hình cloglog

Để đánh giá đồng thời ảnh hưởng của các yếu tố hành vi và di truyền đến khả năng bị béo phì (NObeyesdad), ta xây dựng mô hình hồi quy tuyến tính tổng quát với hàm liên kết cloglog (complementary log-log). Đây là lựa chọn phù hợp khi sự kiện xảy ra có xác suất nhỏ và quan hệ giữa xác suất và biến giải thích có tính chất bất đối xứng, thường gặp trong các tình huống dịch tễ học.

Phương trình hồi quy cloglog có dạng:

\[ \pi = 1 - \exp\left[ -\exp\left( \beta_0 + \beta_1 \cdot \text{FAVC}_{yes} + \beta_2 \cdot \text{SCC}_{yes} + \beta_3 \cdot \text{FamilyHistory}_{yes} + \beta_4 \cdot \text{NCP} \right) \right] \] Trong đó:

\(\pi\): xác suất một người bị béo phì

\(\beta_0\): hệ số chặn

\(\beta_1\), \(\beta_2\), \(\beta_3\), \(\beta_4\): hệ số hồi quy tương ứng với từng biến độc lập.

# Mô hình cloglog đa biến
model_cloglog_multi <- glm(NObeyesdad_bin ~ FAVC + SCC + family_history_with_overweight + NCP,
                           family = binomial(link = "cloglog"), data = l)

# Hiển thị kết quả mô hình
summary(model_cloglog_multi)
## 
## Call:
## glm(formula = NObeyesdad_bin ~ FAVC + SCC + family_history_with_overweight + 
##     NCP, family = binomial(link = "cloglog"), data = l)
## 
## Coefficients:
##                                   Estimate Std. Error z value Pr(>|z|)    
## (Intercept)                       -3.70428    0.48794  -7.592 3.16e-14 ***
## FAVCyes                            1.17636    0.30941   3.802 0.000144 ***
## SCCyes                            -1.80740    0.71856  -2.515 0.011893 *  
## family_history_with_overweightyes  2.49068    0.38431   6.481 9.12e-11 ***
## NCP                               -0.52808    0.06324  -8.351  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 1899.6  on 2110  degrees of freedom
## Residual deviance: 1700.6  on 2106  degrees of freedom
## AIC: 1710.6
## 
## Number of Fisher Scoring iterations: 6

Phương trình hồi quy có dạng:

\[ \log(-\log(1 - \pi)) = -3.7043 + 1.1764 \cdot \text{FAVC}_{yes} - 1.8074 \cdot \text{SCC}_{yes} + 2.4907 \cdot \text{FamilyHistory}_{yes} - 0.5281 \cdot \text{NCP} \]

Trong đó:

  • \(\pi\): xác suất bị béo phì.

  • Các hệ số ước lượng là log(-log(1 − π)) ứng với từng nhóm.

Diễn giải kết quả:

  • Hệ số chặn \(\beta_0 = -3.7043\), với \(p < 0.001\)
    Đây là log(-log(1 - π)) của nhóm tham chiếu: không ăn nhiều calo, không theo dõi calo, không có người thân béo phì, và NCP = 0.

\[ \pi_0 = 1 - \exp\left[-\exp(-3.7043)\right] \approx 0.0243 \]

  • Hệ số FAVC\(_{\text{yes}}\): \(\beta_1 = 1.1764\), với \(p = 0.000144\)
    Khi một người có thói quen ăn thực phẩm giàu calo:

\[ \pi_{FAVC} = 1 - \exp\left[-\exp(-3.7043 + 1.1764)\right] \approx 0.0676 \]

\[ \Delta \pi = 0.0676 - 0.0243 = 0.0433 \] Tức là xác suất tăng khoảng 4.33 phần trăm.

  • Hệ số SCC\(_{\text{yes}}\): \(\beta_2 = -1.8074\), với \(p = 0.0119\)
    Khi một người có thói quen theo dõi lượng calo:

\[ \pi_{\text{SCC}} = 1 - \exp\left[-\exp(-3.7043 - 1.8074)\right] \approx 0.0045 \]

\[ \Delta \pi = 0.0045 - 0.0243 = -0.0198 \] Tức là xác suất giảm khoảng 1.98 phần trăm.

  • Hệ số family_history_with_overweight\(_{\text{yes}}\): \(\beta_3 = 2.4907\), với \(p < 0.0001\)
    Đây là yếu tố nguy cơ mạnh nhất trong mô hình:

\[ \pi_{\text{Family}} = 1 - \exp\left[-\exp(-3.7043 + 2.4907)\right] \approx 0.1627 \]

\[ \Delta \pi = 0.1627 - 0.0243 = 0.1384 \] Tức là xác suất tăng khoảng 13.84 phần trăm.

  • Hệ số NCP: \(\beta_4 = -0.5281\), với \(p < 0.0001\)
    Tăng thêm mỗi bữa ăn chính làm giảm xác suất béo phì:

\[ \pi_{\text{NCP=1}} = 1 - \exp\left[-\exp(-3.7043 - 0.5281 \cdot 1)\right] \approx 0.0134 \]

\[ \pi_{\text{NCP=3}} = 1 - \exp\left[-\exp(-3.7043 - 0.5281 \cdot 3)\right] \approx 0.0043 \]

Tức là khi ăn 3 bữa thay vì 1 bữa, xác suất giảm từ 1.34% xuống 0.43%, tương đương giảm khoảng 0.91 phần trăm.

Kết luận:

Kết quả hồi quy sử dụng hàm liên kết complementary log-log (cloglog) cho thấy mô hình hoạt động ổn định và tất cả các biến đưa vào đều có ý nghĩa thống kê. Trong đó:

  • FAVC (ăn nhiều calo) và family_history_with_overweight (yếu tố di truyền) là hai yếu tố làm tăng rõ rệt xác suất rơi vào nhóm béo phì độ I, với mức tăng lần lượt khoảng 4.3313.84 phần trăm.
  • Ngược lại, SCC (theo dõi calo) và NCP (ăn nhiều bữa hơn mỗi ngày) đều có hệ số âm, cho thấy vai trò bảo vệ của các hành vi này, với mức giảm lần lượt khoảng 1.980.91 phần trăm.

Mô hình cloglog đặc biệt phù hợp khi xác suất cơ bản ở nhóm tham chiếu là nhỏ (π ≈ 0.02), như trong trường hợp này. Đây là bằng chứng định lượng quan trọng cho các chính sách can thiệp sớm, đặc biệt với nhóm có nguy cơ di truyền cao, đồng thời nhấn mạnh hiệu quả tiềm năng của thay đổi hành vi trong việc phòng ngừa béo phì.

6.5 Đánh giá mô hình

Bảng tổng hợp các mô hình hồi quy đa biến giữa NObeyesdad và FAVC, SCC, family_history_with_overweight, NCP
Mô hình Hàm liên kết (Link function) AIC Lụa chọn mô hình
Hồi quy tuyến tính (Linear Regression) Identity (Gaussian) 1682.1 Không chọn
Hồi quy logistic (Logit) Logit 1711.4 Chọn
Hồi quy probit Probit 1718.3 Không chọn
Hồi quy cloglog Complementary log-log 1710.6 Không chọn

Kết luận:

Trong quá trình phân tích hồi quy đa biến nhằm đánh giá ảnh hưởng của thói quen ăn uống và yếu tố di truyền đến nguy cơ rơi vào nhóm béo phì cấp độ I (Obesity_Type_I), bốn mô hình đã được so sánh: hồi quy tuyến tính, logit, probit và cloglog. Hồi quy tuyến tính tuy có AIC thấp nhất (1682.1) nhưng không phù hợp khi biến phụ thuộc là nhị phân, do có thể tạo ra giá trị dự đoán nằm ngoài khoảng xác suất [0, 1]. Trong ba mô hình nhị phân, cloglog có AIC thấp nhất (1710.6), nhỉnh hơn logit (1711.4) và probit (1718.3). Tuy vậy, sự khác biệt AIC là không đáng kể, trong khi cloglog khó diễn giải trực quan và ít phổ biến hơn trong lĩnh vực hành vi sức khỏe.

Ngược lại, mô hình logit không chỉ có chỉ số AIC cạnh tranh mà còn thể hiện các hệ số ổn định, sai số chuẩn thấp và ý nghĩa thống kê rõ ràng. Quan trọng hơn, logit cho phép diễn giải trực tiếp thông qua odds ratio — một công cụ mạnh trong việc truyền đạt kết quả đến các đối tượng thực hành và hoạch định chính sách. Do đó, mô hình hồi quy logit là lựa chọn phù hợp và hiệu quả nhất để phân tích mối quan hệ giữa các yếu tố nguy cơ và xác suất mắc béo phì loại I trong nghiên cứu này.

6.6 Dự báo

pred_logit <- predict(model_logit_multi, type = "response")
library(pROC)
roc_logit <- roc(l$NObeyesdad_bin, pred_logit)

ggroc(list(
  Logistic = roc_logit
)) +
  geom_segment(aes(x = 1, y = 0, xend = 0, yend = 1),
               color = "gray", linetype = "dashed") +
  labs(
    title = "Đường cong ROC",
    subtitle = paste0(
      "AUC Logistic = ", round(auc(roc_logit), 5)
    )
  ) +
  theme_minimal() + 
  theme(
    plot.title = element_text(hjust = 0.5, face = "bold", size = 14),
    plot.subtitle = element_text(hjust = 0.5)) +
  scale_color_manual(values = c("#00DD00"))

Biểu đồ ROC thể hiện hiệu suất phân loại của mô hình hồi quy logistic trong việc dự đoán xác suất một cá nhân thuộc nhóm béo phì cấp độ I. Đường cong nằm phía trên đường chẩn 45 độ cho thấy mô hình có khả năng phân biệt nhất định giữa hai nhóm (Obesity_Type_I và không). Diện tích dưới đường cong (AUC) đạt khoảng 0.73695, cho thấy mô hình có độ chính xác trung bình khá trong việc phân loại đúng.

Tuy chưa đạt mức AUC > 0.8 để được coi là tốt, nhưng kết quả này vẫn cho thấy mô hình có khả năng phân biệt rõ ràng hơn so với việc phân loại ngẫu nhiên. Việc cải thiện độ chính xác có thể đạt được nếu thêm các biến giải thích quan trọng khác hoặc xử lý mất cân đối dữ liệu.

thresh <- coords(roc_logit, "best", ret = "threshold")
pred_logit_label <- ifelse(pred_logit >= as.numeric(thresh) , 1, 0)
# ma trận nhầm lẫn
library(caret)
# Logistic
cm_logit <- confusionMatrix(factor(pred_logit_label), factor(l$NObeyesdad_bin), positive = "1")

cm_logit_tb <- as.data.frame(cm_logit$table)

#visualize
ggplot(cm_logit_tb, aes(x = Reference, y = Prediction, fill = Freq)) +
    geom_tile(color = "black") + 
    scale_fill_gradient(low = "blue", high = "red") + 
    geom_text(aes(label = Freq), 
            hjust = 0.5, colour = "black", size = 5) +
    labs(
      title = "Logistic", 
      x = "Reference", 
      y = "Prediction") +
    theme_minimal() + 
    theme(
      plot.title = element_text(hjust = 0.5, face = "bold", size = 14),
      axis.text.x = element_text(angle = 0, hjust = 1)
      )

Biểu đồ ma trận nhầm lẫn cho thấy mô hình logistic đã bắt đầu nhận diện được một số trường hợp thuộc nhóm béo phì loại I. Cụ thể, mô hình dự đoán đúng 18 người thuộc nhóm này (True Positive), đồng thời dự đoán sai 333 người không thuộc nhóm nhưng bị xếp nhầm (False Positive). Tuy nhiên, vẫn còn tới 681 trường hợp béo phì loại I bị bỏ sót (False Negative), cho thấy khả năng nhận diện nhóm cần quan tâm còn khá hạn chế.

Mặc dù độ chính xác tổng thể (Accuracy) có thể vẫn ở mức tương đối cao, kết quả này cho thấy mô hình gặp khó khăn trong việc xử lý sự mất cân bằng lớp trong dữ liệu. Để cải thiện khả năng dự đoán nhóm nguy cơ, có thể xem xét các phương pháp như điều chỉnh lại tập dữ liệu (oversampling/undersampling), áp dụng kỹ thuật tăng cường (boosting), hoặc lựa chọn thuật toán phù hợp hơn với đặc điểm mất cân đối của bài toán. Việc này sẽ giúp mô hình không chỉ đạt độ chính xác tổng thể, mà còn đảm bảo khả năng phát hiện hiệu quả các nhóm đối tượng quan trọng trong thực tế.

data.frame(
  Model = c("Logistic"),
  Accuracy = c(round(cm_logit[["overall"]][["Accuracy"]],3)),
  Precision = c(round(cm_logit[["byClass"]][["Precision"]],3)),
  Recall = c(round(cm_logit[["byClass"]][["Recall"]],3)),
  F1_Score = c(round(cm_logit[["byClass"]][["F1"]],3))
) %>%
  kableExtra::kable(
    caption = "<b style='display:block; text-align:center;'>Các chỉ tiêu đánh giá kết quả dự báo</b>",
    escape = FALSE, align = 'c' 
  )
Các chỉ tiêu đánh giá kết quả dự báo
Model Accuracy Precision Recall F1_Score
Logistic 0.48 0.236 0.949 0.378

Kết quả đánh giá mô hình logistic sau khi áp dụng ngưỡng phân loại tối ưu (từ chỉ số Youden) cho thấy diện tích dưới đường cong ROC (AUC) đạt khoảng 0.737, phản ánh khả năng phân biệt giữa hai nhóm ở mức khá. Đáng chú ý, sau khi hiệu chỉnh ngưỡng, recall (độ nhạy) tăng mạnh lên 0.949, cho thấy mô hình có khả năng phát hiện gần như toàn bộ các trường hợp thuộc nhóm béo phì loại I. Tuy nhiên, điều này đánh đổi bằng precision (độ chính xác của dự đoán dương) khá thấp — chỉ 0.236 — do số lượng lớn các dự đoán dương là sai (dự đoán béo phì nhưng thực tế không phải). Hệ số F1 đạt 0.378, cho thấy hiệu quả tổng thể trong phát hiện nhóm quan trọng còn hạn chế.

Mặc dù accuracy giảm xuống còn 0.48, nhưng đây là một kết quả phản ánh đúng hơn năng lực thực sự của mô hình trong bài toán mất cân bằng lớp. Việc tối ưu ngưỡng giúp mô hình tập trung vào việc phát hiện nhóm nguy cơ (positive class), điều rất quan trọng trong bối cảnh y tế công cộng. Để tiếp tục cải thiện, có thể kết hợp điều chỉnh ngưỡng với các kỹ thuật khác như resampling (SMOTE, ROSE), sử dụng trọng số lớp, hoặc thử nghiệm các thuật toán mạnh hơn như XGBoost, Random Forest hoặc ensemble learning. Những bước này sẽ giúp cải thiện độ cân bằng giữa precision và recall, từ đó nâng cao giá trị ứng dụng thực tiễn của mô hình.

Phần 7: Tổng kết và Thảo luận

7.1 Tóm tắt những phát hiện chính

Phân tích dữ liệu cho thấy các yếu tố hành vi và di truyền có ảnh hưởng đáng kể đến xác suất một cá nhân rơi vào tình trạng béo phì, đặc biệt là nhóm Obesity_Type_I. Trong các mô hình hồi quy đơn biến cũng như đa biến, các biến FAVC (thói quen tiêu thụ thực phẩm giàu calo), SCC (theo dõi lượng calo tiêu thụ), family_history_with_overweight (tiền sử gia đình bị thừa cân) và NCP (số bữa ăn chính mỗi ngày) đều thể hiện ảnh hưởng rõ rệt. Đặc biệt, FAVC và family_history_with_overweight có hệ số dương với mức ý nghĩa thống kê rất cao (p < 0.001) trong hầu hết các mô hình (logit, probit, cloglog), cho thấy đây là những yếu tố nguy cơ mạnh làm tăng xác suất rơi vào nhóm béo phì. Ngược lại, SCC và NCP có hệ số âm, phản ánh xu hướng làm giảm nguy cơ, đặc biệt NCP cho thấy ảnh hưởng đáng kể và ổn định trên tất cả các mô hình nhị phân.

Khi so sánh hiệu suất giữa các mô hình hồi quy đa biến, logit và probit tiếp tục thể hiện sự ổn định cao với hệ số ước lượng hợp lý, sai số chuẩn nhỏ và ý nghĩa thống kê rõ ràng. Mô hình cloglog tuy có AIC cạnh tranh nhất trong nhóm mô hình nhị phân (1710.6), nhưng xét về diễn giải và tính ổn định thì không vượt trội. Mô hình tuyến tính dù có AIC thấp nhất (1682.1) nhưng không phù hợp về mặt lý thuyết do biến phụ thuộc là nhị phân, dễ dẫn đến dự đoán ngoài khoảng [0,1]. Do đó, mô hình logit được lựa chọn là phù hợp nhất để tiếp tục phân tích và giải thích mối quan hệ giữa các yếu tố hành vi, di truyền và nguy cơ mắc béo phì độ I trong nghiên cứu này.

7.2 Hạn chế của phân tích

Một trong những hạn chế lớn nhất của phân tích này là phân phối không cân đối của dữ liệu, đặc biệt với nhóm Obesity_Type_III chiếm tỷ lệ rất nhỏ trong tổng thể. Việc mất cân đối này khiến mô hình dễ bị sai lệch hoặc mất ổn định, đặc biệt là đối với các mô hình như cloglog vốn nhạy cảm với xác suất thấp ở nhóm tham chiếu. Điều này lý giải tại sao cloglog tuy cho AIC thấp trong mô hình đa biến nhưng lại sinh ra các hệ số ước lượng thiếu tin cậy.

Bên cạnh đó, phân tích chưa kiểm soát các yếu tố gây nhiễu tiềm ẩn như giới tính, độ tuổi, mức độ hoạt động thể chất hoặc tình trạng kinh tế - xã hội. Đây đều là các biến quan trọng có thể ảnh hưởng đồng thời đến cả biến độc lập và biến phụ thuộc, làm lệch kết quả phân tích nếu không được đưa vào mô hình.

Ngoài ra, một hạn chế khác là chưa thực hiện đầy đủ các kiểm định chẩn đoán mô hình, chẳng hạn như kiểm định Hosmer–Lemeshow để đánh giá mức độ phù hợp tổng thể. Mặc dù mô hình đã được kiểm tra qua đường cong ROC với AUC = 0.73695 cho mô hình logit, nhưng việc bổ sung thêm các kiểm định khác sẽ giúp củng cố độ tin cậy của kết quả. Cuối cùng, nguy cơ đa cộng tuyến giữa các biến độc lập – đặc biệt là các yếu tố hành vi có thể liên quan với nhau – vẫn có thể tồn tại và ảnh hưởng đến độ chính xác của các hệ số hồi quy và mức ý nghĩa thống kê.

7.3 Đề xuất

Dựa trên các phát hiện và hạn chế đã nêu, nghiên cứu đề xuất ưu tiên sử dụng mô hình logit hoặc probit cho các phân tích tiếp theo liên quan đến biến phụ thuộc nhị phân như tình trạng béo phì. Hai mô hình này không chỉ cho kết quả ổn định mà còn có cơ sở lý thuyết rõ ràng và dễ diễn giải, đặc biệt trong các lĩnh vực khoa học xã hội và y tế cộng đồng.

Bên cạnh đó, cần mở rộng thêm các biến độc lập trong mô hình như tuổi, giới tính, mức độ vận động thể chất, tình trạng stress hoặc thời lượng giấc ngủ. Những yếu tố này không chỉ đóng vai trò là biến dự đoán mà còn có thể là biến kiểm soát, giúp tăng độ chính xác cho mô hình phân tích.

Ngoài ra, trong trường hợp phân phối dữ liệu bị mất cân đối nghiêm trọng, có thể áp dụng các kỹ thuật xử lý dữ liệu như oversampling, undersampling hoặc sử dụng trọng số để điều chỉnh ảnh hưởng giữa các nhóm. Những phương pháp này sẽ giúp mô hình học được tốt hơn từ nhóm thiểu số (ví dụ như Obesity_Type_III).

Cuối cùng, để cải thiện độ chính xác và độ phân biệt của mô hình, nên kết hợp thêm các thước đo đánh giá hiệu năng như AUC, F1-score, Precision, Recall… Đồng thời, có thể cân nhắc áp dụng các thuật toán học máy như Random Forest hoặc XGBoost nếu mục tiêu là tối đa hóa khả năng phân loại chứ không chỉ dừng lại ở mô hình hóa tuyến tính cổ điển.