messenger_logo
Liên hệ qua Messenger
SciEco

Tạo bảng tùy chỉnh cho nhiều mô hình hồi quy trong stata 17: sức mạnh của bộ lệnh collect

I
IEFPA
Ngày viết: 20/07/2026

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 diabetes

Bộ 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.sex

Sau 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 MyModels

Khi 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.sex

Lú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 dims

Trong 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 result

Chiề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 colname

Nguyê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 ic

Kiể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 preview

Xuấ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, replace

Tà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.


Bài viết khác
Trong bài viết trước, chúng ta đã khám phá ba phương pháp cơ bản để thực thi mã Python trực tiếp trong Stata. Mặc dù các ví dụ ban đầu khá đơn giản, chúng đã tạo nền tảng vững chắc để bạn bắt đầu kết hợp hai công cụ này. Tuy nhiên, sức mạnh thực sự của Python lại đến từ hệ sinh thái hàng nghìn thư viện mã nguồn mở phong phú. Bài viết này sẽ hướng dẫn bạn chi tiết cách quản lý, tải xuống và cài đặt các thư viện Python để mở rộng tối đa khả năng xử lý dữ liệu trong Stata. Kiểm tra cấu hình Python trong Stata Trước khi tiến hành cài đặt các gói mở rộng, chúng ta cần xác nhận rằng Python đã được tích hợp chính xác vào hệ thống và Stata đã sẵn sàng làm việc với môi trường này. Từ cửa sổ lệnh của Stata, bạn hãy chạy lệnh kiểm tra cấu hình:
Khi trình bày kết quả nghiên cứu, việc tạo ra các bảng biểu trực quan và đúng chuẩn xuất bản là tiêu chí vô cùng quan trọng. Trong các phiên bản Stata trước đây, việc định dạng bảng thường đòi hỏi nhiều thao tác thủ công hoặc chỉnh sửa lại trên các phần mềm xử lý văn bản. Stata 17 đã giải quyết triệt để thách thức này bằng hệ thống lệnh collect, cho phép người dùng tùy biến toàn bộ cấu trúc, nhãn hiển thị, đường viền và xuất bảng trực tiếp sang các định dạng tài liệu phổ biến. Khởi đầu với bảng thống kê cơ bản Để hiểu rõ cơ chế hoạt động của collect, hãy bắt đầu bằng việc tạo một bảng thống kê mô tả cơ bản kết hợp giữa hai biến số giới tính và huyết áp cao. Lệnh table dưới đây thu thập các thông số bao gồm tần suất, tỷ lệ phần trăm, giá trị trung bình và độ lệch chuẩn của tuổi tác.
SciEco
Science for Economics
Định hướng đào tạo phân tích dữ liệu, xây dựng chính sách, tối ưu hoá danh mục tài chính cá nhân và dự báo thị trường.
Liên hệ
Địa chỉ: Số 60, ngõ 41, Phố Thái Hà, Trung Liệt, Đống Đa, Hà Nội (Google Map)
Email: science.for.economics@gmail.com
Hotline: 03.57.94.7680 (Mrs. Hà)
Mạng xã hội