Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Maximum Likelihood Estimation in STATA

Maximum Likelihood Estimation in STATA

作者头像
宋彦
发布于 2019-07-04 03:01:17
发布于 2019-07-04 03:01:17
1.5K00
代码可运行
举报
文章被收录于专栏:一点ECON一点ECON
运行总次数:0
代码可运行

题外话:最近把网址改版了,之前文章的链接在网络上是静态html,现在改成了动态的博客类型,也会有tag分类,从电脑端阅读会方便一些。以后,网页端也会放开评论,现在还没设置。点击阅读原文即可。

_____________________________________________________________________________

STATA本身有很多estimator是通过MLE方法估计的,例如logit, probit等。在这些模型之外,STATA同时提供了ML syntax来拓展可以估计maximum likelihood模型。下面我们举例子说明ML syntax的用法。

LF Estimator

当整体样本的Log likelihood可以通过每个样本点的log likelihood累加得到时,STATA认为这类模型符合线性约束(Linear Form Restriction),可以使用STATA ML syntax中的lf方法来估计这类模型。我们将使用lf方法来估计四种常见的模型: binary logit, binary probit, OLS, and mixed logit model.

Logit Model

Log Likelihood formula for Logit Model: prob(y=1) = exp(xb)/(1+exp(xb))

Code: '''

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
program logit_lf
    args lnfj theta 
    tempvar p 
    local y $ML_y1
    quietly gen `p' = exp(`theta')/(1+exp(`theta'))
    quietly replace `lnfj' = ln(`p') if `y' == 1
    quietly replace `lnfj' = ln(1-`p') if `y' == 0
end

sysuse auto, clear
ml model lf logit_lf (eq1: foreign = weight length)
ml maximize

'''

几个要注意的点: + args 是STATA提供的一种parse的工具,是把positional argument变成指定的local。例如,ml提供的第一个argument通过args变成了local lnfj,而在剩下的程序里,都将以`lnfj'的形式出现。 + program 中的theta是所有x和系数的linear combination。这是使用lf方法最方便的地方,不需要考虑单独的系数大小,而是把系数的linear combination放在一起考虑。 + lnfj 是每个observation 的log likelihood. + $MLy1 是第一个公式中的 dependent variable,以global 的形式存在。 + 所有program 中使用的新的变量要用tempvar + ml model lf logitlf (eq1: foreign = weight length) 这一行是定义模型,即使用lf方法的logit_lf模型,模型中的y是foreign,而解释变量包括了weight和length。 + ml maximize 这一行是对上述模型进行求解,计算出对应最大loglikelihood的参数。

Probit Model

类似地,我们可以通过lf方法估计probit模型: '''

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
program probit_lf
    args theta lnfj
    local y $ML_y1
    quietly replace `lnfj' = ln(normal(`theta')) if `y' == 1
    quietly replace `lnfj' = ln(-normal(`theta')) if `y' == 0
end

'''

Linear Regression Model

线性回归模型(homoskedastic standard errors)也可以通过lf方法实现: ''' program olslf args lnfj theta std local y $MLy1 quietly replace lnfj' = ln(normalden(y', theta',std')) end

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ml model lf ols_lf (eq1: mileage = weight length) (eq2:)
* ml model lf ols_lf (eq1: mileage = weight length) /eq2 
ml maximize

'''

要注意的点:

  • Linear regression model和前面的logit probit模型不同的地方在于:线性回归模型的log likelihood不能通过一个theta(linear combination of variables)来表达,而是由两个系数同时决定的,一个是所有变量的线性组合,一个是残差项的standard deviation。因此,我们需要在写函数,和使用ml model时候都要做出相应的调整。首先,ml model 要加入第二个公式,即(eq2:)。这里,由于模型的假设包括了homoskedasticity,残差项的std不和任何解释变量相关,因此(eq2:)中不需要包括任何解释变量,只需要一个constant变量即可。
  • 当放松homoskedasticity的假设时,我们只需要稍微修改ml model中的eq2部分即可。

Mixed Binary Logit Model

Logit model虽然直观易估计,但是对于individual preference有比较强的限制。因此,我们可以估计一个mixed binary logit model,来解决这个问题。但是mixed logit model的log likelihood表达式没有closed form solution,因此只能通过simulation来解决,而STATA的ML syntax可以较好的提供simulation的方法。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// Simulate data for estimation 
/*
x~N(0,1)
beta1 = 1
beta2 ~ N(1,1)
epsilon~ extreme value distribution
y = (beta_1+ beta_2*x +epsilon>0)
*/

clear
set obs 1000
set seed 10101
gen x = rnormal()
gen beta_1 = 1
gen beta_2 = rnormal(1,1)
gen u = uniform()
gen epsilon = log(u)-log(1-u)
gen y = (beta_1 + beta_2*x+epsilon) > 0
forvalues i = 1/1000{
    quietly gen draw_`i' = uniform()
}

