查看原文
其他

GMM 简介与 Stata 实现

Stata连享会 Stata连享会 2020-02-10

原文:David M. Drukker,Understanding the generalized method of moments (GMM): A simple example

译者:童天天 (中南财经政法大学)

Stata 连享会:知乎 | 简书 | 码云

python 爬虫与文本分析专题-现场班
连享会-Python爬虫与文本分析现场班-山西大学 2019.5.17-19

一起学空间计量……

空间计量专题-西安 2019.6.27-30

特别说明

文中包含的链接在微信中无法生效。请点击本文底部左下角的【阅读原文】,转入本文【简书版】

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,服从卡方分布的随机变量 ,其均值为 d,方差为 2d,因此两个 母体矩条件  (Population Moment Condition, 简称 PMC) 如下:

对应的 样本矩条件 (Sample Moment Condition, 简称 SMC) 为:

我们可以使用样本矩条件 (2a) 或 (2b) 来估计参数 d,得到都是 MM 估计量。然而,如果我们同时使用 (2a) 和 (2b),则会有两个样本矩条件,但待估参数却只有一个,致使我们无法得到唯一的参数估计。

(译者 添加)  

例如,假设基于 (2a) 得到的参数估计值为 ,而基于 (2b) 得到的参数估计值为 。从理论上来讲,这两个 MM 估计量都是 d 的无偏估计量,我们到底使用哪个呢?

