Stata实证分析——详细代码解释(代码直接食用)

该文章已生成可运行项目,

关于这篇STATA实证分析数据来源于《中国工业经济》2023年第8期,文献题目是企业数字化转型与供应链配置:集中化还是多元化。想复现的可以自己去对应的期刊下面找到数据和代码跑一跑。

基准回归

拿到数据先对数据做基本的分析:描述性统计和皮尔逊相关系数矩阵

#打开名为“数据.dta”的Stata数据文件,注意“数据.dta”就是你起的数据名,clear是清除内存中的数据
use "数据.dta", clear

#global C就是定义一个全局宏C,后续可通过 $C 快速引用这组变量,避免重复输入。
global C lnage lnsize klr rd ww debt indrate own 

#sum是生成变量的描述性统计表,并且把表放在附表1中。后面是要描述性分析的变量
sum PT5r CT5r ST5r lndigi $C //附表1

#计算变量间的Pearson相关系数矩阵,sig表示要标注显著性水平,并且把表放在附表2中
pwcorr PT5r CT5r ST5r lndigi $C , sig  //附表2

接下来开始做基准回归:

#xtset告诉STATA要一面板数据格式展示,指定个体id和时间year维度变量
xtset id year

#reghdfe使用高维固定效应,其中PT5r为被解释变量,解释变量有lndigi(核心解释变量)和$C(控制变量)
#absorb(ind year prov)固定行业(ind)、年份(year)和省份(prov)等不可观测因素。
#cluster(ind)在ind层面聚类标准误,缓解异方差和组内相关性。
#outreg2 是用于将回归结果、描述性统计输出导出到 Word、Excel、LaTeX 或文本文件中。
 reghdfe PT5r lndigi   $C ,absorb(ind year prov) cluster(ind)
   outreg2 using 基准.xls,append dec(4)   #将回归结果输出到 基准.xls 中,格式化为小数后4位。
  reghdfe CT5r lndigi   $C ,absorb(ind year prov) cluster(ind)
   outreg2 using 基准.xls,append  dec(4) 
    reghdfe ST5r lndigi   $C ,absorb(ind year prov) cluster(ind)
   outreg2 using 基准.xls,append  dec(4) 

注意:这一步如果出错的话,需要大家检查一下这三个包:ftools、 reghdfe、outreg2。一般就是没有下载。

稳健性检验

替换解释变量

我们还可以用上述代码进行稳健性检验。比如替换解释变量

xtset id year   
     reghdfe PT5r digidum   $C ,absorb(ind year prov) cluster(ind)
   outreg2 using 稳健.xls,append  dec(4) 
     reghdfe CT5r digidum    $C ,absorb(ind year prov) cluster(ind)
   outreg2 using 稳健.xls,append  dec(4) 

替换解释变量只是将核心解释变量Indigi换成了digidum。这是稳健性检验的一种方法。稳健性检验还有一些方法,比如替换被解释变量,方法类似,将被解释变量进行更换即可。

此外,拥有很多方法,比如加入行业固定效应,采用滞后的方法去衡量变量。

安慰剂检验

另外在这里我还想说一下关于安慰剂检验,这也是一种稳健性检验的方法,它用于验证结果是否由于真正的处理导致的,还是由其他导致的。这里的代码比较复杂,后续我会单独出一期,去更详细的解释它。

 此外关于稳健性检验有很多方法,感兴趣自己查一查吧。

内生性检验

内生性检验一般分为样本的选择偏差反向因果遗漏变量。这三种的出现会使检验中出现内生性问题。

样本的选择偏差

使用Heckman两阶段方法去缓解由样本选择偏差引起的内生性问题。(这里关于Heckman两阶段就不详细解释了,一时半会说不清,我只说一下关键点,感兴趣的可以自己搜一下)

