查看原文
其他

极大似然估计 (MLE) 及 Stata 实现

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

作者:郭李鹏

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

2019暑期Stata现场班 (连玉君+刘瑞明主讲)

特别说明

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

MLE 简介

最大似然估计 ( MLE ) 在计量经济学中有广泛的应用。本文主要介绍 MLE 的基本原理和应用,并演示如何在 Stata 软件中进行最大似然估计。

MLE 的基本原理

计量经济学中, 最小二乘估计、最大似然估计和广义矩估计是构造统计量的三种基本方法。

最小二乘估计,最合理的参数估计量应该使得模型能最好地拟合样本数据,也就是估计值和观测值之差的平方和最小。

矩估计的基本思想是,简单随机样本的原点矩依概率收敛到相应的总体原点矩,用样本矩替换总体矩,进而找出未知参数的估计。

最大似然估计,最合理的参数估计量应该使得从模型中抽取该 n 组样本观测值的概率最大,也就是概率分布函数或者说是似然函数最大。

最小二乘估计和广义矩估计进行统计推断时并不需要设定密度函数,即无需对干扰项分布进行假设;而最大似然估计的前提条件是,能够写出密度函数的完整设定,其中包含一系列待估参数。

概似函数

假设针对一个包含  个随机变量的随机向量 ,我们收集了 n 个样本值,,...,,则这 n 个随机向量的联合密度函数  可以写成

其中 是一个参数向量,包含了联合密度函数中所涉及到的所有参数。联合密度函数  又称作概似函数,极大化概似函数所得到的解通常以 表示,即最大似然估计值。

对数似然函数

对于分布独立的样本 ,假设其密度函数为 ,经对数转换后的联合密度函数即对数似然函数:

根据最大似然估计的原理,我们可以通过极大化对数似然函数获得未知参数 的估计值。

MLE 的基本步骤

在 Stata 中进行最大似然估计的基本步骤如下:

  1. 推导最大似然函数

  2. 编写似然函数的 Stata 程序

  3. 设定解释变量和被解释变量,完整设定 ml model 命令

  4. 估计最大似然函数:执行 ml maximize 命令

何时使用 MLE ?

MLE 的主要运用在离散数据模型和一些分布比较复杂的模型,主要有:Logit 模型,Probit 模型,泊松模型,负二项模型,非似然函数模型以及随机边界模型等。

MLE 的 Stata 实现

范例1:线性回归模型的 MLE 估计

对于线性回归模型,若假设其满足所有基本假设条件,且干扰项服从正态分布,y 服从均值为  ,方差为 的正态分布,可以将 设定为某些变量的线性函数,即 。具体完整形式如下:

矩阵形式为:

我们可以通过 MLE 获得该模型中两组参数 的估计值。

在用 Stata 进行似然估计前,需要先写出对数似然函数基本设定形式:

