新手面板数据回归之GMM的stata操作步骤

您所在的位置:网站首页 面板数据需要进行什么检验 新手面板数据回归之GMM的stata操作步骤

新手面板数据回归之GMM的stata操作步骤

2024-07-15 04:33| 来源: 网络整理| 查看: 265

新手面板数据回归之GMM 的 stata 操作步骤

(b站有我的视频版教学,欢迎大家观看)

广义矩估计( Generalized Method of Moments 即 GMM ) 

原理就是回归!就是一种高级点的回归!

我也是新手,也有很多不太懂的地方。断断续续学习了两个月,看了很多文献和公众号拼凑整理的,放到这里就是大家可以一起修正和补充。

数据情况:

样本:31个省份的面板数据

年份:2009-2016年 八年数据

因变量Y

自变量:八个X

一、数据整理、导入和保存

第一步:整理数据:

以X1 CPI为例 最好数据原始整理的时候,就注意形式,整理成这样

首先,stata不识别字符,所以建议把省份换成1-31。以免后续麻烦。也可以后续将字符修改为数值型,语法:egen pro=group(var1)//将var1变量转化为新的非字符串变量,并命名为pro。

(缺失数据:多重插补用的较多,这需要你根据自身情况去学习,学问多多。我是按照Landerman 等( 1997) 建议当缺失比例小于2%时, 用均数替代; 当缺失比例在2%—5%之间时, 用最大似然估计替代; 而当缺失比利大于5%时, 用多项回归替代(multiple imputation)。(Landerman, L .R . Land, K .C ., and Pieper , C .F . ( 1997) . An Empirical Evaluation of the Predictive Mean Matching Method for Imputing Missing Values . Sociological Methods and Research, 26( 1) : 3—33 .))

再从数据的第三行即具体数据开始,开始复制粘贴到stata的数据编辑器中,如右下图。

(ps:如果把第二行也纳入,stata会默认地区也是一个样本,后面2009-2016是数据,观测值变为32,年份9,错误如左下图,不要地区省份和具体年份!)

第二步:调整数据

开始在stata里面输入命令

第一:将第一列中的样本var1重命名

语法:rename var1 样本名

本例:rename var1 province

然后你就会看到var1变成province

第二:转换为数据,继续识别时间变量

语法:reshape long var,i(样本名) 

本例:reshape long var,i(province)

其他的var就会变成年份顺序

Stata语法界面可以看到:一共31个样本,248个观测值。J variable 有8个值。

第三:重命名 语法: rename _j year ;rename var 变量名称

本例就是: rename _j year ;rename var CPI

就得到下图:其中province 1-31个省份。2-9就是2009-2016年,八年

为防止数据不符合排序问题,我们可以再来个排序:sort 样本名称 时间

本例:sort province year 一般是没有问题的。

最后保存一下,方便后续导入使用。

注:其他变量也全部都这样导入,导入前先clear一下。stata也可以直接打开Excel,前提你的格式记得修改好。如果变量较多,一定记得保存到一个文件夹,后续导入需要一直使用这个文件路径。

第三步:合并数据

从因变量Y开始。其他变量也是要一个个导入合并。看起来一个个来很麻烦,操作熟练了,几分钟的事情,所以不要担心。

打开因变量Y的数据库。先合并CPI。

语法:merge 1:1 province year using 文件路径

寻找这个文件路径,很多方法,我一般使用文件夹上面有个复制路径,如下图,很简单方便。"C:\Users\thinkpad\Desktop\分省份数据\STATA修改数据\分省年度数据之CPI 2009-2016年.dta"

本例:merge 1:1 province year using C:\Users\thinkpad\Desktop\分省份数据\STATA修改数据\分省年度数据之CPI 2009-2016年.dta

合并之后,再进行排序对应,虽然一般整理的时候已经匹配好了,但安全起见,再打一遍。

语法:tab _merge drop _merge (因为这里会有多次merge,之前merge的数据会生成一个新var _merge, 合并后必须drop掉才可以进行下一步merge)

如下图,左边是语法界面,右边数据截面,我已经合并好了y和x1,x2,x3。