显然,我们无法找到一个参数让两个矩条件 (记为 同时得到满足,但可以设定一个权重 ,进而得到让 ()极小化时参数 d 的估计值,称之为

GMM 寻找最接近于求解加权样本矩条件的参数。

Uniform weights 和 optimal weights 是加权样本矩条件的两种方法。Uniform weights 使用单位矩阵对矩条件进行加权。对于上面的例子而言,两个矩条件获得的权重相同,即optimal weights 使用矩条件协方差的逆矩阵来加权。

2. Stata 实现

我们首先生成一个样本量为 500 的样本.

  1. drop _all

  2. set obs 500

  3. set seed 12345

  4. generate double y=rchi2(1)

  5. mean y

  1. Mean estimation Number of obs = 500


  2. --------------------------------------------------------------

  3. | Mean Std. Err. [95% Conf. Interval]

  4. -------------+------------------------------------------------

  5. y | .9107644 .0548647 .8029702 1.018559

  6. --------------------------------------------------------------

使用 GMM 利用样本矩条件(1)估计参数。参数 d 包含在大括号{}中。我们指定 onestep 选项是因为参数的数量与矩条件的数量相同,也就是说准确地标识了估计值,此时各样本矩条件均可精确求解。

  1. gmm (y-{d}),instruments( ) onestep //方程1

  1. Step 1

  2. Iteration 0: GMM criterion Q(b) = .82949186

  3. Iteration 1: GMM criterion Q(b) = 3.608e-33

  4. Iteration 2: GMM criterion Q(b) = 3.608e-33 (backed up)


  5. note: model is exactly identified


  6. GMM estimation


  7. Number of parameters = 1

  8. Number of moments = 1

  9. Initial weight matrix: Unadjusted Number of obs = 500


  10. ------------------------------------------------------------------------------

  11. | Robust

  12. | Coef. Std. Err. z P>|z| [95% Conf. Interval]

  13. -------------+----------------------------------------------------------------

  14. /d | .9107644 .0548098 16.62 0.000 .8033392 1.01819

  15. ------------------------------------------------------------------------------

  16. Instruments for equation 1: _cons`

然后,使用 GMM 通过样本矩条件(2)估计参数。

  1. gmm ((y-{d})^2-2*{d}),instruments( ) onestep //方程2

  1. Step 1

  2. Iteration 0: GMM criterion Q(b) = 5.4361161

  3. Iteration 1: GMM criterion Q(b) = .02909692

  4. Iteration 2: GMM criterion Q(b) = .00004009

  5. Iteration 3: GMM criterion Q(b) = 5.714e-11

  6. Iteration 4: GMM criterion Q(b) = 1.172e-22


  7. note: model is exactly identified


  8. GMM estimation


  9. Number of parameters = 1

  10. Number of moments = 1

  11. Initial weight matrix: Unadjusted Number of obs = 500


  12. ------------------------------------------------------------------------------

  13. | Robust

  14. | Coef. Std. Err. z P>|z| [95% Conf. Interval]

  15. -------------+----------------------------------------------------------------

  16. /d | .7620814 .1156756 6.59 0.000 .5353613 .9888015

  17. ------------------------------------------------------------------------------

  18. Instruments for equation 1: _cons

比较得到的两个估计值结果,可以发现方程(1)得到的结果比方程(2)更接近真实值,方程(2)的标准误差更大,表明方程 (1) 提供了一个更有效的估计量。

现在,我们使用 GMM 通过 uniform weights 来估计参数。

  1. matrix I=I(2)

  2. gmm (y-{d}) ((y-{d})^2-2*{d}),instruments( ) winitial(I) onestep

(y-{d}) 表示第一个样本矩条件, ((y-{d})^2-2*{d}) 表示第二个样本矩条件。选项 winitial(I) 和 onestep 表示基于初始权重矩阵计算估计量。

  1. Step 1

  2. Iteration 0: GMM criterion Q(b) = 6.265608

  3. Iteration 1: GMM criterion Q(b) = .05343812

  4. Iteration 2: GMM criterion Q(b) = .01852592

  5. Iteration 3: GMM criterion Q(b) = .0185221

  6. Iteration 4: GMM criterion Q(b) = .0185221


  7. GMM estimation


  8. Number of parameters = 1

  9. Number of moments = 2

  10. Initial weight matrix: user Number of obs = 500


  11. ------------------------------------------------------------------------------

  12. | Robust

  13. | Coef. Std. Err. z P>|z| [95% Conf. Interval]

  14. -------------+----------------------------------------------------------------

  15. /d | .7864099 .1050692 7.48 0.000 .5804781 .9923418

  16. ------------------------------------------------------------------------------

  17. Instruments for equation 1: _cons

  18. Instruments for equation 2: _cons

最后,我们使用 GMM 通过 two-step optimal weights 估计参数。在 first-step 得到的一致估计量的基础下重新赋予新的权重。

  1. gmm (y-{d}) ((y-{d})^2-2*{d}),instruments( ) winitial(I)

  1. Step 1

  2. Iteration 0: GMM criterion Q(b) = 6.265608

  3. Iteration 1: GMM criterion Q(b) = .05343812

  4. Iteration 2: GMM criterion Q(b) = .01852592

  5. Iteration 3: GMM criterion Q(b) = .0185221

  6. Iteration 4: GMM criterion Q(b) = .0185221


  7. Step 2

  8. Iteration 0: GMM criterion Q(b) = .02888076

  9. Iteration 1: GMM criterion Q(b) = .00547223

  10. Iteration 2: GMM criterion Q(b) = .00546176

  11. Iteration 3: GMM criterion Q(b) = .00546175


  12. GMM estimation


  13. Number of parameters = 1

  14. Number of moments = 2

  15. Initial weight matrix: user Number of obs = 500

  16. GMM weight matrix: Robust


  17. ------------------------------------------------------------------------------

  18. | Robust

  19. | Coef. Std. Err. z P>|z| [95% Conf. Interval]

  20. -------------+----------------------------------------------------------------

  21. /d | .9566219 .0493218 19.40 0.000 .8599529 1.053291

  22. ------------------------------------------------------------------------------

  23. Instruments for equation 1: _cons

  24. Instruments for equation 2: _cons

可以发现,上述得到的四个估计量都是一致的。

  • 3.基于蒙特卡罗模拟的效率比较

下面我们运行一个蒙特卡罗模拟来比较它们的相对效率。

  1. clear all

  2. set seed 12345

  3. matrix I = I(2)

  4. postfile sim d_a d_v d_ml d_gmm d_gmme using efcomp, replace

  5. forvalues i = 1/2000 {

  6. quietly drop _all

  7. quietly set obs 500

  8. quietly generate double y = rchi2(1)


  9. quietly mean y

  10. local d_a = _b[y]


  11. quietly gmm ( (y-{d=`d_a'})^2 - 2*{d}) , instruments( ) ///

  12. winitial(unadjusted) onestep conv_maxiter(200)

  13. if e(converged)==1 {

  14. local d_v = _b[d:_cons]

  15. }

  16. else {

  17. local d_v = .

  18. }


  19. quietly mlexp (ln(chi2den({d=`d_a'},y)))

  20. if e(converged)==1 {

  21. local d_ml = _b[d:_cons]

  22. }

  23. else {

  24. local d_ml = .

  25. }


  26. quietly gmm ( y - {d=`d_a'}) ( (y-{d})^2 - 2*{d}) , instruments( ) ///

  27. winitial(I) onestep conv_maxiter(200)

  28. if e(converged)==1 {

  29. local d_gmm = _b[d:_cons]

  30. }

  31. else {

  32. local d_gmm = .

  33. }


  34. quietly gmm ( y - {d=`d_a'}) ( (y-{d})^2 - 2*{d}) , instruments( ) ///

  35. winitial(unadjusted, independent) conv_maxiter(200)

  36. if e(converged)==1 {

  37. local d_gmme = _b[d:_cons]

  38. }

  39. else {

  40. local d_gmme = .

  41. }


  42. post sim (`d_a') (`d_v') (`d_ml') (`d_gmm') (`d_gmme')


  43. }

  44. postclose sim

  45. use efcomp, clear

  46. summarize

  1. Variable | Obs Mean Std. Dev. Min Max

  2. -------------+---------------------------------------------------------

  3. d_a | 2,000 1.00017 .0625367 .7792076 1.22256

  4. d_v | 1,996 1.003621 .1732559 .5623049 2.281469

  5. d_ml | 2,000 1.002876 .0395273 .8701175 1.120148

  6. d_gmm | 2,000 .9984172 .1415176 .5947328 1.589704

  7. 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 次观测的原因。即使我们使用样本平均值作为非线性规划求解的起始值,也会出现这些收敛失败。

为了更好地了解这些估计量的分布,我们绘制了它们估计量的密度图。

  1. use efcomp

  2. local N = _N

  3. kdensity d_a, n(`N') generate(x_a den_a) nograph

  4. kdensity d_v, n(`N') generate(x_v den_v) nograph

  5. kdensity d_ml, n(`N') generate(x_ml den_ml) nograph

  6. kdensity d_gmm, n(`N') generate(x_gmm den_gmm) nograph

  7. kdensity d_gmme, n(`N') generate(x_gmme den_gmme) nograph

  8. twoway (line den_a x_a, lpattern(solid)) ///

  9. (line den_v x_v, lpattern(dash)) ///

  10. (line den_ml x_ml, lpattern(dot)) ///

  11. (line den_gmm x_gmm, lpattern(dash_dot)) ///

  12. (line den_gmme x_gmme, lpattern(shordash))

密度图说明了不同估计量的效率排名。uniformly weighted GMM 估计比样本平均值效率低,因为它对样本平均值施加的权重与基于样本方差的低效率估计值施加的权重相同。

在有效和无效估计量上放置相等权重的 GMM 估计量比在无效估计量上放置较少权重的 GMM 估计量效率低得多。下面,我们将展示 optimal GMM 估计的权重矩阵。

  1. matlist e(W), border(rows)

  1. -------------------------------------

  2. | 1 | 2

  3. | _cons | _cons

  4. -------------+-----------+-----------

  5. 1 | |

  6. _cons | 1.621476 |

  7. -------------+-----------+-----------

  8. 2 | |

  9. _cons | -.2610053 | .0707775

  10. -------------------------------------

在每个过度识别的情况下,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专栏。可以在上述网站中搜索关键词StataStata连享会后关注我们。

  • 点击推文底部【阅读原文】可以查看推文中的链接并下载相关资料。

  • Stata连享会 精彩推文1  || 精彩推文2

联系我们

  • 欢迎赐稿: 欢迎将您的文章或笔记投稿至Stata连享会(公众号: StataChina),我们会保留您的署名;录用稿件达五篇以上,即可免费获得 Stata 现场培训 (初级或高级选其一) 资格。

  • 意见和资料: 欢迎您的宝贵意见,您也可以来信索取推文中提及的程序和数据。

  • 招募英才: 欢迎加入我们的团队,一起学习 Stata。合作编辑或撰写稿件五篇以上,即可免费获得 Stata 现场培训 (初级或高级选其一) 资格。

  • 联系邮件: StataChina@163.com

往期精彩推文


欢迎加入Stata连享会(公众号: StataChina)

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存