在 Stata 中执行最大似然估计的第一步是将不包括线性回归函数的似然函数的基本设定编写为 ado 文件,需要注意的是,程序中只定义概似函数的基本设定,如何将线性回归函数加入模型由其他管道设定。

  1. cap program drop mymean_lf

  2. program define mymean_lf

  3. version 9.1

  4. args lnf mu sigma

  5. quietly replace `lnf' = ln(normalden(($ML_y1 - `mu')/`sigma')) - ln(`sigma')

  6. end

程序的第一行用于定义程序的名称,对应最后一行的end 语句,表明程序到此结束。

程序中 version 语句声明编写程序时 Stata 版本,以便更高版本能够兼容运行该程序。

程序的第三行用于声明输入项,关键命令是 args,其后的 lnf 是一个暂元,用于存放每次迭代得到的似然函数值,musigma 表明我似然函数中有两个线性等式。

quietly replace 语句中 Stata 对每一个观察值求得似然函数值后会按观察值的顺序依次累加后存入暂元 lnf 中。

ML_y1 为默认写法,表示被解释变量,是 Stata 指定的一个全局暂元。如果模型中包含多个被解释变量, Stata 会自动将它们依次存放于 ML_y2ML_y3ML_yj中。

上述程序在保存时的文件名一定要为 mymean_lf(与我们所定义的程序名称保持一致),保存类型为 ado 文档。

上面的程序只是定义了最大似然估计的“基本架构”,而要实现对具体模型的估计还需要通过“输入项”的设定来定义最大似然估计的“完整架构”。进行程序完整架构定义的指令结构如下:

  1. ml model lf [d0|d1|d2] progname (eq1: y = x1 x2 …) (eq2: x3 x4) (eq3:) ()

ml 方法的关键命令是 ml model 命令和 ml maximize 命令,ml model 命令用来定义需要拟合的模型, ml maximize 命令用来执行最大化。

Stata 对最大似然估计法的执行提供了四种不同的架构, lf 是最常用的架构,通常对样本满足独立同分布的条件时均可使用。在括号中,等号左边为被解释变量,等号右边为解释变量;冒号表示参数名称。

由于 Stata 进行最大似然估计使用的是数值算法,初始值的设定非常重要。我们可以使用如下命令让 Stata 找到进行最大似然估计的初始值。

我们调入汽车价格的数据,演示 Stata 中如何执行 MLE 估计。

  1. sysuse auto, clear

  2. ml model lf mymean_lf (price=mpg wei len) (sigma: )

  3. ml search

  4. ml maximize

  5. est store mle_reg

MLE 线性回归模型与 OLS 结果对比。

  1. reg price mpg wei len

  2. est store ols_reg

  3. esttab mle_reg ols_reg, mtitle(mle_reg ols_reg)

运算结果如下:

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

  2. (1) (2)

  3. mle_reg ols_reg

  4. --------------------------------------------

  5. main

  6. mpg -86.79 -86.79

  7. (-1.06) (-1.03)


  8. weight 4.365*** 4.365***

  9. (3.84) (3.74)


  10. length -104.9** -104.9*

  11. (-2.71) (-2.64)


  12. _cons 14542.4* 14542.4*

  13. (2.54) (2.47)

  14. --------------------------------------------

  15. sigma

  16. _cons 2348.4***

  17. (12.17)

  18. --------------------------------------------

  19. N 74 74

  20. --------------------------------------------

  21. t statistics in parentheses

  22. * p<0.05, ** p<0.01, *** p<0.001

从结果可以看出,采用MLE和OLS估计得到的参数没有明显差别,但是 MLE 估计得到的参数的标准差要比 OLS 估计的小。

范例2:面板随机边界模型的 MLE 估计

面板随机边界模型是一种测算各类效率的参数模型,完美假设下的产出函数为

实际生产中,生产受到各种随机因素的影响,往往还存在效率损失,产出函数为

表示效率水平,显然,0< <=1。 为随机干扰的因素,采用指数形式 是为了保证产出大于 0。   
对产出函数两边取对数,可得

转化为线性计量模型:


表示效率水平,由  可知, 被定义为在相同的投入下,实际产出与完全有效产出的比值。从效率的定义中可以看出,它测量的是一定投入、产出下决策单位之间的“相对效率”而不是“绝对效率”。

实证分析中,通常设定: 服从 为一般意义上的随机干扰项 ,服从单边分布,反映无效率的干扰项。

由于 无效率项的取值必须大于零,文献中多将其设定成单边分布。典型的分布形式包括: 指数分布、半正态分布、截断型半正态分布。截断型半正态分布可以很方便地研究影响非效率项的因素。

早期面板随机边界模型分为效率不随时间变化的模型和效率可随时间变化两大类。

无效率成分不随时间改变的模型如下:

其中: 为一般意义上的随机干扰项,服从独立的正态分布 服从半正态分布,即

无效率成分随时间改变的模型如下:

文献中常用的假设: 服从半正态分布, 。t 表示观察年份, 表示每个个体的最大时间长度。 称为延迟参数,用以衡量非效率项随时间的下降程度。

 小于零则表示随着时间的推移,非效率程度在增强。

真正的固定效应模型,简称 TFE - SFA ( True Fixed Effect SFA)。

早期提出的所谓的面板随机边界模型有很明显的局限性 ——— 在产出边界函数的设定中没有考虑不可观测的个体效应,将公司个体效应归入了非效率项会导致非效率程度估计偏误。为了控制不可观测的个体效应,可以将产出边界函数设定为:

表示不随时间变化且不可观测的个体效应。具体估计方法边际极大似然估计法 (MMLE)和模拟边际极大似然估计法 (MMSLE)。具体命令参考 sftfe 及帮助文档。

在 Stata 执行随机边界模型估计主要使用 frontier 和  xtfrontier 命令,外部命令有: sfcrosssfpanelsftfesfkkSFA2tier 等。

我们以 Stata 官方自带数据集为例,演示 xtfrontier命令执行随机边界模型估计:

  1. use http://www.stata-press.com/data/r13/xtfrontier1 ,clear

  2. xtfrontier lnwidgets lnmachines lnworkers, ti

  3. est store xtsfa_ti

  4. xtfrontier lnwidgets lnmachines lnworkers, tvd

  5. est store xtsfa_tvd

  6. esttab xtsfa_ti xtsfa_tvd, mtitle(xtsfa_ti xtsfa_tvd)

  7. * 选项 ti 表示不随时间变化, tvd 表示随时间变化。

估计结果如下:

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

  2. (1) (2)

  3. xtsfa_ti xtsfa_tvd

  4. --------------------------------------------

  5. lnwidgets

  6. lnmachines 0.290*** 0.291***

  7. (17.69) (17.69)


  8. lnworkers 0.294*** 0.294***

  9. (19.07) (19.06)


  10. _cons 3.031*** 3.029***

  11. (21.03) (21.09)

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

  13. lnsigma2

  14. _cons 1.422*** 1.411***

  15. (5.32) (5.26)

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

  17. lgtgamma

  18. _cons 1.139** 1.124**

  19. (3.20) (3.14)

  20. --------------------------------------------

  21. mu

  22. _cons 1.126 1.111

  23. (1.74) (1.72)

  24. --------------------------------------------

  25. eta

  26. _cons 0.00168

  27. (0.39)

  28. --------------------------------------------

  29. N 948 948

  30. --------------------------------------------

  31. t statistics in parentheses

  32. * p<0.05, ** p<0.01, *** p<0.001

不显著,表明时间效应不明显。

非线性模型的 MLE 估计

指数分布是典型的非线性分布,常用于连续数据,特别是持续时间数据研究。指数分布的概率密度函数形式如下:

均值为 1 ,方差为 1 ,进一步将解释变量加入模型:

非线性指数模型可以表示如下:

我们通过模拟数据方式演示如何用 MLE 估计非线性模型。

其中:,产生 10,000 笔数据,代码如下:

  1. scalar a = 2

  2. scalar b = -1

  3. scalar mux = 1

  4. scalar sigx = 1

  5. set obs 10000

  6. set seed 2003

  7. gen x = mux + sigx*invnorm(uniform())

  8. gen lamda = exp(a + b*x)

  9. gen Ey = 1/lamda

  10. * To generate exponential with mean mu=Ey use

  11. * Integral 0 to a of (1/mu)exp(-x/mu) dx by change of variables

  12. * = Integral 0 to a/mu of exp(-t)dt

  13. * = incomplete gamma function P(0,a/mu) in the terminology of Stata

  14. gen y = Ey*invgammap(1,uniform())

  15. outfile y x using mma05data.dta, replace

ado 文件基本设定编写如下:

  1. cap program drop mleexp0

  2. program define mleexp0

  3. version 8.0

  4. args lnf theta /* Must use lnf while could use name other than theta */

  5. quietly replace `lnf' = `theta' - $ML_y1*exp(`theta')

  6. end

MLE 估计命令如下:

  1. sysuse mma05data.dta, clear

  2. ml model lf mleexp0 (y = x)

  3. ml search

  4. ml maximize

  5. estimates store rmle

  6. *Obtain robust standard errors

  7. ml model lf mleexp0 (y = x), robust

  8. ml search

  9. ml maximize

  10. estimates store rmlerobust

  11. local mm "rmle rmlerobust"

  12. esttab `mm',mtitle(`mm') compress nogap b(%10.4f) se(%10.4f) t stats(N ll) keep(_cons x)

运算结果如下:

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

  2. (1) (2)

  3. rmle rmlerob~t

  4. ------------------------------------

  5. eq1

  6. x -1.0192*** -1.0192***

  7. (0.0099) (0.0100)

  8. _cons 2.0076*** 2.0076***

  9. (0.0142) (0.0141)

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

  11. N 10000.0000 10000.0000

  12. ll -247.7733 -247.7733

  13. ------------------------------------

  14. Standard errors in parentheses

  15. * p<0.05, ** p<0.01, *** p<0.001

参考资料

  1. Cameron, A. C., & Trivedi, P. K. (2009). Microeconometrics Using Stata.

  2. Cameron, A. C., & Trivedi, P. K. (2010). Microeconometrics : methods and applications. Economic Journal, 116(509), F161-F162.

  3. Gould, W. W., Pitblado, J., & Poi, B. (2010). Maximum Likelihood Estimation with Stata.

  4. 边文龙, & 王向楠. (2016). 面板数据随机前沿分析的研究综述. 统计研究, 33(6), 13-20.

  5. 连玉君. (2018). 随机边界模型:进展及stata应用. 郑州航空工业管理学院学报, 36(1), 97-112.

关于我们

  • Stata 连享会(公众号:StataChina)】由中山大学连玉君老师团队创办,旨在定期与大家分享 Stata 应用的各种经验和技巧。

  • 公众号推文同步发布于 CSDN-Stata连享会 、简书-Stata连享会 和 知乎-连玉君Stata专栏。可以在上述网站中搜索关键词StataStata连享会后关注我们。

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

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

联系我们

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

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

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

  • 联系邮件: StataChina@163.com

往期精彩推文



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

2019暑期学术论文专题(连玉君+江艇主讲)

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

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