program mixed_logit
   args lnfj beta_1 beta_2 std 
   tempvar p sim_f sim_avg_f
   quietly gen `sim_avg_f' = 0
   quietly{
   forvalues i = 1/1000{
       gen `p' = exp(`beta'1+`beta_2'*x +  /// `std'*`draw_i'*x)/(1+exp(`beta'1+`beta_2'*x + `std'*`draw_i'*x))
       gen `sim_f' = `p' if $ML_y1 == 1
       replace `sim_f' = 1- `p' if $ML_y1 == 0
       replace `sim_avg_f` = `sim_avg_f` + `sim_f`/1000
   }
   replace `lnfj' = ln(sim_avg_f)
   }
end

ml model lf mixed_logit (beta_1:y = )(beta_2:x)(std:)
ml maximize

这里需要注意的是:

  • Log likelihood是一千次Simulation的平均。
  • 由于Log likelihood不能够通过所有变量的线性组合来表示,我们需要把系数拆分成三个部分,常数项的系数,变量X的系数的均值,变量X的std.这样的拆分不影响我们使用lf方法,因为样本的log likelihood仍然是由所有的样本的Log likelihood加总得到。

D0 Estimator

上述lf estimator只适用于样本的log likelihood仍然是由所有的样本的Log likelihood加总得到的情况,当上述条件不成立时,我们需要使用STATA提供的d0 estimator. D0 estimator的特点是我们需要在模型中提供整体样本的log likelihood,而不是每个单独样本点的log likelihood。下面我们用Conditional logit model来说明d0 estimator的用法。

Conditional Multinomial Logit Model

Model: Individual: indexed by i Choice situation: indexed by j Uij = XB+ epsilon, epsilon~extreme value distribution Log Likelihood if choice j is chosen: exp(xkb)/\sum(exp(x_jb))

Code:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cls
program drop _all
webuse choice,clear
gen japan = car==2
gen europe = car ==3 

program clogit_sch 
version 14
/* 
model: lnfi = exp(xb)/(\sum exp(xb))
*/
args todo b lnf 
tempvar xb e_xb sum_e_xb lnfj
// local group_id $ML_id 
local y $ML_y1
mleval `xb' = `b', eq(1)
sort id
quietly{
    gen `e_xb' = exp(`xb')
    bysort id: egen `sum_e_xb' = total(`e_xb')
    gen double `lnfj'   = ln(`e_xb'/`sum_e_xb')
    mlsum `lnf' = `lnfj' if `y' == 1
}
end


global ML_id id 
ml model d0 clogit_d0 (eq1: choice = dealer japan europe) 
ml check 
ml max

需要注意的是:

  • mleval: 计算系数 b'带来的linear combination的xb'。
  • mlsum: 计算所有相关的loglikelihood的总和。
  • mlcheck:用来对ml model进行debug。

和STATA提供改的asclogit的结果进行对比

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
webuse choice,clear   
set more off
gen japan = car==2
gen europe = car ==3 
cd C:/Users/yan/Dropbox/college_entrance_exam/program/2018.12
program drop _all
global ML_id id 
ml model d0 clogit_sch (eq1: choice = dealer japan europe,noconstant) 
ml check 
ml max  
asclogit choice dealer, case(id) alternatives(car)