sort province year

结束!保存!

二、简单回归

这里想先简单写一写面板数据最基本的回归。即固定效应模型和随机效应模型。

第一步:定义面板数据: 语法:xtset样本 year

本例:xtset province year

注:第一个是横截面(样本或个体),第二个是时间,不要反了呀!!!

输入之后,stata会告诉你数据是否平衡,即strongly balanced。

第二步:数据检验:

单位根检验(如ADF、IPS、LLS、HT),判断是否平稳。

常用相同根单位根检验LLC(Levin-Lin-Chu)检验和不同根单位根检验Fisher-ADF检验(注:对普通序列(非面板序列)的单位根检验方法则常用ADF检验),如果在两种检验中均拒绝存在单位根的原假设则我们说此序列是平稳的,反之则不平稳。但很多时候,大家默认ADF拒绝就行。

此外,单位根检验一般是先从水平(level)序列开始检验起,如果存在单位根,则对该序列进行一阶差分后继续检验,若仍存在单位根,则进行二阶甚至高阶差分后检验,直至序列平稳为止。我们记I(0)为零阶单整,I(1)为一阶单整,依次类推,I(N)为N阶单整。

LLC检验语法:xtunitroot llc varname, lag(n) 

IPS检验语法:xtunitroot ips 变量名, lag(n)

可以使用xtunitroot,help一下,便会出现所有的检验命令及其用法和实例:而且有可能不同检验结果不一样,这里具体还需要加各种option,检验不通过,即同阶单整,还需要协整检验等,(具体去搜索别的大神写的,小的懂得也不多。这里还有很多学问!) 

协整性检验:

语法1:按照ssc install xtwest 

tsset province year转换为面板数据

