messenger_logo
Liên hệ qua Messenger
SciEco

Mô hình hỗn hợp đa cấp phi tuyến: hướng dẫn ứng dụng lệnh menl trong stata

I
IEFPA
Ngày viết: 23/03/2026

Giả sử bạn đang làm việc với một mô hình có các tham số mang tính phi tuyến. Đó có thể là mô hình tăng trưởng của một cái cây với mức tiệm cận đạt giá trị tối đa, hoặc mô hình nồng độ huyết thanh của một loại thuốc tăng nhanh đến mức đỉnh rồi giảm dần theo hàm mũ. Thông thường, bạn sẽ dùng hồi quy phi tuyến để khớp mô hình này. Nhưng vấn đề đặt ra là: điều gì sẽ xảy ra nếu bạn có các phép đo lặp lại cho cùng một cái cây hoặc các mức huyết thanh được đo nhiều lần trên cùng một bệnh nhân? Bạn sẽ cần tính toán đến sự tương quan dữ liệu bên trong cùng một cá thể. Thậm chí, bạn có thể cho rằng mỗi cái cây có một mức tăng trưởng tiệm cận của riêng nó. Đây chính là lúc bạn cần đến các mô hình hỗn hợp phi tuyến, hay còn gọi là mô hình phân cấp phi tuyến hoặc mô hình đa cấp phi tuyến.

Giới thiệu về mô hình hỗn hợp phi tuyến

Lệnh menl được giới thiệu trong Stata giúp chúng ta khớp các mô hình hỗn hợp phi tuyến một cách dễ dàng. Các mô hình phi tuyến cổ điển thường giả định rằng mỗi cá thể chỉ có một quan sát và các cá thể hoàn toàn độc lập với nhau. Bạn có thể xem mô hình hỗn hợp phi tuyến là một sự mở rộng của mô hình phi tuyến cho trường hợp nhiều phép đo được thực hiện trên cùng một cá thể và các quan sát trong cùng một cá thể này thường có tính tương quan.

Bạn cũng có thể coi đây là dạng tổng quát hóa của mô hình hỗn hợp tuyến tính, trong đó một số hoặc tất cả các tác động ngẫu nhiên được đưa vào mô hình theo cách phi tuyến. Dù tiếp cận theo cách nào, các mô hình này đều được sử dụng để mô tả một biến phản hồi dưới dạng một hàm phi tuyến của các hiệp biến, đồng thời kiểm soát sự tương quan giữa các quan sát trên cùng một cá thể.

Khám phá dữ liệu tăng trưởng của cây

Chúng ta sẽ phân tích một bộ dữ liệu về chu vi thân của năm cây cam khác nhau. Dữ liệu này đo lường chu vi thân cây tính bằng milimet trong bảy thời điểm khác nhau, trải dài trong khoảng thời gian sinh trưởng chừng bốn năm. Mục tiêu là lập mô hình tăng trưởng của những cây cam này. Trước tiên, hãy vẽ biểu đồ dữ liệu để có cái nhìn trực quan.