这里需要指出,asclogit会在后台生成choice specific fixed effect,而我们的estimator需要自己生成这些变量,加入到模型中,但是好处是我们的模型更加flexible。

另外几个很有用的ml command是 ml query, ml report, ml init,和 ml graph。ml query是显示目前处理的模型,包括了每条equation,变量,和系数的初始值。ml report会显示目前的系数vector, gradient vector, negative Hessian, and maximization direction。ml init用来设置模型参数的初始值,例如 ml init 1 2 -2, copy。Ml graph可以用来检测潜在的convergence issue。Newton-Rhapson 是默认的maximization routine,可以通过technique()选项来尝试其他方法,例如bhhh, dfp, and bfgs等。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-01-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 一点ECON 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Stata估算观测数据的风险比
在分析二元结果时,逻辑回归是分析师对回归建模的默认方法。随机研究中,当然很容易估计比较两个治疗组的风险比。对于观察数据,治疗不是随机分配的,估计治疗效果的风险比有点棘手。
拓端
2020/07/17
8440
Stata 回归结果输出之 esttab 详解(更新版)
展示回归分析的结果是应用统计分析的重要组成部分。esttab 命令是由瑞士波恩大学社会学研究所(University of Bern, Institute of Sociology)的 Ben Jann 教授编写的 Stata 用户外部命令,主要用于生成满足用户需求的回归表格(Display formatted regression table),这类命令已经成为量化实证分析中的基础性技能,兼具效率、规范与美观。本文是对该命令的详细介绍。
直立行走
2021/05/04
54.8K5
Stata 回归结果输出之 esttab 详解(更新版)
生存分析:优化Cox模型的部分似然
在本文中,我们介绍了一种流行的生存分析算法,Cox比例风险模型¹。然后,我们定义了其对数部分似然和梯度,并通过一个实际的Python示例对其进行优化,以找到最佳的模型参数集。
磐创AI
2024/04/15
5550
生存分析:优化Cox模型的部分似然
如何使用 Stata 进行多层次回归分析?
作为社会动物,人类行为的本质在于彼此间无处不在的互动,而人类彼此间的互动又往往是在一个个局部群落环境下发生的,由此便有了“人以群分”之说。对于“人以群分”,简单的理解通常为特定时点下根据某一分类因素而对个体进行的区分,个体汇集在分类因素所包含的各个水平或类别之下。例如,社区与居民,不同社区内部有各自的居民;再比如班级与学生,通常一所学校内同一年级有许多班级,每一个班级内部是学生。因此,我们总能够将微观层面彼此不同的个体按照某一宏观特征因素进行划分,这时便构成了一个具有嵌套关系的多层次结构(a Multilevel Structure)。
直立行走
2024/09/23
1.1K0
如何使用 Stata 进行多层次回归分析?
stata如何处理结构方程模型(SEM)中具有缺失值的协变量
本周我正和一位朋友讨论如何在结构方程模型(SEM)软件中处理具有缺失值的协变量。我的朋友认为某些包中某些SEM的实现能够使用所谓的“完全信息最大可能性”自动适应协变量中的缺失。在下文中,我将描述我后来探索Stata的sem命令如何处理协变量中的缺失。
拓端
2020/07/17
3.3K0
stata具有异方差误差的区间回归
在Stata的实现中,可以使用鲁棒选项,当残差方差不恒定时,可以使用常规线性回归。使用稳健选项不会更改参数估计值,但使用三明治方差估计器计算标准误差(SE)。在这篇文章中,我将简要介绍使用稳健的区间回归的基本原理,并强调如果残差方差不是常数,与常规线性回归不同,则区间回归估计是有偏差的。
拓端
2020/07/17
1.1K0
NumPyML 源码解析(一)
In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation.
ApacheCN_飞龙
2024/02/17
3890
Stata中的治疗效果:RA:回归调整、 IPW:逆概率加权、 IPWRA、 AIPW|附代码数据
最近我们被客户要求撰写关于Stata中的治疗效果的研究报告,包括一些图形和统计输出。
拓端
2023/04/10
7850
VOS: Learning What You Don't Know by Virtual Outlier Synthesis
标题:VOS: Learning What You Don't Know by Virtual Outlier Synthesis
BBuf
2022/09/28
1.3K0
VOS: Learning What You Don't Know by Virtual Outlier Synthesis
因果推断常用计量方法
因果推断(Causal Inference): 是关联分析的一种统计方法,在大型系统中,试图指定/干预 “因” 而观测影响/改变 “果”的过程。因果推断不仅关注事物之间的关联性,还会更进一步探究该关联是否具有从因到果的推断关系。因果推断在生物医学、社会科学有广泛应用。通过揭示变量之间的因果关系,理解数据的产生机制,探究出现象背后的深层原因;通过回答"Why",理解决策的背后原因。
Yiwenwu
2025/02/09
4440
Latex 公式速查
所有的在 Latex 使用的字符公式,都需要放在\(和\),$ 和 $,\begin{math} 和\end{math}之间。
林德熙
2018/09/19
2.6K0
Latex 公式速查
基于梯度的NLP对抗攻击方法
Facebook提出了一种NLP通用的攻击方法,而且可以通过梯度优化,论文发表在EMNLP2021,名为Gradient-based Adversarial Attacks against Text Transformers,源码在facebookresearch/text-adversarial-attack
mathor
2021/11/15
1.2K0
线性回归的结果解释 II:函数形式变化的影响
因变量(Y)与自变量(X)间的线性关系并非一般性特征,引入非线性(nonlinearities)关系很有必要。在应用研究中,最常见的非线性关系通常有两种:
直立行走
2023/04/25
3.1K0
线性回归的结果解释 II:函数形式变化的影响
Stata中的治疗效果:RA:回归调整、 IPW:逆概率加权、 IPWRA、 AIPW
一种治疗可能是新药,其结果是血压或胆固醇水平升高。治疗可以是外科手术,也可以是患者活动的结局。治疗可以是职业培训计划以及结果就业或工资。待遇甚至可以是旨在提高产品销量的广告系列。
拓端
2020/08/14
1.5K0
逻辑回归
y=\sigma(f(\boldsymbol{x}))=\sigma\left(\boldsymbol{w}^{T} \boldsymbol{x}\right)=\frac{1}{1+e^{-\boldsymbol{w}^{T} \boldsymbol{x}}}
故事尾音
2019/12/18
6690
逻辑回归
Stata中的治疗效果:RA:回归调整、 IPW:逆概率加权、 IPWRA、 AIPW|附代码数据
最近我们被客户要求撰写关于Stata中的治疗效果的研究报告,包括一些图形和统计输出。
拓端
2023/04/20
4960
因果推断笔记——DML :Double Machine Learning案例学习(十六)
核心论文: V. Chernozhukov, D. Chetverikov, M. Demirer, E. Duflo, C. Hansen, and a. W. Newey. Double Machine Learning for Treatment and Causal Parameters. ArXiv e-prints
悟乙己
2021/12/07
8.8K0
因果推断笔记——DML :Double Machine Learning案例学习(十六)
AI/机器学习常用公式的LaTex代码汇总
在写AI/机器学习相关的论文或者博客的时候经常需要用到LaTex的公式,然而作为资深“伸手党”的我在网上搜索的时候,居然没有找到相关现成资源@-@
blmoistawinde
2020/05/26
3.5K0
Latex 公式速查
所有的在 Latex 使用的字符公式,都需要放在\(和\),$ 和 $,\begin{math} 和\end{math}之间。
林德熙
2022/08/12
2.2K0
Latex 公式速查
R语言用贝叶斯层次模型进行空间数据分析|附代码数据
在本文中,我将重点介绍使用集成嵌套 拉普拉斯近似方法的贝叶斯推理。可以估计贝叶斯 层次模型的后边缘分布。鉴于模型类型非常广泛,我们将重点关注用于分析晶格数据的空间模型
拓端
2023/01/03
4960
推荐阅读
相关推荐
Stata估算观测数据的风险比
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验