查看原文
其他

一个完整的实证程序, 以logit或ologit为例

计量经济圈 计量经济圈 2020-02-22


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

投稿econometrics666@sina.cn

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

题外话:有些圈友本身基础比较差,以为报个培训班就能够掌握计量方法以及数据管理软件,其实是比较危险的想法。在计量经济圈社群里的大咖,谁不是经过各种问题的洗礼而增进一点点理解的?如果以下这些Tips和Tricks都掌握了,你已经属于高手中的高手了。

1.数据管理的Stata程序功夫秘籍

2.数据清洗管理的知识点全在里面, 征服数管不是梦

3.高效使用Stata的115页Tips, PDF版本可打印使用

4."高级计量经济学及Stata应用"和"Stata十八讲"配套数据

5.编程语言中的函数什么鬼?Stata所有函数在此集结

6.世界范围内使用最多的500个Stata程序,再不使用你就真的out了

7.Stata最有用的points都在这里,无可替代的材料

8.reg3, 多元回归, 面板数据, 方差分析, 异方差和自相关检验和修正的Stata程序Handbook

9.Stata统计功能、数据作图、学习资源等,一文打尽所有你的wonders

10.为发表SSCI刊物, 必看这21篇文章(人大复印资料转载)

11.文本函数和正则表达式, 文本分析事无巨细

12.用Stata学习Econometrics的小tips, 第一发礼炮

13.用Stata学习Econometrics的小tips, 第二发礼炮

14.使用Stata进行随机前沿分析的经典操作指南

15.6张图掌握Stata软件的方方面面, 还有谁, 还有谁?

16.随机系数Logit模型及Stata实现

17.概率分布生成和蒙特卡洛模拟的实战示例

18.RDD断点回归, Stata程序百科全书式的宝典

19.PSM-DID, DID实证完整程序百科全书式的宝典

20.广义合成控制法gsynth, Stata运行程序release

21.面板门槛回归Stata程序xthreg

今天的主题:为了照顾到经验不那么多的学者,以下是@甜菜 群友(大咖系列)分享给圈子一个比较完整的实证程序, 以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等相关模型

为了照顾到群外的圈友,因此转发5分钟后截图到公众号后台可以得到里面的数据和程序do文档。


2年,计量经济圈公众号近1000篇文章,

Econometrics Circle

数据系列:空间矩阵 | 工企数据 | PM2.5 | 市场化指数 | CO2数据 |  夜间灯光 

计量系列:匹配方法 | 内生性问题 | 工具变量 | DID |  面板数据 | 常用TOOL


计量经济圈组织了一个计量社群,有如下特征:热情互助最多、前沿趋势最多、社科资料最多、社科数据最多、科研牛人最多、海外名校最多。因此,建议积极进取和有强烈研习激情的中青年学者到社群交流探讨,始终坚信优秀是通过感染优秀而互相成就彼此的。

Modified on

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

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