协整的命令为: xtwest depvar varlist [if exp] [in range] , lags(# [#]) leads(# [#])

lrwindow(#) [constant trend bootstrap(#) westerlund noisily mg]

语法2:Kao 检验

xtcointtest kao y x1 x2 x3

下方汇报了 5 种不同的检验统计量,其对应的 p 值均小于 0.01,故可在 1% 水平上强烈拒绝 “不存在协整关系” 的原假设,认为存在协整关系。 

语法3:Pedroni 检验

下面进行更为灵活的 Pedroni 检验,允许不同面板单位有不同的协整向量与残差自回归系数,并加上时间趋势项

xtcointtest pedroni y x1 x2 x3,trend

语法4:Westerlund 检验

下面进行 Westerlund 检验,依然包括时间趋势项。

.xtcointtest westerlund y x1 x2 x3, trend

第三步:hausman检验,判断何种检验方法。

语法:xtreg y x1 x2 , fe (fe是固定效应模型)

est store fe (保存回归结果)

xtreg y x1 x2 , re (re是随机效应模型)

est store re (保存回归结果)

hausman fe re (比较两者,顺序一般而言不可以调换)

hausman检验最常用(也有人认为只是理论可信,实际一般),其实具体有三种模型,具体检验方法看下图,然后自己可以一个个检验方法搜索,都会找到语法和结果分析。 

hausman出现负数是因为var(b-B)=var(b)-var(B)在有限样本的情况下,这两个协方差矩阵的差不能保证是正定的,所以可能会出现负数。在这种情况下无法拒绝random effect model,这是由协方差矩阵的相似性引发的。如果想进一步检验到底选择随机还是固定效应,可以用Baltagi(2005,pp.65-73)的式子解决这个问题,这个协方差矩阵永远是非负定的。认为用Breusch-Pagan Lagrange multiplier (LM) test来检验random effects

第二,如果hausman检验值为负,说明的模型设定有问题,导致Hausman 检验的基本假设得不到满足,遗漏变量的问题,或者某些变量是非平稳等等,则采用hausman fe, sigmaless或hausman fe, sigmamore。关于结果为负数没有统一定论,大部分情况都是选择固定效应模型,以上的检验结果最好是拒绝原假设,至少要很多个才好(注:这些都值得商榷的,很多也没有定论)。

其中固定效应模型应用较多,再详细介绍一点语法:

个体固定效应模型:xtreg y x1 x2 x3,fe robust(stata稳健性回归时不报告调整R2,稳健回归的话,则只调整了t统计量,其他不变)

时刻固定效应模型:xi:y x1 x2 x3 i.year

控制个体和年份的固定效应模型:xtreg y x1 x2 x3 i.year i.province,fe

最小二乘法虚拟变量模型: xi xtreg y x1 x2 x3 i.year i.province,fe

如果存在单位根,则取滞后项。例如:xtreg lnsjY l3.lnx1 lnx2 lnx3 lnx4 lnx6 lnx7 lnx8 , fe robust 其中lnx1不平稳,滞后3项平稳

LSDV方法:reg y x1 x2 x3 i.province,vce(cluster province) estimates store LSDV

很多中文文献统计糙点,如果写英文,你还需要再去了解很多,经管之家是个不错的APP。其实很多时候,这些检验只是为了应付审稿人,统计方法说来说去还是主观性很强,看自己需要怎么样的结果然后不断试验。

三、GMM

为什么使用这个方法,何时使用,注意事项需要再去搜索学习,学问很多,这里我就写一点语法经验。建议学这个之前,先学习什么是内生变量、工具变量、自相关等各种问题。如果不太懂也没有时间学,就建议使用OLS之类的回归。

现在都是使用xtabond2的语法格式:

第一步:定义截面变量和时间变量,语法:tsset province year

第二步:样本的描述性统计,语法:xtsum y x1 x2(注意stata区分大小写,你命名的时候最好统一,否则经常不识别)

我们发现统计结果是按照“整体”、“组间”和“组内”三个层次进行的。当然,你也可以采用 sum 命令来得到基本统计量,而且在正是写论文时,所需列示的结果并不要求像上面那么详细,此时 sum 命令反而更实用。

看下图,自行对比需要什么。

第三步:具体GMM操作

第一,对所有数据取对数,消除异方差

如对变量x取对数,语法: gen lnx=log(x)

九个变量依次变换

(ps:由于自变量中有比例,百分比,关于这个是否取对数,我没有找到统一要求,暂且一是看标准差是否大,二是看是否核心变量,是否需要明确具体系数大小,如果均是yes,那么取对数无可厚非。我是都取,由于如果是小于的1的数值,取对数就是小于0,所以建议可以转换为百分比,千分比,保证数值大于1)

缩尾处理:ssc install winsor2, replace,自动安装 winsor2

默认双侧缩尾winsor2 x1, gen(x11) cuts(1 99)

可以通过winsor命令的highonly或lowonly选项来进行单侧缩尾处理:winsor x1, gen(x11) p(0.025) highonly

winsor2 x1 x2 x3 x4 x5 , replace cuts(1 99) :批量处理多个变量;replace 选项,可以不必生成新变量,直接替换原变量。

winsor2 x1 x2 x3 x4 x5 , replace cuts(1 99) trim

没有trim的就是用边界值替换边界外的, values smaller than the 1th percentile is repalce by the 1th percentile, and the similar thing is done with the 99th percentile.

加trim的就是直接舍去边界外值,discard values smaller than 1th percentile or greater than 99th percentile

第二,安装xtabond2

ssc install xtabond2

第二步,最简单的语法形式:xtabond2 depvar(因变量) varlist(系列解释变量:前置变量、严格外生变量、内生变量)

simple autoregressive model(AR自回归模型) with no controls except time dummies

one-step difference GMM with robust errors.

语法:xtabond2 y L.y i.t, gmmstyle(L.y) ivstyle(i.t) robust noleveleq

其中:L.y表示y的滞后lag t时间 nolevel或者noleveleq表示是difference-GMM,系统默认的system-GMM

举例:如果x1 is strictly exogenous严格外生变量, x2 is predetermined but not strictly exogenous前置变量,但不完全外生, and x3 is endogenous内生变量, then

语法:xtabond2 sjY L.sjY x1 x2 x3, gmmstyle(L.sjY x2 L.x3) ivstyle(x1)twostep robust small orthogonal

这就是 two-step system GMM, Windmeijer-corrected standard errors, small-sample adjustments, and for orthogonal deviations(用来消除固定个体效应,即一个第t期的变量减去t期之后所有日期的平均数值,这与我们时常用的first difference不太一样,因为这种方式保证不了所有日期都能够获得数值).

我的案例: xtabond2 lnsjY L.lnsjY lnx1 lnx2 lnx3 lnx4 lnx5 lnx6 lnx7 lnx8 lnx9, gmm (lnsjY lnx1 lnx3 lnx7 lnx8 lnx2 lnx9, lag(2 2)) iv( lnx4 lnx5 lnx6 ) twostep robust noconstant small orthogonal

内生变量滞后两阶 工具变量4.5.6 二步系统GMM

下面再来具解释一下各选项。但其实实际应用,语法没有这么复杂。

语法:xtabond2 depvar(因变量) varlist(系列解释变量:前置变量、严格外生变量、内生变量) [条件筛选] [回归区间][, level twostep robust cluster noconstant small noleveleq passthru orthogonal gmmopt [gmmopt ...] ivopt [ivopt ...] pca components(主成分部分) artests(自相关检验的最大阶数) arlevels h(这个选项一般不影响大局) ]

level(置信区间) 

twostep(表明计算two step估计量而不是one step估计量) 

robust(如果前面选择了twostep,那么就必须选择这个robust,因为two会严重低估回归系数的标准误差,得到的回归系数都过于显著) 

cluster(用来重新命名Panel变量,就是说改变之前的id,主要考虑组内(比如以id为组,year为组)

noconstant(在level equations中不要常数项)

small(用t统计量和F统计量,而不是用z统计量和Wald统计量来评估回归显著性) 

noleveleq(如果有这个命令,那工具变量中就只有difference equations,没有了level equations,因此就等同于做了difference GMM,否则默认system GMM) 

orthogonal(这是用向后orthogonal deviations方法来创造工具变量,主要是与difference GMM连着用,比传统的AR(1)difference GMM更加稳定无偏,尤其是数据非平衡以及有缺失值的时候使用,但系统默认一阶差分first difference)

gmmopt [gmmopt ...] gmmstyle(varlist [, laglimits(对于transformed或者level equations,这个选项规定了工具变量选择的前后日期) 

ivopt [ivopt ...] ivstyle(varlist [, equation({diff | level | both}(表示哪个equation用前面的那个工具变量)) 

collapse(只为每个变量和滞后距离创造一个工具变量,而不是每一个时间段都创造一个工具变量,减少了工具变量个数,利于后面的过度检验,这个option是放在gmm里面)

passthru split(仅仅用于system GMM和没有规定equation(),主要是把工具变量分成2组来做difference-in-Sargan/Hansen testing)

mz(工具变量中Missing值就换成0)

equation({diff | level | both}) 那个等式使用工具变量,默认both

pca components(主成分部分) 

artests(自相关检验的最大阶数) 

arlevels(标明自相关检验用于level equations)

h(这个选项一般不影响大局) 

#注意的是,如果x变量是个前置变量,那作为level equation的工具变量是可以的,但是现在就不能用ivstyle选项,而是后面这个iv(x, eq(level))。

第四步:过度检验和自相关检验

xtabond2会报告过度检验(Hansen J和sargan test)对于Sargan test of overid. restrictions和Difference-in-Sargan tests of exogeneity of instrument subsets,原假设是这些instruments valid, 因此p不显著,不reject原假设即p值要大于0.10以上就是好的,同时也不要大于等于1。一般而言在0.1-0.25之间最合适。

自相关检验情况(AR1 AR2),是检验扰动项的差分是否存在一阶与二阶自相关,以保证GMM的一致估计,一般而言扰动项的差分会存在一阶自相关,因为是动态面板数据,但若不存在二阶自相关或更高阶的自相关,则接受原假设“扰动项无自相关”。一般情况,AR1经常会拒绝,AR2则不显著,p值大于0.1较合适,不拒绝,如果AR2也显著的话,那么就该用3阶以及更高阶作为工具变量,然后检验AR3是否显著。在原方程后面再加上artests(3)就OK了

To compensate, xtabond2 makes available a finite-sample correction to the two-step covariance matrix derived by Windmeijer (2005). This can make two-step robust estimations more efficient than one-step robust, especially for system GMM (xtabond2反正用了一些方式让他的回归更加有效率和稳健)。

GMM估计包括一步(One-Step)和两步(Two-Step)的GMM。两步估计的权重矩阵依赖于估计参数且标准差存在向下偏倚,并没有带来多大的效率改善且估计量不可靠,一步估计量尽管效率有所下降但它是一致的,因而在经验应用中人们通常使用一步GMM估计。理论上,一步系统广义矩估计(One-Step SystemGMM)利用了比一步差分广义矩估计(One-step Difference-GMM)更多的信息,前者可以解决后者不能解决的内生性和弱工具变量问题,因而前者比后者的估计结果更有效。Blundell and Bond利用蒙特卡罗模拟实验也证实,在有限样本下,系统GMM比差分GMM估计的偏差更小、效率也有所改进。

第五步稳健性分析:

一是从数据选择上考虑,依据不同的标准来分类,进而验证检验结果是否依然显著,这种办法的难点在于不同标准之间较难衡量,在分类过程中会出现取舍不当的问题;不同的标准对数据重分类、聚合;蒙特卡洛/boostrap模拟取样;还有5%截尾值删减、不取或取对数

其次从变量选择上考虑,即通过用其他相类似的变量替代,这种办法较多人采用,但有些变量存在单一性,很难用其他变量代替,或者出现其他变量与解释变量之间相关性不大等问题;

最后从计量方法入手,利用不同的回归方法来检验,如先用基础回归的方法,对比解释变量在混合回归、固定效应模型和随机效应模型的系数和方向,再用动态面板的方法进一步检验,发现两者的系数大小和正负方向并没有发生巨大变化,也进一步说明了模型的稳健性。

模型不稳健怎么弄?

使用GMM的注意事项:

1、OLS和固定效应模型估计的参数一般就是真实系数的上限和下限。可考虑做GMM的估计限定范围。也可以做稳健性分析。

2、适合短面板数据即N>T

3、如果数据有间隙,尽量使用垂直离差。

4、每个自变量通常需要出现两次(除了定义的工具变量)。

先作为自变量出现在在xtabond2命令中逗号的左边,再以某种形式作为工具变量出现在逗号右边。如果变量x是完全外生的,那么放到 instyle(x)(表示直接作为工具变量);如果x是前定predetermined的,但不是完全外生的,则放到 gmmstyle(x)(表示从滞后一期或以上开始都作为工具变量);如果x是内生的,则放到 gmmstyle(L.x)(表示从后两期或以上开始都作为工具变量) . 

例: xtabond2 y L.y x1 x2 x3 i.t, gmmstyle(L.y x2 L.x3) ivstyle(i.t x1)> twostep robust small orthogonal

5、报告工具变量的数量。

如果按照上一条的做法,工具变量的数量会很多。这样会导致overidentification test不准确,(一个标志就是 Hansen统计量的p值变为1, Hansen test的p值在(0.1,0.25)之外都要小心,小于0.1表明拒绝工具变量有效的假设,大于0.25表明选的工具变量太多, hansen检验变弱了)通常,需要限制工具变量数量,可以用 collapse选项,也可以用1ag1imits()选项。习惯做法是,选择不同数量的工具变量以显示估计系数的稳健性。工具变量数量的上限就是模型中个体的数量(也就是N),超出此上限, xtabond2命令会报警。

6、使用system-GMM的前提是数据应该在稳态附近,就是指在观测期间,样本或个体之间不能离稳定状态太远,否则这些变量的变化就会和固定效应关系比较大,不满足使用前提。

7、在有间隙的面板数据中使用正交偏差即orthogonal deviations,可以增大样本量。

8、报告你的选项:system还是difference;垂直离差还是一阶差分;工具变量;滞后几期;选择什么样的robust(nonrobust,cluster–robust, or Windmeijer-corrected cluster–robust errors;)。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3