Py学习  »  Git

一个完整的实证程序是什么样子, 以logit或ologit为例

计量经济圈 • 3 年前 • 779 次点击  


凡是搞计量经济的,都关注这个号了

投稿econometrics666@sina.cn

所有计量经济圈方法论丛的程序文件, 微观数据库和各种软件都放在社群里.欢迎到计量经济圈社群交流访问.

关于Stata,可以参看:1.Stata16新增功能有哪些? 满满干货拿走不谢2. Stata资料全分享,快点收藏学习3.Stata统计功能、数据作图、学习资源4.Stata学习的书籍和材料大放送, 以火力全开的势头5.史上最全Stata绘图技巧, 女生的最爱6.把Stata结果输出到word, excel的干货方案7.编程语言中的函数什么鬼?Stata所有函数在此集结8.世界范围内使用最多的500个Stata程序9.6张图掌握Stata软件的方方面面, 还有谁, 还有谁? 10.LR检验、Wald检验、LM检验什么鬼?怎么在Stata实现11.Stata15版新功能,你竟然没有想到,一睹为快12. "高级计量经济学及Stata应用"和"Stata十八讲"配套数据13.数据管理的Stata程序功夫秘籍14.非线性面板模型中内生性解决方案以及Stata命令15.把动态面板命令讲清楚了,对Stata的ado详尽解16.半参数估计思想和Stata操作示例17.Stata最有用的points都在这里,无可替代的材料18.PSM倾向匹配Stata操作详细步骤和代码,干货十足,19.随机前沿分析和包络数据分析 SFA,DEA 及Stata操作20.福利大放送, Stata编程技巧和使用Tips大集成21.使用Stata进行随机前沿分析的经典操作指南22. Stata, 不可能后悔的10篇文章, 编程code和注解23.用Stata学习Econometrics的小tips, 第二发礼炮24.用Stata学习Econometrics的小tips, 第一发礼炮25.广义合成控制法gsynth, Stata运行程序release26.多重中介效应的估计与检验, Stata MP15可下载27.输出变量的描述性统计的方案28.2SLS第一阶段输出, 截面或面板数据及统计值都行29.盈余管理指标的构建及其Stata实现程序, 对应解读和经典文献30.Python, Stata, R软件史上最全快捷键合辑! 31.用Stata做面板数据分析, 操作代码应有尽有32.用Stata做面板数据分析, 操作代码应有尽有33.没有这5个Stata命令, 我真的会活不下去!,34.第一(二)卷.Stata最新且有趣的程序系列汇编35.第三卷.Stata最新且急需的程序系列汇编36.第四卷.Stata最新且急需的程序系列汇编37.干货: UN和WTO推荐的最全且权威的实证研究方法及在Stata实现!必收藏!38.再中心化影响函数RIF回归和分解的Stata操作程序39.R和Stata软件meta分析操作详细攻略, 对研究再开展研究的利器! 40.不能安装Stata命令咋弄?这个方法一直都比较靠谱!41.使用Stata做结构方程模型GSEM的操作指南42.疫情期计量课程免费开放!面板数据, 因果推断, 时间序列分析与Stata应用

今天的主题:为了照固到经验不那么多的学者,以下是@甜菜 群友(大咖系列)分享给圈子的一个比较完整的实证程序, 以logit或ologit为例。

// Copyrights belong to @计量经济圈

**For Econometrics Circle, 以下只是例子而已

use econometrics.dta, clear //输入数据

// Data management
global m F3A F4A A1 C18AA C18AB C18AC C18AD C18AE C18AF E8A B3A F6A //定义全局宏