Heckman两阶段方法,顾名思义,它分为了两个阶段。其中,第一阶段的目的就是生成IMR,这是用来反应样本的随机性。第二阶段是将IMR作为控制变量加入到回归方程中回归。

##########################第一阶段##########################
#probit是一个二元选择模型,结果只有0和1
#digidum 为二元被解释变量,GM_digi是自变量
#至于i.ind i.year i.prov控制行业、年份、省份的固定效应
#e(all) 是报告所有估计结果和统计量,是要求 outreg2 命令输出尽可能多的信息。
xtset id year   
  probit digidum GM_digi $C  i.ind i.year i.prov, cluster(ind) 
  outreg2 using 稳健.xls, append dec(4) e(all)  
#保存 Probit 模型的线性预测值,gen是生成一个变量imr
  predict w,xb
  gen imr = normalden(w)/normal(w)

##########################第二阶段##########################
#将imr作为控制变量加入到回归方程中进行回归分析并生成结果
     reghdfe PT5r lndigi  imr $C  ,absorb(ind year prov) cluster(ind) 
  outreg2 using 稳健.xls,append dec(4) e(all) 
     reghdfe CT5r lndigi  imr $C  ,absorb(ind year prov) cluster(ind) 
  outreg2 using 稳健.xls,append dec(4) e(all) 
     reghdfe ST5r lndigi  imr $C  ,absorb(ind year prov) cluster(ind) 
  outreg2 using 稳健.xls,append dec(4) e(all) 

反向因果

解决反向因果问题,也就是解释变量与被解释变量之间相互影响。可以使用工具变量检验。关于工具变量法,是解决内生性问题很好用的一个方法,采用的模型是两阶段最小二乘法(2SLS)。第一阶段是引入工具变量(可以是多个工具变量)作为解释变量做回归去预测内生变量。第二阶段则将第一阶段的预测值作为核心解释变量进行回归。

#l1lndigi,L1.变量名表示滞后一期的变量名,使用滞后一期进行回归
xtset id year  
    reghdfe PT5r L1.lndigi   $C ,absorb(ind year prov) cluster(ind)
  outreg2 using 稳健.xls,append  dec(4) 
    reghdfe CT5r L1.lndigi   $C ,absorb(ind year prov) cluster(ind)
  outreg2 using 稳健.xls,append  dec(4) 
    reghdfe ST5r L1.lndigi   $C ,absorb(ind year prov) cluster(ind)
  outreg2 using 稳健.xls,append  dec(4) 

##########################工具变量回归##########################
#ivreghdfe与reghdfe相比多了个iv,用于进行具有高维固定效应的工具变量回归
#(lndigi=iv)这部分指定了内生变量及其工具变量。lndigi 是内生变量,iv 是工具变量。
#它告诉ivreghdfe 命令,lndigi 被视为内生变量,需要使用 iv 作为工具变量来解决内生性问题。
#first是显示第一阶段回归结果
	ivreghdfe PT5r $C  (lndigi=iv), absorb(ind year prov) cluster(ind) first 
  outreg2 using 稳健.xls,append  dec(4)
	ivreghdfe CT5r $C  (lndigi=iv), absorb(ind year prov) cluster(ind) first 
  outreg2 using 稳健.xls,append  dec(4)
  	ivreghdfe ST5r $C  (lndigi=iv), absorb(ind year prov) cluster(ind) first 
  outreg2 using 稳健.xls,append  dec(4)

遗漏变量

关于遗漏变量带来的误差,可以添加一些变量到控制变量里面。它的方法就是再定义一个全局宏。

#没啥好解释的,加了一组$s的控制变量
xtset id year  
  global s insprop holdbank indnet ctrlmany
     reghdfe PT5r lndigi  $C $s ,absorb(ind year prov) cluster(ind)
  outreg2 using 稳健.xls,append  dec(4) 

机制检验

中介变量