1. webuse orange
2. twoway scatter circumf age, connect(L) ylabel(#6)

Biểu đồ cho thấy có sự biến thiên nhất định trong các đường cong sinh trưởng, nhưng nhìn chung cả năm cây đều có chung một hình dạng tổng thể. Cụ thể, mức độ tăng trưởng có xu hướng đi ngang về giai đoạn cuối. Từ dữ liệu này, một cấu trúc mô hình tăng trưởng phi tuyến đã được đề xuất dựa trên ba tham số chính.

Các tham số của mô hình hỗn hợp phi tuyến thường có ý nghĩa diễn giải khoa học rõ ràng và tạo thành nền tảng cho các câu hỏi nghiên cứu. Trong mô hình này, tham số phi 1 đại diện cho chu vi thân cây tiệm cận trung bình khi tuổi của cây tiến tới vô cực. Tham số phi 2 là độ tuổi trung bình mà tại đó cây đạt được một nửa chu vi thân cây tiệm cận hay còn gọi là chu kỳ bán sinh. Tham số phi 3 đóng vai trò là tham số tỷ lệ.

Phân tích mô hình bỏ qua sự tương quan

Bây giờ, hãy thử tạm thời bỏ qua những hậu quả của việc không kiểm soát sự tương quan và tính không đồng nhất tiềm ẩn giữa các quan sát, chẳng hạn như ước lượng độ không chắc chắn kém chính xác hơn hoặc các kiểm định giả thuyết yếu hơn. Thay vào đó, chúng ta sẽ coi tất cả các quan sát là phân phối độc lập và đồng nhất. Chúng ta sẽ sử dụng lệnh menl để khớp mô hình.

1. menl circumf = {phi1}/(1+exp(-(age-{phi2})/{phi3})), stddeviations
2Obtaining starting values:
3NLS algorithm:
4Iteration 0:   residual SS =  17480.234
5Iteration 1:   residual SS =  17480.234
6Computing standard errors:
7Mixed-effects ML nonlinear regression           Number of obs     =         35
8Log Likelihood = -158.39871
9------------------------------------------------------------------------------
10     circumf |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
11-------------+----------------------------------------------------------------
12       /phi1 |   192.6876   20.24411     9.52   0.000     153.0099    232.3653
13       /phi2 |   728.7564   107.2984     6.79   0.000     518.4555    939.0573
14       /phi3 |   353.5337   81.47184     4.34   0.000     193.8518    513.2156
15------------------------------------------------------------------------------
16------------------------------------------------------------------------------
17  Random-effects Parameters  |   Estimate   Std. Err.     [95% Conf. Interval]
18-----------------------------+------------------------------------------------
19                sd(Residual) |   22.34805   2.671102      17.68079    28.24734
20------------------------------------------------------------------------------

Tùy chọn stddeviations yêu cầu lệnh menl báo cáo độ lệch chuẩn của sai số thay vì phương sai. Bởi vì chúng ta đang ép chung một đường cong sinh trưởng cho tất cả các cây, những khác biệt cá nhân thể hiện trong biểu đồ ban đầu đã bị dồn hết vào phần dư, từ đó làm tăng cao độ lệch chuẩn của phần dư.

Tích hợp tác động ngẫu nhiên vào mô hình

Thực tế là chúng ta có nhiều quan sát từ cùng một cái cây và chúng rất có thể tương quan với nhau. Một cách để giải quyết sự phụ thuộc này là thêm vào một tác động ngẫu nhiên u, được chia sẻ bởi tất cả các quan sát thuộc cùng một cây. Hãy xem kết quả khi chúng ta chạy mô hình này.

1. menl circumf = {phi1}/(1+exp(-(age-{phi2})/{phi3}))+{U[tree]}, stddev
2Obtaining starting values by EM:
3Alternating PNLS/LME algorithm:
4Iteration 1:    linearization log likelihood = -147.631786
5Iteration 2:    linearization log likelihood = -147.631786
6Computing standard errors:
7Mixed-effects ML nonlinear regression           Number of obs     =         35
8Group variable: tree                            Number of groups  =          5
9                                                Obs per group:
10                                                              min =          7
11                                                              avg =        7.0
12                                                              max =          7
13Linearization log likelihood = -147.63179
14------------------------------------------------------------------------------
15     circumf |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
16-------------+----------------------------------------------------------------
17       /phi1 |   192.2526   17.06127    11.27   0.000     158.8131    225.6921
18       /phi2 |   729.3642   68.05493    10.72   0.000      595.979    862.7494
19       /phi3 |    352.405   58.25042     6.05   0.000     238.2363    466.5738
20------------------------------------------------------------------------------
21------------------------------------------------------------------------------
22  Random-effects Parameters  |   Estimate   Std. Err.     [95% Conf. Interval]
23-----------------------------+------------------------------------------------
24tree: Identity               |
25                       sd(U) |   17.65093   6.065958      8.999985    34.61732
26-----------------------------+------------------------------------------------
27                sd(Residual) |    13.7099    1.76994      10.64497    17.65728
28------------------------------------------------------------------------------

Các ước lượng tác động cố định tương tự nhau ở cả hai mô hình, nhưng sai số chuẩn của chúng lại nhỏ hơn trong mô hình thứ hai này. Độ lệch chuẩn của phần dư cũng nhỏ hơn vì một phần sự khác biệt giữa các cá thể đã được kiểm soát bởi tác động ngẫu nhiên. Việc thêm tác động ngẫu nhiên u vào mô hình ngụ ý rằng hiệp phương sai giữa hai quan sát bất kỳ trên cùng một cây là một giá trị lớn hơn không, và giá trị này thực chất bằng với phương sai của u. Do đó, tác động ngẫu nhiên tạo ra một sự tương quan dương giữa các quan sát trong cùng một nhóm.

Lựa chọn thay thế bằng cấu trúc hiệp phương sai

Vẫn còn một cách khác để xử lý sự tương quan giữa các quan sát trong cùng nhóm. Bạn có thể mô hình hóa trực tiếp cấu trúc hiệp phương sai của phần dư thông qua tùy chọn rescovariance() của lệnh menl. Khái niệm này liên quan đến mô hình biên phi tuyến có cấu trúc ma trận hiệp phương sai hoán đổi. Hai mô hình này sẽ tương đương nhau khi sự tương quan của các quan sát trong cùng nhóm mang giá trị dương.

1. menl circumf = {phi1}/(1+exp(-(age-{phi2})/{phi3})), rescovariance(exchangeable, group(tree)) stddev
2Obtaining starting values:
3Alternating GNLS/ML algorithm:
4Iteration 1:    log likelihood = -147.632441
5Iteration 2:    log likelihood = -147.631786
6Iteration 3:    log likelihood = -147.631786
7Iteration 4:    log likelihood = -147.631786
8Computing standard errors:
9Mixed-effects ML nonlinear regression           Number of obs     =         35
10Group variable: tree                            Number of groups  =          5
11                                                Obs per group:
12                                                              min =          7
13                                                              avg =        7.0
14                                                              max =          7
15Log Likelihood = -147.63179
16------------------------------------------------------------------------------
17     circumf |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
18-------------+----------------------------------------------------------------
19       /phi1 |   192.2526   17.06127    11.27   0.000     158.8131    225.6921
20       /phi2 |   729.3642   68.05493    10.72   0.000      595.979    862.7494
21       /phi3 |    352.405   58.25042     6.05   0.000     238.2363    466.5738
22------------------------------------------------------------------------------
23------------------------------------------------------------------------------
24  Random-effects Parameters  |   Estimate   Std. Err.     [95% Conf. Interval]
25-----------------------------+------------------------------------------------
26Residual: Exchangeable       |
27                          sd |   22.34987    4.87771      14.57155    34.28026
28                        corr |   .6237137   .1741451      .1707327    .8590478
29------------------------------------------------------------------------------

Phần kết quả tác động cố định hoàn toàn giống nhau ở cả hai mô hình và ước lượng ma trận hiệp phương sai biên cũng vậy. Mặc dù tương đương nhau về mặt toán học, nhưng cách tiếp cận bằng cách đưa tác động ngẫu nhiên vào cho phép chúng ta không chỉ tính đến sự phụ thuộc của các phép đo mà còn ước lượng được sự biến thiên giữa các cây và dự đoán được đặc tính riêng của từng cây sau khi ước lượng.

Cấu hình tham số ngẫu nhiên cấp độ cá nhân

Hai mô hình trước ẩn chứa một giả định rằng đường cong tăng trưởng của tất cả các cây có cùng hình dạng và chỉ khác biệt ở một mức dịch chuyển theo trục dọc tương đương với giá trị u. Trong thực tế, giả định này có thể quá cứng nhắc. Nhìn lại biểu đồ dữ liệu, độ phân tán về chu vi của các cây càng lớn khi chúng càng tiến gần đến chiều cao giới hạn.

Vì vậy, sẽ hợp lý hơn nếu chúng ta cho phép tham số phi 1 biến thiên giữa các cây. Điều này cũng mang lại một diễn giải thú vị mang tính cá thể cho các tham số. Chúng ta giả định rằng tham số phi 1 bằng với tham số beta 1 cộng thêm tác động ngẫu nhiên u. Bạn có thể hiểu tham số beta 1 là chiều cao tiệm cận trung bình và u là độ lệch ngẫu nhiên so với mức trung bình đặc trưng cho từng cây cụ thể.

1. menl circumf = ({b1}+{U1[tree]})/(1+exp(-(age-{phi2})/{phi3}))
2Obtaining starting values by EM:
3Alternating PNLS/LME algorithm:
4Iteration 1:    linearization log likelihood = -131.584579
5Computing standard errors:
6Mixed-effects ML nonlinear regression           Number of obs     =         35
7Group variable: tree                            Number of groups  =          5
8                                                Obs per group:
9                                                              min =          7
10                                                              avg =        7.0
11                                                              max =          7
12Linearization log likelihood = -131.58458
13------------------------------------------------------------------------------
14     circumf |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
15-------------+----------------------------------------------------------------
16         /b1 |    191.049   16.15403    11.83   0.000     159.3877    222.7103
17       /phi2 |    722.556   35.15082    20.56   0.000     653.6616    791.4503
18       /phi3 |   344.1624   27.14739    12.68   0.000     290.9545    397.3703
19------------------------------------------------------------------------------
20------------------------------------------------------------------------------
21  Random-effects Parameters  |   Estimate   Std. Err.     [95% Conf. Interval]
22-----------------------------+------------------------------------------------
23tree: Identity               |
24                     var(U1) |   991.1514   639.4636      279.8776    3510.038
25-----------------------------+------------------------------------------------
26               var(Residual) |   61.56371   15.89568      37.11466    102.1184
27------------------------------------------------------------------------------

Nếu muốn đào sâu hơn, chúng ta còn có thể thiết lập thêm mô hình cấu trúc hiệp phương sai sai số bên trong cá thể bằng cách áp dụng cấu trúc hoán đổi.

1. menl circumf = ({b1}+{U1[tree]})/(1+exp(-(age-{phi2})/{phi3})), rescovariance(exchangeable)
2Obtaining starting values by EM:
3Alternating PNLS/LME algorithm:
4Iteration 1:    linearization log likelihood = -131.468559
5Iteration 2:    linearization log likelihood = -131.470388
6Iteration 3:    linearization log likelihood = -131.470791
7Iteration 4:    linearization log likelihood = -131.470813
8Iteration 5:    linearization log likelihood = -131.470813
9Computing standard errors:
10Mixed-effects ML nonlinear regression           Number of obs     =         35
11Group variable: tree                            Number of groups  =          5
12                                                Obs per group:
13                                                              min =          7
14                                                              avg =        7.0
15                                                              max =          7
16Linearization log likelihood = -131.47081
17------------------------------------------------------------------------------
18     circumf |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
19-------------+----------------------------------------------------------------
20         /b1 |   191.2005   15.59015    12.26   0.000     160.6444    221.7566
21       /phi2 |   721.5232   35.66132    20.23   0.000     651.6283    791.4182
22       /phi3 |   344.3675   27.20839    12.66   0.000     291.0401     397.695
23------------------------------------------------------------------------------
24------------------------------------------------------------------------------
25  Random-effects Parameters  |   Estimate   Std. Err.     [95% Conf. Interval]
26-----------------------------+------------------------------------------------
27tree: Identity               |
28                     var(U1) |   921.3895    582.735      266.7465    3182.641
29-----------------------------+------------------------------------------------
30Residual: Exchangeable       |
31                         var |   54.85736   14.16704      33.06817    91.00381
32                         cov |  -9.142893   2.378124     -13.80393   -4.481856
33------------------------------------------------------------------------------

Ở đoạn mã trên, chúng ta không cần khai báo tùy chọn group() vì khi có sự hiện diện của các tác động ngẫu nhiên, hệ thống sẽ tự động xác định nhóm cấp thấp nhất dựa trên tác động ngẫu nhiên đã định nghĩa.

Mở rộng mô hình với cú pháp define

Các mô hình được sử dụng từ nãy đến giờ đều biểu diễn tác động ngẫu nhiên theo phương thức tuyến tính. Tuy nhiên, trong mô hình hỗn hợp phi tuyến, tác động ngẫu nhiên hoàn toàn có thể tham gia vào mô hình theo dạng phi tuyến giống hệt như các tác động cố định. Bên cạnh tham số phi 1, chúng ta có thể gán tác động ngẫu nhiên riêng cho các tham số khác.

1. menl circumf = {phi1:}/(1+exp(-(age-{phi2:})/{phi3:})), define(phi1:{b1}+{U1[tree]}) define(phi2:{b2}+{U2[tree]}) define(phi3:{b3}+{U3[tree]})

Do số lượng quan sát thực tế chỉ có năm cây nên mô hình trên trở nên quá phức tạp đối với bộ dữ liệu này và chỉ mang mục đích minh họa cú pháp. Nhưng qua đó, bạn có thể thấy rằng tùy chọn define cực kỳ hữu dụng khi bạn đối mặt với một biểu thức phi tuyến cồng kềnh và muốn chia nhỏ nó ra cho dễ quản lý. Các tham số được khai báo bên trong define cũng có thể được dùng để chạy dự báo sau quá trình ước lượng. Ví dụ, bạn có thể tạo một biến mới dự báo mức chiều cao tiệm cận.

1. predict (phi1 = {phi1:})

Trong trường hợp bộ dữ liệu lớn hơn với nhiều cây hơn, chúng ta còn có thể thiết lập thêm cấu trúc hiệp phương sai cho hàng loạt các tác động ngẫu nhiên này.

1. menl circumf = {phi1:}/(1+exp(-(age-{phi2:})/{phi3:})), define(phi1:{b1}+{U1[tree]}) define(phi2:{b2}+{U2[tree]}) define(phi3:{b3}+{U3[tree]}) covariance(U1 U2 U3, unstructured)

Lệnh menl còn cung cấp khả năng tích hợp dữ liệu với các cấp độ phân cấp sâu hơn, chẳng hạn như cấu trúc ba cấp với các quan sát lặp lại nằm trong từng cây cá biệt, và các cây lại nằm trong từng khu vực trồng trọt khác nhau.

✨ Việc chuyển đổi từ mô hình phi tuyến tiêu chuẩn sang mô hình hỗn hợp phi tuyến giúp giải quyết triệt để bài toán tương quan dữ liệu nội bộ. Thông qua việc phân bổ sai số một cách thông minh vào các yếu tố ngẫu nhiên thay vì gom toàn bộ vào phần dư, phân tích của bạn sẽ bám sát thực tế hơn, mang lại các khoảng tin cậy hẹp và độ chính xác dự báo vượt trội.

Nếu dữ liệu bạn đang phân tích trong các lĩnh vực như y tế hoặc kinh tế cũng có cấu trúc đo lường lặp lại theo thời gian, bạn sẽ áp dụng cấu trúc tác động ngẫu nhiên cho tham số nào để phản ánh đúng bản chất sinh học hoặc hành vi của nhóm đối tượng mục tiêu?


Bài viết khác
Dữ liệu hiện diện ở khắp mọi nơi. Các cơ quan chính phủ, tổ chức tài chính, trường đại học và nền tảng mạng xã hội thường cung cấp quyền truy cập dữ liệu của họ thông qua API. Hệ thống này đóng vai trò như một cầu nối, thường trả về khối dữ liệu được yêu cầu dưới định dạng tệp JSON. Việc nắm vững cách sử dụng Python để gửi các truy vấn API và xử lý dữ liệu JSON thu được ngay bên trong môi trường Stata là một kỹ năng cực kỳ hữu ích cho quá trình phân tích dữ liệu hiện đại. Khái quát về cấu trúc API và định dạng JSON API là một phần mềm trung gian cho phép hệ thống của bạn yêu cầu dữ liệu từ một hệ thống máy tính khác. Cú pháp truy vấn thường mang tính đặc thù tùy thuộc vào từng hệ thống cung cấp, nhưng một cấu trúc điển hình luôn bắt đầu bằng một URL theo sau là các tùy chọn tham số. Bài viết này sẽ lấy ví dụ về việc sử dụng hệ thống openFDA để truy xuất dữ liệu về các biến cố bất lợi của thuốc từ Cục Quản lý Thực phẩm và Dược phẩm Hoa Kỳ. Chúng ta hoàn toàn có thể thêm các điều kiện lọc vào lời gọi API để thu hẹp phạm vi dữ liệu trả về. Dữ liệu này hiển thị dưới dạng JSON, một định dạng lưu trữ phổ biến được cấu trúc bởi tập hợp các cặp khóa và giá trị. Khóa hoạt động tương tự như một biến số trong tập dữ liệu Stata, còn giá trị chính là dữ liệu thực tế được ghi nhận.
Trong bài phân tích trước, chúng ta đã làm quen với mô hình tuyến tính tổng quát thông qua một tập dữ liệu khá đặc biệt: số ca tử vong do ngựa đá trong quân đội Phổ. Tập dữ liệu này đếm số lượng tử vong của các quân đoàn qua từng năm. Vì đây là dữ liệu đếm, chúng ta đã điều chỉnh mô hình tuyến tính để sử dụng phân phối Poisson, đồng thời áp dụng hàm liên kết log. Tuy nhiên, có một khía cạnh mà chúng ta chưa xem xét: liệu tất cả các quân đoàn có tỷ lệ tử vong giống hệt nhau không? Khám phá dữ liệu theo từng nhóm Trước tiên, chúng ta cần thiết lập môi trường trong R.
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