Việc trình bày kết quả từ nhiều mô hình hồi quy khác nhau trên cùng một bảng dữ liệu là yêu cầu thường gặp trong các báo cáo nghiên cứu khoa học. Trong Stata 17, thay vì phải sao chép thủ công hoặc sử dụng các công cụ bên ngoài, bạn có thể tận dụng bộ lệnh collect để tự động hóa hoàn toàn quy trình này. Bài viết này sẽ hướng dẫn bạn cách xây dựng một bảng so sánh kết quả của ba mô hình hồi quy logistic, tích hợp các tiêu chí thông tin và xuất trực tiếp sang định dạng tài liệu PDF chuyên nghiệp.
Khởi động với bộ dữ liệu sức khỏe quốc gia
Để bắt đầu hành trình, chúng ta sẽ mở bộ dữ liệu khảo sát sức khỏe và dinh dưỡng quốc gia bằng lệnh webuse. Sau đó, chúng ta kiểm tra các biến số cần thiết bao gồm huyết áp cao, tuổi, giới tính và tình trạng tiểu đường.
1webuse nhanes2l
2describe highbp age sex diabetesBộ dữ liệu chứa các thông tin quan trọng bao gồm biến nhị phân chỉ thị tình trạng cao huyết áp, tuổi của đối tượng nghiên cứu tính theo năm, giới tính và trạng thái tiểu đường.
Chiến lược xây dựng bảng biểu hoàn toàn mới
Chúng ta sẽ xây dựng ba mô hình hồi quy logistic cho biến kết quả nhị phân là cao huyết áp. Với mỗi mô hình, chúng ta ước lượng tỉ số chênh và sai số chuẩn bằng lệnh logistic, sau đó tính toán tiêu chí thông tin AIC và BIC bằng lệnh estat ic. Bảng tổng hợp cuối cùng sẽ gom thông tin của ba mô hình từ sáu lệnh khác nhau.
Để thực hiện điều này một cách có hệ thống, chúng ta áp dụng một chiến lược mới: sử dụng lệnh collect get để thu thập thông tin từ mỗi lệnh chạy, sau đó dùng collect layout để định nghĩa cách trình bày trực quan của bảng.
Hãy thử nghiệm một ví dụ đơn giản với mô hình đầu tiên. Chúng ta thêm từ khóa collect get phía trước lệnh hồi quy logistic để Stata tự động ghi nhận kết quả:
1collect get: logistic highbp c.age i.sexSau khi Stata xử lý xong, hệ thống sẽ lưu các kết quả vào một bộ sưu tập mặc định. Bây giờ, chúng ta dùng lệnh collect layout để định vị các hàng và cột. Ở đây, hàng sẽ hiển thị tên các biến số, còn cột sẽ chứa hệ số hồi quy và sai số chuẩn được lấy từ chiều kết quả:
1collect layout (colname) (result[_r_b _r_se])Bảng cơ bản đã hiện ra với hai cột rõ ràng cho hệ số hồi quy và sai số chuẩn. Kết quả trả về cũng thông báo rằng Stata đã tạo ra một bộ sưu tập mặc định mang tên default.
Quản lý bộ sưu tập và chỉ định chiều dữ liệu
Để xây dựng một bảng biểu phức tạp hơn, tốt nhất chúng ta nên dọn dẹp bộ nhớ và tự tạo một bộ sưu tập riêng. Chúng ta sử dụng lệnh collect clear để xóa các bộ sưu tập cũ và collect create để khởi tạo một bộ sưu tập mới mang tên MyModels.
1collect clear
2collect create MyModelsKhi chạy mô hình hồi quy, chúng ta có thể gắn thẻ nhãn cho từng mô hình cụ thể bằng tùy chọn tag để dễ dàng quản lý khi gộp chung vào một bảng. Ngoài ra, thay vì thu thập toàn bộ các thông số không cần thiết, chúng ta chỉ cần yêu cầu Stata lưu lại hệ số hồi quy và sai số chuẩn bằng cách chỉ định cụ thể phía sau từ khóa collect.
1collect _r_b _r_se, name(MyModels) tag(model[(1)]) : logistic highbp c.age i.sexLúc này, chúng ta có thể hiển thị kết quả của mô hình đầu tiên dưới dạng một cột duy nhất bằng cách lồng ghép chiều tên biến và chiều kết quả ở phần hàng, còn cột sẽ đại diện cho mô hình thứ nhất:
1collect layout (colname#result) (model[(1)]), name(MyModels)Khám phá sâu hơn về cấu trúc của bộ lệnh collect layout
Để hiểu tại sao cấu trúc hàng và cột lại hoạt động như vậy, chúng ta có thể kiểm tra danh sách các chiều dữ liệu hiện có trong bộ sưu tập bằng lệnh collect dims:
1collect dimsTrong số các chiều dữ liệu trả về, chiều mang tên result chứa tới 43 cấp độ khác nhau. Chúng ta có thể liệt kê tất cả các cấp độ này bằng lệnh:
1collect levelsof resultChiều này lưu trữ mọi thông số thống kê từ số lượng quan sát, kiểm định chi-square cho đến các hệ số hồi quy. Tương tự, chiều colname chứa tên của các biến số xuất hiện trong mô hình:
1collect levelsof colnameNguyên lý hoạt động của collect layout là chỉ hiển thị những ô dữ liệu mà tại đó có sự giao cắt giá trị giữa các cấp độ hàng và cột được chỉ định. Nhờ đó, chúng ta có thể linh hoạt sắp đặt hệ số hồi quy nằm ngay trên sai số chuẩn của từng biến số trong bảng biểu của mình.
Thu thập tiêu chí thông tin từ nhiều lệnh khác nhau
Bên cạnh các hệ số từ mô hình hồi quy, chúng ta thường cần bổ sung các chỉ số đánh giá độ phù hợp của mô hình như AIC và BIC. Sau khi thực hiện lệnh hồi quy, lệnh estat ic sẽ tính toán các chỉ số này và lưu trữ chúng trong một ma trận hệ thống có tên là r(S).
Chúng ta kiểm tra cấu trúc của ma trận này bằng lệnh matlist:
1return list
2matlist r(S)Để trích xuất giá trị cụ thể từ ma trận, chúng ta sử dụng cú pháp chỉ số ma trận thông thường. Ví dụ, để lấy giá trị BIC nằm ở cột thứ sáu, chúng ta viết:
1display r(S)[1,"BIC"]Bây giờ, chúng ta tiến hành thu thập hai chỉ số này và lưu trữ chúng vào cùng một nhãn mô hình trong bộ sưu tập MyModels:
1collect AIC=r(S)[1,"AIC"] BIC=r(S)[1,"BIC"], name(MyModels) tag(model[(1)]) : estat icĐể hiển thị chúng ở cuối bảng mà không bị lồng vào từng biến số, chúng ta khai báo thêm các chỉ số này vào phần hàng của lệnh thiết lập bố cục mà không dùng toán tử liên kết:
1collect layout (colname#result result[AIC BIC]) (model[(1)]), name(MyModels)Tích hợp thêm các mô hình phức tạp vào bảng so sánh
Tiếp theo, chúng ta sẽ thêm mô hình thứ hai bao gồm cả số hạng tương tác giữa tuổi và giới tính. Chúng ta lưu các kết quả hồi quy và tiêu chí thông tin của mô hình này vào nhãn thứ hai của chiều mô hình:
1collect _r_b _r_se, name(MyModels) tag(model[(2)]) : logistic highbp c.age##i.sex
2collect AIC=r(S)[1,"AIC"] BIC=r(S)[1,"BIC"], name(MyModels) tag(model[(2)]) : estat icĐối với mô hình thứ ba, chúng ta bổ sung thêm biến phân loại chỉ thị tình trạng tiểu đường và lưu vào nhãn thứ ba:
1collect _r_b _r_se, name(MyModels) tag(model[(3)]) : logistic highbp c.age##i.sex i.diabetes
2collect AIC=r(S)[1,"AIC"] BIC=r(S)[1,"BIC"], name(MyModels) tag(model[(3)]) : estat icKiểm tra cấu trúc bảng tổng hợp cho cả ba mô hình bằng lệnh:
1collect layout (colname#result result[AIC BIC]) (model), name(MyModels)Làm đẹp bảng biểu bằng các lệnh định dạng phong cách
Để bảng kết quả trông chuyên nghiệp hơn, chúng ta cần tùy chỉnh lại các chi tiết như ẩn đi các danh mục cơ sở của biến phân loại, thay đổi ký hiệu phân tách của số hạng tương tác thành dấu nhân, loại bỏ các đường kẻ dọc không cần thiết, và định dạng số thập phân. Đặc biệt, chúng ta sẽ bao bọc các sai số chuẩn trong dấu ngoặc đơn.
1collect style showbase off
2collect style row stack, spacer delimiter(" x ")
3collect style cell border_block, border(right, pattern(nil))
4collect style cell, nformat(%5.2f)
5collect style cell result[AIC BIC], nformat(%8.0f)
6collect style cell result[_r_se], sformat("(%s)")
7collect style header result[AIC BIC], level(label)Chúng ta cũng tiến hành căn giữa dữ liệu trong các ô và tiêu đề cột, ẩn nhãn của hàng kết quả để bảng gọn gàng hơn, đồng thời nới rộng khoảng cách giữa các cột để tăng tính dễ đọc:
1collect style cell cell_type[item column-header], halign(center)
2collect style header result, level(hide)
3collect style column, extraspace(1)
4collect previewXuất bảng biểu ra định dạng tài liệu PDF chuyên nghiệp
Để chia sẻ kết quả nghiên cứu, chúng ta có thể xuất bảng biểu trực tiếp ra một tài liệu PDF bằng cách sử dụng bộ lệnh putpdf. Quy trình này tương tự như khi làm việc với tài liệu Word nhưng có một số điểm tùy biến riêng biệt về phông chữ và căn lề.
Chúng ta thiết lập tiêu đề trang với phông chữ lớn, viết một đoạn văn ngắn giới thiệu về nghiên cứu, sau đó cấu hình chiều rộng của bảng chiếm 60 phần trăm trang giấy và thụt lề một inch từ lề trái. Chúng ta cũng thêm một dòng ghi chú giải thích ở chân bảng.
1putpdf clear
2putpdf begin
3putpdf paragraph, font("Calibri Light",26) halign(center)
4putpdf text ("Hypertension in the United States")
5putpdf paragraph, font("Calibri Light",14) halign(left)
6putpdf text ("The National Health and Nutrition Examination Survey (NHANES)")
7putpdf paragraph
8putpdf text ("Hypertension is a major cause of morbidity and mortality in ")
9putpdf text ("the United States. This report will explore the predictors ")
10putpdf text ("of hypertension using the NHANES dataset.")
11collect style putpdf, width(60%) indent(1 in) title("Table 3: Logistic Regression Models for Hypertension Status") note("Note: Odds ratio (standard error)")
12putpdf collect
13putpdf save MyTable3.pdf, replaceTài liệu PDF được tạo ra sẽ có cấu trúc trình bày chuẩn mực và giao diện trực quan cực kỳ chuyên nghiệp như hình ảnh minh họa dưới đây.

✨ Giá trị đắt giá: Bằng cách làm chủ bộ lệnh collect trong Stata 17, bạn không chỉ tiết kiệm được hàng giờ đồng hồ định dạng thủ công mà còn xây dựng được một quy trình nghiên cứu có thể tái lặp hoàn toàn. Mọi thay đổi về dữ liệu hay mô hình hồi quy đều sẽ tự động được cập nhật chính xác vào báo cáo PDF cuối cùng chỉ với một lần chạy mã nguồn.
Hãy thử áp dụng quy trình trên để xây dựng bảng so sánh cho ba mô hình hồi quy tuyến tính sử dụng lệnh regress với biến phụ thuộc là huyết áp tâm thu. Đừng quên tích hợp thêm hệ số R-square hiệu chỉnh vào cuối bảng thay vì các tiêu chí AIC hay BIC để đánh giá độ giải thích của mô hình.