**一个简单的循环来把变量的label全部删除
foreach varlist of global m {
label variable `varlist' ""
}

**数据整理基本要素
qui {
recode F3A (1=0)(3=1)(2=2)(else=.), gen(z)
label var z "wich one has higher z"
label define z 0 "a" 1 "b" 2 "c"
label values z

recode F4A (0=0)(1=1)(2=2)(3=3)(4=4)(5=5)(6=6)(7=7)(8=8)(10=10)(else=.), gen(number_child)
label var number_child "number of children"

recode A1 (1=0)(2=1)(else=.), gen(gender)
label var gender "if female"

gen Income = C18AA + C18AB + C18AC + C18AD + C18AE + C18AF
gen Inc = Income if inrange(Income,0,1000000)
label var Inc "total income"
capture drop Lninc
gen Lninc = ln(Inc+1)
gen income=Lninc

recode E8A (3=1) (1=0) (else=.), gen(x)
label var x "if x"

gen age2 = age^2

recode B3A (1=1) (2=2) (3=3) (4/5=4) (6=5) (7/8=6) (else=.), gen(education)
label var education"Education level"

recode F6A (1=0)(3=1)(2=2)(else=.), gen(y)
label var y "which one has higher y"
label define y 0 "a" 1 "b" 2 "c"
label values y y

}
/***********************************************************
Table 1: ordinal logit and generalized ordinal logit model
************************************************************/
drop if number_child<1 | number_child>6

global xlist x number_child education age age2 income z
global margef cttop(margeff) dec(3) alpha(0.01, 0.05, 0.1)e(ll r2_a r2_p) see replace

ologit y $xlist
estat ic // get AIC BIC
est store m
forval i = 0/2 {
est res m
margins, dydx(*) predict(outcome(`
i')) post
est store m`i'
} //export marginal effect
esttab m0 m1 m2 using ologit1.rtf,pr2 b(%9.3f) star(* 0.1 ** 0.05 *** 0.01) se ar2 replace

//自己安装了gologit2之后把前面的星号去掉即可运行
**version 14.0
**gologit2 y $xlist, autofit
**margeff, at(mean) replace
**outreg2 using gologit.doc, $margef
**estat ic // get AIC BIC

/******************************************
Table 2: average predicted probability
*******************************************/
ologit y $xlist
local j=1
forvalues j=1(1)3 {
capture drop p`
j'
capture drop mx1`j'
capture drop mx0`
j'
local j=`j'+1
}

local k=1
forvalues k= 1(1)3{
predict p`
k'
egen mx1`k'=mean(p`k') if x==1
egen mx0`k'=mean(p`k') if x==0
local k= `k'+1
}

**把预测概率值提出到scalar
forvalues l=0/1 {
forvalues j= 1/3 {
sum mx`
l'`j'
scalar x`l'`j'=r(mean)
}
}
**把预测概率值显示出来
forvalues l=0 /1 {
forvalues j= 1/3 {
dis as text "先生(女士), x`l'`j'=" as result x`l'`j'
}
}

/*************************************
Table 3: regression by subgroups
**************************************/

