社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Git

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

计量经济圈 • 4 年前 • 1037 次点击  


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

投稿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
 
1037 次点击