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
Gói deltatest vừa phát hành phiên bản 0.2.0 với hai cập nhật quan trọng: phương thức tidy() cho đối tượng deltatest và sửa lỗi tính giá trị p cho kiểm định một phía. Trước khi đi vào chi tiết, hãy nhắc lại nhanh mục đích của gói này. deltatest giải quyết bài toán gì deltatest cung cấp hàm deltatest() để thực hiện kiểm định Z hai mẫu dựa trên phương pháp Delta. Gói này thiết kế cho bối cảnh phổ biến trong thử nghiệm A/B trực tuyến: ngẫu nhiên hóa ở mức người dùng nhưng chỉ số đo lường ở đơn vị tốt hơn như lượt xem trang hoặc phiên làm việc. Trong thiết lập này, các kiểm định ngây thơ (Z-test chuẩn, kiểm định chi-bình phương, kiểm định hiệu tỷ lệ) thường thấp 추정 độ không chắc chắn vì các quan sát trong cùng một người dùng không độc lập. deltatest() khắc phục vấn đề này bằng bộ ước lượng phương sai dựa trên phương pháp Delta.
Trong bối cảnh các tổ chức chính phủ và tổ chức phi lợi nhuận ngày càng cần công cụ trực quan hóa dữ liệu minh bạch, mở và bền vững, việc lựa chọn công cụ phù hợp không chỉ ảnh hưởng đến chất lượng báo cáo mà còn quyết định tính khả thi trong dài hạn. D3po và Tabler – hai dự án mã nguồn mở được phát triển bởi pacha.dev – chính là giải pháp lý tưởng cho những ai cần biểu đồ tương tác mà không lo rủi ro pháp lý từ giấy phép GPL. D3po là một gói R thay thế miễn phí cho Highcharter, với thiết kế hướng đến sự đơn giản và hiệu suất cao. Thay vì bao gồm hàng trăm tùy chọn phức tạp, D3po tập trung vào các tính năng cốt lõi: biểu đồ dạng cây (treemap), biểu đồ đường, biểu đồ cột – tất cả đều được xây dựng trên nền tảng JavaScript mạnh mẽ nhưng không yêu cầu giấy phép trả phí cho mục đích tổ chức. Điều này đặc biệt quan trọng khi các cơ quan nhà nước hoặc NGO phải tuân thủ nghiêm ngặt về nguồn gốc phần mềm. Một trong những câu hỏi thường gặp sau khi giới thiệu D3po là: Liệu có thể tạo biểu đồ treemap lồng ghép (nested treemap) không? Câu trả lời là có. Trong gói demo được cung cấp, người dùng có thể khám phá cách xây dựng cấu trúc phân cấp rõ ràng, từ cấp quốc gia đến tỉnh thành, thể hiện dữ liệu phân bổ ngân sách hoặc dân số theo từng tầng. Sự linh hoạt này giúp người dùng truyền tải thông tin phức tạp một cách trực quan mà không cần đến các công cụ thương mại đắt đỏ.
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: [email protected]
Hotline: 03.57.94.7680 (Mrs. Hà)
Mạng xã hội