stata软件中关于面板数据的介绍
Chp8 Panel Data
一直想把看Panel模型时的感悟整理成笔记,但终因懒惰而未能成行。今天终于下决心开了个头,可遗憾的是,这个开头却是从本章的结尾写起,因为这一部分最容易写。不过,凡事有了好的开头基本上也算成功一半了,所以后面的整理工作还要有劳各位的督促。文中的不足还望不吝指出。
8.1 简介 8.2 一般模型
8.2.1 固定效应模型(Fixed Effect Model) 8.2.2 随机效应模型(Random Effect Model) 8.3 自相关性 8.4 动态Panel Data 8.5 门槛Panel Data
8.6 非稳定Panel Data及协整 8.7 Panel VAR 8.8 Stata8.0实现
在介绍了Panel Data的基本理论后,下面我们介绍如何使用STATA8.0软件包来实现模型的估计。前面我们已经提到,Panel Data具有如下数据存储格式:
company
1 1 1 1 2 2 2 2 3 3 3 3
year 1951 1952 1953 1954 1951 1952 1953 1954 1951 1952 1953 1954
invest
755.9891.21304.41486.7588.2645.5641.0459.3135.2157.3179.5189.6
mvalue
4833.04924.96241.75593.62289.52159.42031.32115.51819.42079.72371.62759.9
其中,变量company和year分别为截面变量和时间变量。显然,通过这两个变量我们可以非常清楚地确定panel data的数据存储格式。因此,在使用STATA8.0估计模型之前,我们
stata软件中关于面板数据的介绍
必须告诉它截面变量和时间变量分别是什么,所用的命令为tsset1,命令格式如下: tsset panelvar timevar
这里需要指出的是,由于Panel Data本身兼具截面数据和时间序列二者的特性,所以对时间序列进行操作的运算同样可以应用到Panel Data身上。这一点在处理某些数据时显得非常方便。如,对于上述数据,我们想产生一个新的变量Lag_invest,也就是invest的一阶滞后,那么我们可以采用如下命令: gen Lag_invest = L.invest 得到的新的数据为:
company
1 1 1 1 2 2 2 2 3 3 3 3
year 1951 1952 1953 1954 1951 1952 1953 1954 1951 1952 1953 1954
invest755.9 891.2 1304.4 1486.7 588.2 645.5 641.0 459.3 135.2 157.3 179.5 189.6
Lag_invest
.755.9 891.2 1304.4
.588.2 645.5 641.0
.135.2 157.3 179.5
mvalue 4833.0 4924.9 6241.7 5593.6 2289.5 2159.4 2031.3 2115.5 1819.4 2079.7 2371.6 2759.9
当然,按照这样的思路,我们还可以产生某个变量的移动平均、差分等。总之,凡是可以应用到时间序列上的命令,基本上都可以应用到Panel Data中来。在完成了上述设定后,我们就可以进行基于Panel Data的数据描述性统计和模型的估计了。
8.8.1 Panel Data样本描述性统计
在正式进行模型的估计之前,我们必须对样本的基本分布特性有一个总体的了解。对于Panel Data而言,我们至少要知道我们的数据中有多少个截面(个体),每个截面上有多少个观察期间,整个数据结构是平行的还是非平行的2。进一步地,我们还要知道主要变量的样本均值、标准差、最大值、最小值等情况。这些都可以通过以下三个命令来完成: 12
See help tsset, 命令为[whelp tsset]。另外,如果想获得关于Panel Data的所有帮助,可采用命令[whelp xt]。 所谓平行面板数据是指所有截面单位的观察期间都相同,如我们在分析中国各省份的经济增长时,共有29个截面,每个截面都取1979-1998共20年的数据,共有580个观察值,这就是一个典型的平行面板数据。非平行面板数据就是不同的截面有不同的观察期间。
stata软件中关于面板数据的介绍
xtdes xtsum xttab
对Panel Data截面个数、时间跨度的整体描述 分组内、组间和样本整体计算各个变量的基本统计量 采用列表的方式显示某个变量的分布,较少使用
xtdes命令用于初步了解数据的大体分布状况,我们可以知道数据中含有多少个截面,最大和最小的时间跨度是多少。在某些要求使用平行面板数据的情况下3,我们可以采用该命令来诊断处理后的数据是否为平行数据4。
xtsum命令事实上是我们经常使用的命令summary的扩展,各个统计量都分别在样本总体、组内和组建三个层次上进行计算。基本的命令格式为: xtsum [varlist] [if exp] [, i(varname) ]
其中,[]中的内容都为可选项,在不设定选项的情况下,STATA默认对所有变量进行统计性描述。另外,如果我们前面已经采用tsset命令声明了截面变量和时间变量,[, i(varname) ]可以完全省略。
需要指出的是,由于我们可以把面板数据简单地视为混合数据(pooled data),所以以往针对截面数据设定的命令,如list、sum、des、tabstat、histogram、kdensity等命令也都可以用于Panel data的样本描述。
8.8.2 模型的估计
STATA8.0主要提供了如下模型的估计方法,对于门槛面板数据模型(Panel Threshold)和向量自回归面板数据模型(Panel VAR)等近期发展出来的模型,STATA8.0中还没有现成的估计程序,在估计过程中还需要我们自己编写程序。
xtreg xtregar xtgls xtpcse xtrchh xtivreg xtabond xtabond2 xttobit xtintreg
Fixed-, between- and random-effects, and population-averaged linear models Fixed- and random-effects linear models with an AR(1) disturbance Panel-data models using GLS
OLS or Prais-Winsten models with panel-corrected standard errors Hildreth-Houck random coefficients models
Instrumental variables and two-stage least squares for panel-data models Arellano-Bond linear, dynamic panel data estimator
Arellano-Bond system dynamic panel data estimator(需要从网上下载) Random-effects tobit models
Random-effects interval data regression models
3
如,有时需要对某些变量进行差分,另外有些估计方法的构建本身就仅局限于平行面板数据,如前面提到的门槛面板数据。 4
当然,当数据为非平行数据而模型的估计要求使用平行数据,你就需要编写一些小程序进行处理。
stata软件中关于面板数据的介绍
Estimation with STATA Arlion notes series No.8
xtlogit xtprobit xtcloglog xtpoisson xtnbreg Fixed-effects, random-effects, & population-averaged logit models Random-effects and population-averaged probit models Random-effects and population-averaged cloglog models
Fixed-effects, random-effects, & population-averaged Poisson models
Fixed-effects, random-effects, & population-averaged negative binomial models 如果读者想更进一步地了解以上命令的使用细节,可以使用[whelp command]命令(command表示上表中列示的命令)看相关的帮助。一般而言,以上命令都有一些STATA使用者自己编写的扩展程序,我们可以通过STATA自带的网络搜索方式获得5。这种获得新程序的方法往往可以节约你很多编程的时间,比如上面提到的xtabond2命令就是笔者从网上下载的。当然,根据礼尚往来的原则,如果有朝一日你写出了很好的程序,也应该拿出来与大家分享。
下面我们以xtreg命令为例说明上述命令的基本使用方法。xtreg命令主要用于估计以下四种基本的线性面板数据模型:固定效应模型(Fixed-effect)、随机效应模型(Random-effect)、组间效应模型(Between-effect)和样本平均模型(Population-average)。基本命令格式如下: xtreg depvar [varlist] [if exp] , model_type [level(#) ]
其中,model_type与上述提到的四种模型有如下对应关系:
model_type
be fe re pa mle
Models
between-effects estimator fixed-effects estimator GLS random-effects estimator GEE population-averaged estimator
maximum-likelihood random-effects estimator
这里有三点需要说明:其一,model_type并非可选项,如果不填该项,则STATA默认采用GLS方法估计随机效应模型;其二,mle项事实上是估计随机效应模型的另一种方法而已;其三,我们上面给出的命令格式只是一个基本形式,对于不同模型的估计,还有一些相当灵活的控制选项,读者可以参考STATA帮助。
level(#)选项用于标明显著水平,默认值为95%,如果需要将显著水平设定为99%,那么可以将该选项设定为level(99)即可。
下面,我们通过一个具体实例来说明上述命令的使用方法。我们采用STATA8.0自带的范例数据,文件名为grunfeld.dta。里面包含了六个变量,其中company和year分别表示样5
搜索方法为,点击STATA主窗口中help—〉search—〉search all,然后输入你要搜索的关键词即可。在这之前,如果你的电脑无法直接登录国际网,你可能还需要设定STATA内部的代理服务器选项,具体方法为:点击STATA主窗口中preference—〉General preferences—〉Internet prefs,然后输入代理服务器和端口即可。
stata软件中关于面板数据的介绍
本公司的代码和观察的年份,相当于我们前面提到的截面变量和时间变量;invest表示公司的投资额;mvalue表示公司的市场价值;kstock表示公司的资本存量。我们的目的是看公司的投资额和资本存量如何影响公司的市场价值。
第一步,声明截面变量和时间变量。命令为: tsset company year 命令执行后屏幕上会显示:
panel variable: company, 1 to 10 time variable: year, 1935 to 1954 这告诉STATA我们的数据格式为面板数据。
第二步,进行样本的描述性统计。首先我们看看样本的大体分布情况,命令为: xtdes
我们发现,我们的样本中包含10家公司(n=10),每家公司有20年的资料(T=20,1935-1954),整体上为平行面板数据,因为各个百分位上的T_i均为20。接着,我们列示出样本中主要变量的基本统计量,命令为: xtsum invest mvalue kstock 命令执行后,屏幕上会显示:
Variable
invest
mvalue
kstock
overall between within
overall between within
overall between within
Mean
145.9583
1081.681
276.0172
301.1039200.9701232.6603
1314.471334.917340.5421
0.85.9415-369.618
Std. Dev.
216.8753198.8242106.1986
58.1270.921-459.964
2226.3648.4351853.882
Min
0.933.0845-204.362
6241.74333.8452989.536Max
1486.7
608.021024.638
Observations
N = 200
n = 10 T = 20
N = 200 n = 10 T = 20
N = 200 n = 10 T = 20
当然,你也可以采用sum命令来得到基本统计量,而且在正是写论文时,所需列示的结果并不要求像上面那么详细,此时sum命令反而更实用。命令格式为: sum invest mvalue kstock
stata软件中关于面板数据的介绍
执行后结果为: Variable
invest mvalue kstock
Obs
200 200 200
Mean145.95831081.681276.0172
Std. Dev.216.87531314.47301.1039
Min0.9358.120.8
Max
1486.7 6241.7 2226.3
我们发现,sum命令仅列示了各个变量的样本总体统计量,而xtsum命令则增加了组间和组内统计量。
第三步,面板数据模型回归分析。
这里我们以估计固定效应模型为例加以说明,命令如下: xtreg mvalue invest kstock , fe
其中,fe表明我们采用的是固定效应模型。执行上述命令后,屏幕显示结果为:
Fixed-effects (within) regression Number of obs = 200 Group variable (i): company Number of groups = 10
R-sq: within = 0.4117 Obs per group: min = 20 between = 0.8078 avg = 20.0 overall = 0.7388 max = 20
F(2,188) = 65.78 corr(u_i, Xb) = 0.6955 Prob > F = 0.0000
---------------------------------------------------------------------------------------------------------------------- mvalue | Coef. Std. Err. t P>|t| [95% Conf. Interval]
-------------------+-------------------------------------------------------------------------------------------------- invest | 2.856166 .3075147 9.29 0.000 2.249543 3.462789 kstock | -.5078673 .1403662 -3.62 0.000 -.7847625 -.2309721 _cons | 804.9802 32.43177 24.82 0.000 741.0033 868.9571
-------------------+-------------------------------------------------------------------------------------------------- sigma_u | 905.81517 sigma_e | 268.73329 rho | .91910377 (fraction of variance due to u_i)
---------------------------------------------------------------------------------------------------------------------- F test that all u_i=0: F(9, 188) = 113.76 Prob > F = 0.0000
结果的前两行列示了模型的类别(本例中为固定效应模型)、截面变量、以及估计中使用的样本数目和个体的数目。第3行到第5行列示了模型的拟合优度,分为组内、组间和样本总体三个层次。第6行和第7行分别列示了针对参数联合检验的F统计量和相应的P值,本例中分别为65.78和0.0000,表明参数整体上相当显著。第8-11行列示了解释变量的估计系数、标准差、t统计量和相应的P值以及95%置信区间,这和我们在进行截面回归是得到的结果是一样的。最后四行列示了固定效应模型中个体效应和随机干扰项的方差估计值(分别为sigma_u和sigma_e)、二者之间的关系(rho)以及针对u_i显著性的联合检验统计量(F值和p值)。关于这些估计参数的含义,我们在8.2节中已经有所阐述,这里不再赘述。
stata软件中关于面板数据的介绍
如果需要估计随机效应模型,可以采用如下命令: xtreg mvalue invest kstock , re
如果我们假设组间存在异方差,那么可以采用如下命令进行估计: xtgls mvalue invest kstock , panels(he)
对于采用其他模型估计时具体的命令格式请参考相应的STATA帮助说明,至于选项的设定及其含义,通过帮助只能了解其设定格式,如果想正确自如地使用这些选项来进行模型的设定还需要在对模型设定的理论背景有较为深入的理解。
第四步,模型的筛选和检验。这是模型设定过程中最为关键同时也是最难的一步。这里我们仅举两个简单的例子加以说明,以便起到抛砖引玉的作用,在这方面功力的提高还需要大量的实践经验和对理论的深入理解。
1) 固定效应显著性的检验
在本章的8.2节中,我们已经提到,固定效应模型的设定是建立在如下假设基础之上的,即,我们认为个体间存在显著差异,但是对于特定的个体而言,组内不存在时间序列上的差异。但是,如果个体间(组间)的差异不明显,那么采用OLS对混合数据(Pooled OLS)进行估计即可。检验的基本思路为,在个体效应不显著的原假设下,应当有如下关系成立:
H0: α1=α2= =αn
我们可以采用F统计量来检验上述假设是否成立,
(Ru2 Rr2)/(n 1)
F=~F(n 1,nT n K) 2
(1 Ru)/(nT n K)
其中,u表示不受约束的模型,即我们的固定效应模型;r表示受约束的模型,即混合数据模型,仅有一个公共的常数项。检验所用的命令请参考附录A中do文档的A4部分,计算结果如下:
The F test for all u_i=0 is : 113.76 The P-value is: 0.0000
因此,我们可以拒绝固定效应不显著的原假设,从而认为相对于Pooled模型而言,固定效应模型更好一些。同时,我们注意到,其实在第三步进行固定效应模型回归的结果中最后一行给出的结果就是我们这里所做的检验。这里之所以多费笔墨,就是想说明固定效应模型和混合数据模型之间的关系。
stata软件中关于面板数据的介绍
2) 固定效应还是随机效应
在本章的8.2节,我们从不同角度比较了固定效应模型和随机效应模型的差别,但是在实际分析中应该使用哪个模型呢?某些学者指出,试图区分固定效应和随机效应本身就是错误的,二者似乎不具可比性。Mundlak(1978)指出,一般情况下,我们都应当把个体效应视为随机的。如果从单纯的实际操作角度来考虑,固定效应模型往往会耗费很大的自由度,尤其是对于截面数目很大的面板数据,随机效应模型似乎更合适。但另一方面,固定效应模型有一个独特的优势,我们无须做个体效应与其它解释变数不相关的假设,而在随机效应模型中,这个假设是必须的,在模型的设定中如果遗漏了重要的变量,就会导致参数估计的非一致性。
因此,我们可以通过检验固定效应u_i与其它解释变数是否相关作为进行固定效应和随机效应模型筛选的依据。Hausman检验就是这样一个检验统计量。其基本思想是,在u_i和其他解释变数不相关的原假设下,用OLS估计的固定效应模型和用GLS估计的随机效应模型的参数估计都是一致的,只是前者不具有效性。反之,OLS是一致的,但GLS则不是。因此,在原假设下,二者的参数估计应该不会有系统的差异,我们可以基于二者参数估计的差异构造统计检验量6。如果拒绝了原假设,我们就认为选择固定效应模型是比较合适的。
进行Hausman检验的步骤如下:
Step1:估计固定效应模型,存储估计结果; Step2:估计随机效应模型,存储估计结果; Step3:进行Hausman检验;
仍以上面的数据为例,我们进行Hausman检验,检验所用的命令请参考附录A中的do文档的A5部分,检验结果如下:
---- Coefficients ----
| (b) (B) (b-B) sqrt(diag(V_b-V_B)) | fe re Difference S.E.
-------------------+----------------------------------------------------------------------------------------------------- invest | 2.856166 3.113429 -.2572636 . kstock | -.5078673 -.578422 .0705548 .
-------------------------------------------------------------------------------------------------------------------------- b = consistent under Ho and Ha; obtained from xtreg B = inconsistent under Ha, efficient under Ho; obtained from xtreg Test: Ho: difference in coefficients not systematic chi2(2) = (b-B)'[(V_b-V_B)^(-1)](b-B)
6
参见Greene(4th),chp14,pp576。
stata软件中关于面板数据的介绍
= 2366.62 Prob>chi2 = 0.0000
检验结果表明,我们拒绝了原假设,从而认为固定效应模型更为合适。
Breusch和Pagan(1980)则基于OLS估计的参差构造LM统计量,针对如下假设来检验随机效应7,
H0: σu2=0 H1: σu2≠0
如果拒绝原假设则表明存在随机效应。但是该统计量并没有考虑u_i与其它解释变数的相关性,因此也只能作为模型确认过程中的一个参考。在STATA中,我们可以在完成随机效应模型的估计后进行此项检验。命令如下: xtreg mvalue invest kstock , re xttest0
命令执行后,结果为:
Breusch and Pagan Lagrangian multiplier test for random effects: mvalue[company,t] = Xb + u[company] + e[company,t] Estimated results:
| Var sd = sqrt(Var) -------------+--------------------------------------------- mvalue | 1727831 1314.47 e | 72217.58 268.7333 u | 298685.7 546.5214 Test: Var(u) = 0
chi2(1) = 772.32 Prob > chi2 = 0.0000
显然,检验结果认为存在随机效应。表面上看起来,采用B-P检验得到的结论似乎和Hausman检验的结果相矛盾,前者支持随机效应模型,后者拒绝了随机效应模型。但是,我们应当注意到,这两个检验的出发点是迥然不同的,因此并不具可比性。我们最终只能认为,在本例中的确存在随机效应,但我们采用的模型中有可能遗漏了重要的变量,以至于个体效应和模型中加入的两个解释变量间的相关系数不为零,因此采用GLS进行模型的估计得到的参数将是不一致的。处理的方法,就我个人认为,一种选择是采用固定效应模型;另一种是采用FGLS进行估计,即采用前面提到的xtgls命令。
事实上,对选择固定效应还是随机效应模型这个问题,我本人也多有困惑。因为在多7
参见Greene(4th),chp14,pp572。
stata软件中关于面板数据的介绍
数情况下,Hausman检验的结果都会拒绝原假设,使我对随机效应模型总是敬而远之。但是在期刊论文中,我们又经常看到作者把固定效应模型和随机效应模型得到的估计结果同时给出,然后用相当的笔墨说明两个模型结果的差异。我认为这种做法也颇值得商榷,因为两种模型的对抽样的假设有本质的区别,估计出的结果根本不具可比性。
stata软件中关于面板数据的介绍
附录A 本章中实例的STATA代码 chp8_panel.do
// chp8_panel data
* -to reader-*: 具体使用时,你可能需要更改数据存储的路径 use "D:\stata8\ado\Examples\XTFiles\grunfeld.dta", clear *--A1--*
tsset company year /*declare Panel-variable and Time-variable*/
gen Lag_invest = L.invest
order company year invest Lag_invest /*从新排列命令窗口中变量的显示顺序*/ *--A2--*
xtdes /* To describe the pattern of Panel Data */ xtsum /* To calculate the describative statistics*/ //xttab invest *--A3--*
xtreg mvalue invest kstock,fe /*to estimate fixed-effect model*/ xtreg mvalue invest kstock,re /*to estimate random-effect model*/
xtgls mvalue invest kstock,panels(he) /*to estimate the model with Heteroskedastic variance with GLS*/ *--A4--*
*-Test fixed effect-*
// step1 : estimate Pooled model and store R2 reg mvalue invest kstock
ereturn list /*to reader: please see the results after this command*/ local R2_r = e(r2) local K = e(df_m)
// step2 : estimate Fixed-effect model and store R2 xtreg mvalue invest kstock , fe local R2_u = 1- e(rss)/e(tss) local nT = e(N) local n = e(N_g)
// step3 : calculate the F statistics and P-value local F1 = (`R2_u' - `R2_r')/(`n' - 1) local F2 = (1 - `R2_u')/(`nT' - `n' - `K') local F = `F1'/`F2'
local p = 1- F(`n' - 1,`nT' - `n' - `K',`F')
stata软件中关于面板数据的介绍
#delimit ;
dis in ye "The F test for all u_i=0 is : " %8.2f `F' _n in ye "The P-value is: " %6.4f `p' ; #delimit cr *--A5--* // Hausman 检验
//step1 estimate fixed-effect model and store the results xtreg mvalue invest kstock , fe est store fe
//step2 estimate random-effect model and store the results xtreg mvalue invest kstock , re est store re hausman fe *--A6--*
// Testing for random-effect using B-P test xtreg mvalue invest kstock , re xttest0