GMM 简介与 Stata 实现
原文:David M. Drukker,Understanding the generalized method of moments (GMM): A simple example
译者:童天天 (中南财经政法大学)
Stata 连享会:知乎 | 简书 | 码云
特别说明
文中包含的链接在微信中无法生效。请点击本文底部左下角的【阅读原文】
,转入本文【简书版】
。
1. GMM 的基本思想
广义矩估计 (Generalized Method of Moment, 简称 GMM) 是一种构造估计量的方法,类似于极大似然法 (MLE) 。MLE 通过假设随机变量服从特定的分布,进而将待估参数嵌入似然函数,通过极大化联合概率密度函数得到参数的估计值。GMM 则是以随机变量遵循特定矩的假设,而不是对整个分布的假设,这些假设被称为矩条件。这使得 GMM 比 MLE 更稳健,但会导致估计量的有效性有所降低 (估计出的标准误比较大)。
假设待估参数的个数为 k,矩条件的个数为 l。当 k=l 时,称为“恰好识别”,当 k<l 时,称为“过度识别”。
GMM 是矩估计(MM)的推广。在恰好识别情况下,目标函数的最小值等于 0 ,GMM 估计量与 MM 估计量等价;然而在过度识别情况下,MM 不再适用,GMM 可以有效地组合矩条件,使 GMM 比 MM 更有效。
GMM 建立在期望值和样本平均值的基础上。矩条件是用真实矩指定模型参数的期望值。
自由度为 d,服从卡方分布的随机变量
对应的 样本矩条件 (Sample Moment Condition, 简称 SMC) 为:
我们可以使用样本矩条件 (2a) 或 (2b) 来估计参数 d,得到都是 MM 估计量。然而,如果我们同时使用 (2a) 和 (2b),则会有两个样本矩条件,但待估参数却只有一个,致使我们无法得到唯一的参数估计。
(译者 添加)
例如,假设基于 (2a) 得到的参数估计值为
,而基于 (2b) 得到的参数估计值为 。从理论上来讲,这两个 MM 估计量都是 d 的无偏估计量,我们到底使用哪个呢? 显然,我们无法找到一个参数让两个矩条件 (记为
和 同时得到满足,但可以设定一个权重 ,进而得到让 ( )极小化时参数 d 的估计值,称之为 。
GMM 寻找最接近于求解加权样本矩条件的参数。
Uniform weights 和 optimal weights 是加权样本矩条件的两种方法。Uniform weights 使用单位矩阵对矩条件进行加权。对于上面的例子而言,两个矩条件获得的权重相同,即
2. Stata 实现
我们首先生成一个样本量为 500 的样本.
drop _all
set obs 500
set seed 12345
generate double y=rchi2(1)
mean y
Mean estimation Number of obs = 500
--------------------------------------------------------------
| Mean Std. Err. [95% Conf. Interval]
-------------+------------------------------------------------
y | .9107644 .0548647 .8029702 1.018559
--------------------------------------------------------------
使用 GMM 利用样本矩条件(1)估计参数。参数 d 包含在大括号{}中。我们指定 onestep 选项是因为参数的数量与矩条件的数量相同,也就是说准确地标识了估计值,此时各样本矩条件均可精确求解。
gmm (y-{d}),instruments( ) onestep //方程1
Step 1
Iteration 0: GMM criterion Q(b) = .82949186
Iteration 1: GMM criterion Q(b) = 3.608e-33
Iteration 2: GMM criterion Q(b) = 3.608e-33 (backed up)
note: model is exactly identified
GMM estimation
Number of parameters = 1
Number of moments = 1
Initial weight matrix: Unadjusted Number of obs = 500
------------------------------------------------------------------------------
| Robust
| Coef. Std. Err. z P>|z| [95% Conf. Interval]
-------------+----------------------------------------------------------------
/d | .9107644 .0548098 16.62 0.000 .8033392 1.01819
------------------------------------------------------------------------------
Instruments for equation 1: _cons`
然后,使用 GMM 通过样本矩条件(2)估计参数。
gmm ((y-{d})^2-2*{d}),instruments( ) onestep //方程2
Step 1
Iteration 0: GMM criterion Q(b) = 5.4361161
Iteration 1: GMM criterion Q(b) = .02909692
Iteration 2: GMM criterion Q(b) = .00004009
Iteration 3: GMM criterion Q(b) = 5.714e-11
Iteration 4: GMM criterion Q(b) = 1.172e-22
note: model is exactly identified
GMM estimation
Number of parameters = 1
Number of moments = 1
Initial weight matrix: Unadjusted Number of obs = 500
------------------------------------------------------------------------------
| Robust
| Coef. Std. Err. z P>|z| [95% Conf. Interval]
-------------+----------------------------------------------------------------
/d | .7620814 .1156756 6.59 0.000 .5353613 .9888015
------------------------------------------------------------------------------
Instruments for equation 1: _cons
比较得到的两个估计值结果,可以发现方程(1)得到的结果比方程(2)更接近真实值,方程(2)的标准误差更大,表明方程 (1) 提供了一个更有效的估计量。
现在,我们使用 GMM 通过 uniform weights 来估计参数。
matrix I=I(2)
gmm (y-{d}) ((y-{d})^2-2*{d}),instruments( ) winitial(I) onestep
(y-{d}) 表示第一个样本矩条件, ((y-{d})^2-2*{d}) 表示第二个样本矩条件。选项 winitial(I) 和 onestep 表示基于初始权重矩阵计算估计量。
Step 1
Iteration 0: GMM criterion Q(b) = 6.265608
Iteration 1: GMM criterion Q(b) = .05343812
Iteration 2: GMM criterion Q(b) = .01852592
Iteration 3: GMM criterion Q(b) = .0185221
Iteration 4: GMM criterion Q(b) = .0185221
GMM estimation
Number of parameters = 1
Number of moments = 2
Initial weight matrix: user Number of obs = 500
------------------------------------------------------------------------------
| Robust
| Coef. Std. Err. z P>|z| [95% Conf. Interval]
-------------+----------------------------------------------------------------
/d | .7864099 .1050692 7.48 0.000 .5804781 .9923418
------------------------------------------------------------------------------
Instruments for equation 1: _cons
Instruments for equation 2: _cons
最后,我们使用 GMM 通过 two-step optimal weights 估计参数。在 first-step 得到的一致估计量的基础下重新赋予新的权重。
gmm (y-{d}) ((y-{d})^2-2*{d}),instruments( ) winitial(I)
Step 1
Iteration 0: GMM criterion Q(b) = 6.265608
Iteration 1: GMM criterion Q(b) = .05343812
Iteration 2: GMM criterion Q(b) = .01852592
Iteration 3: GMM criterion Q(b) = .0185221
Iteration 4: GMM criterion Q(b) = .0185221
Step 2
Iteration 0: GMM criterion Q(b) = .02888076
Iteration 1: GMM criterion Q(b) = .00547223
Iteration 2: GMM criterion Q(b) = .00546176
Iteration 3: GMM criterion Q(b) = .00546175
GMM estimation
Number of parameters = 1
Number of moments = 2
Initial weight matrix: user Number of obs = 500
GMM weight matrix: Robust
------------------------------------------------------------------------------
| Robust
| Coef. Std. Err. z P>|z| [95% Conf. Interval]
-------------+----------------------------------------------------------------
/d | .9566219 .0493218 19.40 0.000 .8599529 1.053291
------------------------------------------------------------------------------
Instruments for equation 1: _cons
Instruments for equation 2: _cons
可以发现,上述得到的四个估计量都是一致的。
3.基于蒙特卡罗模拟的效率比较
下面我们运行一个蒙特卡罗模拟来比较它们的相对效率。
clear all
set seed 12345
matrix I = I(2)
postfile sim d_a d_v d_ml d_gmm d_gmme using efcomp, replace
forvalues i = 1/2000 {
quietly drop _all
quietly set obs 500
quietly generate double y = rchi2(1)
quietly mean y
local d_a = _b[y]
quietly gmm ( (y-{d=`d_a'})^2 - 2*{d}) , instruments( ) ///
winitial(unadjusted) onestep conv_maxiter(200)
if e(converged)==1 {
local d_v = _b[d:_cons]
}
else {
local d_v = .
}
quietly mlexp (ln(chi2den({d=`d_a'},y)))
if e(converged)==1 {
local d_ml = _b[d:_cons]
}
else {
local d_ml = .
}
quietly gmm ( y - {d=`d_a'}) ( (y-{d})^2 - 2*{d}) , instruments( ) ///
winitial(I) onestep conv_maxiter(200)
if e(converged)==1 {
local d_gmm = _b[d:_cons]
}
else {
local d_gmm = .
}
quietly gmm ( y - {d=`d_a'}) ( (y-{d})^2 - 2*{d}) , instruments( ) ///
winitial(unadjusted, independent) conv_maxiter(200)
if e(converged)==1 {
local d_gmme = _b[d:_cons]
}
else {
local d_gmme = .
}
post sim (`d_a') (`d_v') (`d_ml') (`d_gmm') (`d_gmme')
}
postclose sim
use efcomp, clear
summarize
Variable | Obs Mean Std. Dev. Min Max
-------------+---------------------------------------------------------
d_a | 2,000 1.00017 .0625367 .7792076 1.22256
d_v | 1,996 1.003621 .1732559 .5623049 2.281469
d_ml | 2,000 1.002876 .0395273 .8701175 1.120148
d_gmm | 2,000 .9984172 .1415176 .5947328 1.589704
d_gmme | 2,000 1.006765 .0540633 .8224731 1.188156
结果表明,最大似然估计量标准误差最小,是最有效的(d_ml,std.dev.0.0395),其次是 optimal GMM 估计量(d_gmme,std.dev.0.0541),其次是样本平均值(d_a,std.dev.0.0625),最后是 uniformly-weighted 的 GMM 估计量(d_gmm,std.dev.0.1415),最后是样本方差矩条件(d_v,std.dev.0.1732)。
基于样本方差矩条件的估计量在 2000 次模拟中有 4 次没有收敛;这就是为什么当其他估计量有 2000 次观测时,D_v 上只有 1996 次观测的原因。即使我们使用样本平均值作为非线性规划求解的起始值,也会出现这些收敛失败。
为了更好地了解这些估计量的分布,我们绘制了它们估计量的密度图。
use efcomp
local N = _N
kdensity d_a, n(`N') generate(x_a den_a) nograph
kdensity d_v, n(`N') generate(x_v den_v) nograph
kdensity d_ml, n(`N') generate(x_ml den_ml) nograph
kdensity d_gmm, n(`N') generate(x_gmm den_gmm) nograph
kdensity d_gmme, n(`N') generate(x_gmme den_gmme) nograph
twoway (line den_a x_a, lpattern(solid)) ///
(line den_v x_v, lpattern(dash)) ///
(line den_ml x_ml, lpattern(dot)) ///
(line den_gmm x_gmm, lpattern(dash_dot)) ///
(line den_gmme x_gmme, lpattern(shordash))
密度图说明了不同估计量的效率排名。uniformly weighted GMM 估计比样本平均值效率低,因为它对样本平均值施加的权重与基于样本方差的低效率估计值施加的权重相同。
在有效和无效估计量上放置相等权重的 GMM 估计量比在无效估计量上放置较少权重的 GMM 估计量效率低得多。下面,我们将展示 optimal GMM 估计的权重矩阵。
matlist e(W), border(rows)
-------------------------------------
| 1 | 2
| _cons | _cons
-------------+-----------+-----------
1 | |
_cons | 1.621476 |
-------------+-----------+-----------
2 | |
_cons | -.2610053 | .0707775
-------------------------------------
在每个过度识别的情况下,GMM 估计量使用两个样本矩条件的加权平均值来估计平均值。第一个样本矩条件是样本平均值,第二个矩条件是样本方差。蒙特卡罗模拟结果表明,样本方差比样本平均值提供的平均值估计量的效率要低得多。
延伸阅读
Stata 手册 GMM,[PDF],写得非常清楚。
Zsohar, P., 2010, Short introduction to the generalized method of moments, Hungarian statistical review, 16: 150-170. [PDF], 写的非常清楚,与我想要的思路也很一致
Drukker, 2010, PPT, An introduction to GMM estimation using Stata,介绍了 GMM 的基本思想,以及 GMM 与 MLE 的差别
关于我们
【Stata 连享会(公众号:StataChina)】由中山大学连玉君老师团队创办,旨在定期与大家分享 Stata 应用的各种经验和技巧。
公众号推文同步发布于 CSDN-Stata连享会 、简书-Stata连享会 和 知乎-连玉君Stata专栏。可以在上述网站中搜索关键词
Stata
或Stata连享会
后关注我们。点击推文底部【阅读原文】可以查看推文中的链接并下载相关资料。
Stata连享会 精彩推文1 || 精彩推文2
联系我们
欢迎赐稿: 欢迎将您的文章或笔记投稿至
Stata连享会(公众号: StataChina)
,我们会保留您的署名;录用稿件达五篇
以上,即可免费获得 Stata 现场培训 (初级或高级选其一) 资格。意见和资料: 欢迎您的宝贵意见,您也可以来信索取推文中提及的程序和数据。
招募英才: 欢迎加入我们的团队,一起学习 Stata。合作编辑或撰写稿件五篇以上,即可免费获得 Stata 现场培训 (初级或高级选其一) 资格。
联系邮件: StataChina@163.com
往期精彩推文