GMM cho dữ liệu bảng động (Dynamic Panel GMM)
GMM (Generalized Method of Moments) cho dữ liệu bảng động xử lý trường hợp biến phụ thuộc trễ xuất hiện ở vế phải (Y_{t-1}) và/hoặc có biến nội sinh. Khi đó FEM/REM bị chệch (chệch Nickell với T nhỏ); GMM dùng các biến công cụ nội tại (độ trễ của chính các biến) để ước lượng nhất quán. Hai biến thể phổ biến: Difference GMM (Arellano–Bond, 1991) và System GMM (Arellano–Bover/Blundell–Bond, 1998).
Trong EcoLab, GMM thuộc nhóm Dữ liệu bảng và sinh mã tái lập Stata/R/Python. Xem FEM và REM và Ước lượng & Mô hình hóa.
Khi nào nên dùng GMM động?
- Mô hình động: có
Y_{t-1}(hoặc nhiều độ trễ) trong các biến giải thích. - Bảng N lớn, T nhỏ (nhiều đơn vị, ít thời kỳ) — đặc trưng dữ liệu doanh nghiệp/quốc gia.
- Có biến nội sinh tương quan với sai số, nhưng thiếu biến công cụ ngoài.
- Cần kiểm soát hiệu ứng cá thể không quan sát được trong bối cảnh động.
System GMM ưu tiên khi chuỗi gần "đi bộ ngẫu nhiên" (persistent) — lúc đó độ trễ là công cụ yếu cho Difference GMM.
Đặc tả mô hình
- : biến phụ thuộc trễ (nguồn gốc tính động và nội sinh với ).
- Difference GMM: lấy sai phân bậc nhất để khử , dùng độ trễ mức (levels) làm công cụ.
- System GMM: kết hợp phương trình sai phân và phương trình mức, dùng thêm độ trễ sai phân làm công cụ cho phương trình mức.
Giả định và kiểm định bắt buộc
- AR(2) — Arellano–Bond: kiểm định tự tương quan bậc 2 của phần dư sai phân; không được bác bỏ H0 (p > 0.05) thì công cụ mới hợp lệ.
- Hansen/Sargan: kiểm định tính hợp lệ của tập biến công cụ (overidentifying restrictions); p-value quá cao (≈1.00) là dấu hiệu quá nhiều công c ụ (instrument proliferation).
- Số công cụ ≤ số nhóm (N): giữ số công cụ nhỏ (collapse/limit lags) để tránh làm yếu Hansen.
- Phân biệt biến ngoại sinh / tiền định (predetermined) / nội sinh khi khai báo.
Thực hiện trong EcoLab
- Module Thu thập dữ liệu: chuẩn bị bảng động (cột entity + time), đảm bảo đủ độ trễ.
- Module Mô hình hóa → nhóm Panel Data → GMM (Arellano–Bond / Blundell–Bond).
- Khai báo
Y, biến trễ, phân loại biến (ngoại sinh/tiền định/nội sinh), chọn Difference hoặc System GMM. - Chạy và đọc thẻ Chẩn đoán: AR(1)/AR(2), Hansen, số công cụ. Lấy mã ở thẻ Mã tái lập.
Ví dụ đầu vào / đầu ra
Đầu vào (minh họa): bảng 30 quốc gia × 15 năm; growth phụ thuộc; growth_lag, invest, open giải thích.
Đầu ra (định dạng, số liệu minh họa — không phải kết quả thực):
| Hệ số | p-value | |
|---|---|---|
| growth_lag | 0.34*** | 0.000 |
| invest | 0.21** | 0.018 |
| AR(2) p-value | 0.41 | (không bác bỏ — hợp lệ) |
| Hansen p-value | 0.28 | (công cụ hợp lệ) |
| Số công cụ / số nhóm | 18 / 30 | (an toàn) |
Minh họa mã tái lập
- Stata
- R
- Python
* === System GMM (Blundell–Bond) với xtabond2 ===
* Cài đặt: ssc install xtabond2
* Khai báo dữ liệu bảng
xtset country_id year
* Ước lượng System GMM — two-step với hiệu chỉnh Windmeijer
xtabond2 growth L.growth invest open, ///
gmm(L.growth, lag(2 4)) iv(open) ///
twostep robust
* Kết quả tự động báo cáo:
* - AR(1) và AR(2) test (Arellano–Bond)
* - Hansen test (overidentifying restrictions)
* - Số công cụ vs số nhóm
* Kiểm tra: AR(2) p > 0.05 và Hansen p hợp lý (không quá cao)
# === System GMM (Blundell–Bond) với plm ===
library(plm)
# Chuyển dữ liệu sang pdata.frame
pdata <- pdata.frame(df, index = c("country_id", "year"))
# Ước lượng System GMM — two-steps
gmm_model <- pgmm(
growth ~ lag(growth, 1) + invest + open | lag(growth, 2:4),
data = pdata,
effect = "twoways",
model = "twosteps"
)
# Kết quả với sai số chuẩn robust (Windmeijer)
summary(gmm_model, robust = TRUE)
# Kiểm định Sargan và tự tương quan
# (tự động in trong summary)
# === GMM cho dữ liệu bảng động — Python ===
# Python chưa có gói tương đương xtabond2 hoàn chỉnh.
# Dưới đây là cách tiếp cận khái niệm với linearmodels.
import pandas as pd
from linearmodels.iv import IVGMM
# Thiết lập chỉ mục panel
df = df.set_index(["country_id", "year"])
# Tạo biến trễ
df["growth_lag"] = df.groupby("country_id")["growth"].shift(1)
# Ước lượng IV-GMM (khái niệm — không hoàn toàn tương đương System GMM)
formula = "growth ~ 1 + invest + [growth_lag ~ growth_lag2 + growth_lag3 + growth_lag4]"
# Với growth_lag2..4 là các độ trễ bậc 2–4 đã tạo sẵn
# Lưu ý: Để chạy đúng Arellano–Bond/Blundell–Bond,
# cân nhắc dùng Stata hoặc R, hoặc gói pydynpd:
# pip install pydynpd
from pydynpd import regression
command = "growth L1.growth invest open | gmm(growth, 2 4) | iv(open) | twostep"
result = regression.abond(command, df, ["country_id", "year"])
print(result)
Hạn chế và lưu ý
- Instrument proliferation làm Hansen mất hiệu lực; luôn báo cáo số công cụ và dùng collapse/giới hạn độ trễ.
- Difference GMM yếu với chuỗi rất bền (persistent) → cân nhắc System GMM.
- Cần N đủ lớn; với N nhỏ, sai số chuẩn kém tin cậy (dùng hiệu chỉnh Windmeijer).
- Không phù hợp khi T lớn (cân nhắc ước lượng bảng động khác).