**按照教育和孩子数量分别回归
global sub "education number_child"
local k=1
qui {
foreach subgroup of global sub {
forvalues k=1/6{
ologit y $xlist if `subgroup'==`k'
forval i = 0/2 {
est res m
margins, dydx( *) predict(outcome(`i')) post
est store m`i'
}
outreg2 using education`
k'.doc
}
}

}

**与前面的回归结果是一模一样的
by education, sort: ologit y $xlist
by number_child, sort: ologit y $xlist

/*************************************
Table 4: Two types of standard errors
**************************************/

**自助标准误
bootstrap,reps(50): ologit y $xlist, vce(robust)

**Delta方法标准误
capture prog drop brape
program brape,rclass
syntax varlist
probit `varlist'
margins, dydx(_all)
matrix ape=r(b)
local k: word count `
varlist'
local k=`k'-1
forvalues i=1/`
k' {
scalar b`i'=el(ape,1,`i')
return scalar ape`i' =b`i'
}
end
brape y $xlist

/*************************************
Table 5: Three types of models for binary response models
**************************************/


* probit, logit and cloglog estimation and output
recode y (0/1=0)(2=1), gen(y1)
qui {
probit y1 $xlist
est store probit
margins, dydx(_all) post
est store probit1

logit y1 $xlist
est store logit
margins, dydx(_all) post // post is for saving margins
est store logit1

cloglog y1 $xlist
est store cloglog
margins, dydx(_all) post
est store cloglog1
}
est table probit logit cloglog,star(0.1 0.05 0.01) stats(N p_r2 aic bic) //系数比较
est table probit1 logit1 cloglog1,star(0.1 0.05 0.01) //边际效应比较

/*************************************
Table 6: Additional content for review
**************************************/

sysuse auto, clear
generate price2 = price[_n-1] //price2变量第二行的数等于price变量第一行的数
regress price mpg foreign rep78
display _b[mpg] //显示mpg回归的系数

**multinomial logit model
mlogit rep78 gear_ratio displacement foreign
display [5]_b[ foreign]

webuse dollhill2, clear
by age (smokes), sort: generate wgt=pyears[_N] //按照age, smokes的顺序排序
bysort age: generate wgt=pyears[_N] //组内age生成wgt, 在组内都是这组最后一个数值
by age, sort: egen mean_w = mean(smokes) //能够按照age生成smokes的均值

**异方差probit估计的优越性hetprobit
webuse hetprobxmpl, clear
probit y x
predict xhet1, pr
gen residual=y-xhet1
line residual x //看看是不是同方差,如果有回归趋势那证明是异方差

hetprobit y x, het(xhet) //异方差probit估计
line xhet x //看看是不是同方差

**关注一下ivprobit, meologit, xtprobit, clogit, cloglog等相关模型

关于一些计量方法的合辑,各位学者可以参看如下文章:实证研究中用到的200篇文章, 社科学者常备toolkit实证文章写作常用到的50篇名家经验帖, 学者必读系列过去10年AER上关于中国主题的Articles专辑AEA公布2017-19年度最受关注的十大研究话题, 给你的选题方向2020年中文Top期刊重点选题方向, 写论文就写这些后面,咱们又引荐了使用CFPS, CHFS, CHNS数据实证研究的精选文章专辑!这40个微观数据库够你博士毕业了, 反正凭着这些库成了教授 Python, Stata, R软件史上最全快捷键合辑!关于(模糊)断点回归设计的100篇精选Articles专辑!关于双重差分法DID的32篇精选Articles专辑!关于合成控制法SCM的33篇精选Articles专辑最近80篇关于中国国际贸易领域papers合辑!最近70篇关于中国环境生态的经济学papers合辑!使用CEPS, CHARLS, CGSS, CLHLS数据库实证研究的精选文章专辑!最近50篇使用系统GMM开展实证研究的papers合辑!
关于相关计量方法视频课程,文章,数据和代码,参看  1.面板数据方法免费课程, 文章, 数据和代码全在这里, 优秀学人好好收藏学习!2.双重差分DID方法免费课程, 文章, 数据和代码全在这里, 优秀学人必须收藏学习!3.工具变量IV估计免费课程, 文章, 数据和代码全在这里, 不学习可不要后悔!4.各种匹配方法免费课程, 文章, 数据和代码全在这里, 掌握匹配方法不是梦!5.断点回归RD和合成控制法SCM免费课程, 文章, 数据和代码全在这里, 有必要认真研究学习!6.空间计量免费课程, 文章, 数据和代码全在这里, 空间相关学者注意查收!
下面这些短链接文章属于合集,可以收藏起来阅读,不然以后都找不到了。

2.5年,计量经济圈近1000篇不重类计量文章,

可直接在公众号菜单栏搜索任何计量相关问题 ,

Econometrics Circle




数据系列空间矩阵 | 工企数据 | PM2.5 | 市场化指数 | CO2数据 |   夜间灯光 官员方言  | 微观数据 | 内部数据
计量系列匹配方法 | 内生性 | 工具变量  | DID | 面板数据 | 常用TOOL | 中介调节 | 时间序列 | RDD断点 |  合成控制 | 200篇合辑 | 因果识别 | 社会网络 | 空间DID
数据处理Stata |  R | Python | 缺失值 | CHIP/ CHNS/CHARLS/CFPS/CGSS等 |
干货系列能源环境 | 效率研究 |  空间计量 | 国际经贸 | 计量软件 | 商科研究 | 机器学习 | SSCI | CSSCI  | SSCI查询 | 名家经验
计量经济圈组织了一个计量社群,有如下特征:热情互助最多前沿趋势最多、社科资料最多、社科数据最多、科研牛人最多、海外名校最多。因此,建议积极进取和有强烈研习激情的中青年学者到社群交流探讨,始终坚信优秀是通过感染优秀而互相成就彼此的。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/74055
 
779 次点击