中介变量方面的问题。一般是分为了三步法和两步法,因为多重共线性问题,现在大家用到的方法中两步法正在逐渐取代三步法。两者之间的区别在于三步法中的方程系数都要求显著,对于二步法中我们更多要求的是a*b显著

#中介——这是一个三步法检验
#在这样一个中介变量的检验中,首先定义面板数据
xtset id year            
#zhuanlishenqing是我们的中介变量 composite 是解释变量,回归后进行保存。CO2是被解释变量
reghdfe zhuanlishenqing composite $C, absorb(prov) cluster(prov) 
outreg2 using 中介.xls,append dec(4)
reghdfe CO2 composite $C, absorb(prov) cluster(prov)
outreg2 using 中介.xls,append dec(4)
reghdfe CO2 composite zhuanlishenqing $C, absorb(prov) cluster(prov)
outreg2 using 中介.xls,append dec(4)

#三步法,其中三个方程系数都要显著
X->M
X->Y
X+M->Y
#二步法,其中只a*b显著
X->M       #方程检验系数为a(X对M的影响)
X+M->Y     #检验系数为b(M对Y的影响)

调节变量

调节变量。交叉项(调节项和解释变量的乘积)。先生成交叉项,然后将交叉项、调节项放入回归模型中。

#首先就是先生成交互项,然后PT5r是我们的被解释变量,ldg_Cost_Coor 就是交互项,此外还有我们的解释变量lndigi 和调节变量Cost_Coor 

gen ldg_Cost_Coor=lndigi*Cost_Coor   
    reghdfe PT5r ldg_Cost_Coor Cost_Coor lndigi $C ,absorb(ind prov year) cluster(ind)
  outreg2 using 机制.xls,append  dec(4) 

异质性分析

关于异质性检验是干什么的就不详细说了。大家可以自行了解一下。大致就是我们研究的回归路径受不同环境的影响的研究。

#关于异质性分析方面。举一个代码例子。
就下面地区市场化水平。我们有一个变量marketdum其中的值为0或1.我们通过if语句来筛选地区市场化水准,然后进行回归。
#随后在local中定义一个局部宏m


xtset id year   //地区市场化水平 (表3 Panel A;附表14)
  reghdfe PT5r lndigi $C  if marketdum==1 ,absorb(ind year prov) cluster(ind)
   outreg2 using 异质性.xls,append dec(4) ctitle(`j') 
  reghdfe PT5r lndigi $C  if marketdum==0 ,absorb(ind year prov) cluster(ind)
   outreg2 using 异质性.xls,append  dec(4) ctitle(`j') 
  local m "reghdfe PT5r lndigi $C ,absorb(ind year prov) cluster(ind)"	
   bdiff,group(marketdum)  model(`m') reps(200) seed(1)  bs first detail	

#最后一步详细聊聊
#bdiff命令检验两组回归系数的差异
#group(marketdum):是按照marketdum分组
#model(m):使用前面定义的回归模型
#reps(200):Bootstrap重复200次,关于自助抽样问题大家可以详细了解一下。在链式中介中常用
#seed(1):设定随机数种子为1,保证结果可重现
#bs:使用Bootstrap方法
#first:显示第一阶段的回归结果
#detail:显示详细结果

这是一篇小论文中大致的内容。从基准回归到稳健性检验再到内生性检验。最后机制检验和异质性分析常用的已经给大家分享了。同时也是便利我自己,在需要代码的时候直接翻一翻即可。

关于我的下一篇分享,我想到了两个方向。

第一个,我想出一个关于数据的整理和整合。最近写论文要在不数据库找各式各样的数据。长数据、宽数据,还有关于数据合并,以及合并前的处理等等问题。

第二个,我想出一个关于熵值法、耦合协调度以及时空演变的内容。尤其是莫兰指数中的距离矩阵这一模块。欢迎大家一块儿讨论学习,如果大家发现哪里有错误的地方请大家多多指正!

本文章已经生成可运行项目
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值