Quantcast
Channel: stata培训 –数据分析
Viewing all 94 articles
Browse latest View live

stata做GMM估计的具体步骤_stata gmm操作步骤

$
0
0

stata做GMM估计的具体步骤

关键词:stata gmm操作步骤系统gmm stata 命令

关于stata做GMM估计的具体步骤,包括之前做什么检验,怎么做DIF-GMM,SYS-GMM和加入工具变量,我的模型AY=f(LAND, ALABOR, FRET,MACH, ROADS, ELEC ) ,取对数后LAY, LL ,LA ,LF , LM ,LR ,LE.,在附件里提供了部分数据,如果能够直接处理这些数据并把操作步骤记录下来的就更好。(希望有尽可能详细的命令)
1.怎么检验是否有内生性?
2.具体命令是怎样的?


dif gmm命令: xtabond LAY LL  LA  LF LM LR LE lags(1) robust
sys gmm命令:xtabond2 LAY l.LAY LL  LA  LF LM LR LE  ,gmm( ) iv( ) robust
gmm的括号里写的是内生性的工具变量  iv的括号里写的是严格外生性的工具变量,并且也可再命令后加twostep 来做两部估计的结果。


Stata的操作步骤:                        英文部分都是命令,直接复制粘贴就可以
#1、建立自回归模型 #打开文件
use infln_wage.dta #查看数据的内容 describe
#查看汇总数据信息 Summarize
#设定为时间序列数据文件 g tm=_n tsset tm
#画出时间序列图形 twoway (tsline inf wgwth)
#inf对其三阶滞后做自回归 reg inf l1.inf l2.inf l3.inf
#自回归分布滞后模型      回归都用reg
reg inf wgwth l1.wgwth l2.wgwth l3.wgwth l1.inf l2.inf
因为是要稳定的数据,用检验的方法检验是不是稳定的数据 #2、非稳定数据的检查和回归  用数据文件usa #打开文件 use usa.dta
#查看数据的内容 Describe
#查看汇总数据信息 Summarize
#设定为时间序列数据文件 g tm=_n Tsset tm
#画出时间序列图形

#画出一阶差分时间序列图形

twoway (tsline d.gdp)      d.做一阶差分  d2.做二阶差分   d3.做三阶差分

以此类推

#画出二阶差分时间序列图形     tsline——折线图

 twoway (tsline d2.gdp)

 #一阶差分自回归

 reg d.f l1.f l1.d.f

 #单位根检验

 dfuller f, regress lags(1)

dfuller f, noconstant lags(0)

 平稳以后才该回归就做回归

#R语言的回归命令 #调入输入数据程序包 >Library(foreign)  #安装car的包
>install.packages(“car”) #读入数据
>u<-read.dta(“e:usa.dta”) #查看数据汇总情况 >summary(u)
#查看数据 >u
#查看前6个数据 >head(u)
#调入系统中的数据 >attach(women) #画散点图
>plot(weight,height) #weight对height回归
>h<-lm(weight~height+I(height^2),data=women) #查看回归结果 >summary(f)

转载请注明:数据分析 » stata做GMM估计的具体步骤_stata gmm操作步骤


如何将stata中的运行结果导出_stata如何输出回归结果

$
0
0

如何将stata中的运行结果导出_stata如何输出回归结果

关键词:stata如何输出结果,stata中如何输出结果stata结果输出word

如何讲stata结果输出

如果将stata的结果输出成可拷贝的文档,总不能截图吧,我实在太菜了,请大家不要见笑,帮帮我,我以前用eviews的

选中要拷贝的部分,点右键,要4个Copy选项,可视情况选择

有个命令是outreg,这个可以输出结果,直接产生word文档。

选中屏幕上的表格,右击,copy as table,

粘贴入Excel,稍作整理后贴入Word,加三条线即可。

这里有个免费视频,详细介绍了 Stata 结果输出的各种方法:

可以直接用ssc inst estout安装
然后用 esttab using test,rtf
就产生word 文档


stata如何输出回归结果

下载个外部命令:esttab
下载成功以后,输入:esttab using test.rtf
然后就有个名为test的word文档了。

输出回归结果的命令:est store m1回车
outreg2 [m1] using H:\table01.xls, nolabel replace回车


如何将STATA的估计结果输出到excel中
使用方法(祥见该命令的帮助文件):

sysuse auto, clear

regress price mpg headroom trunk if foreign==0

estimates store reg1

regress price mpg headroom trunk turn if foreign==1

estimates store reg2, title(Only foreign cars)

heckman mpg weight length, sel(foreign = length displ) nolog

estimates store heck1, title(Selection model)

* 输出结果
xml_tab reg1 reg2, replace stats(r2_a) title(“price regressions by car type”)

xml_tab reg1 reg2, tstat below sheet(“Table 2”) stats(N r2_a) save(stata_out2.xml)

相关命令: estout, outreg, outreg2, tabout, mktab, outtex, est2tex,

下载方法:findit xml_tab

如何将stata中的运行结果导出

方法/步骤
导入数据。点击“File”→“import”→“Excel spreadseet”,如图所示。

点击“Browse”,将数据第一行作为“变量名称”,点击“Import first row as variable names”,如图所示。

在“Command”中输入命令“regress y x1 x2 x3”,如图所示。

结果如图所示。

END
注意事项
数据不能是字符形式
操作过程中及变量名不能出现汉文

转载请注明:数据分析 » 如何将stata中的运行结果导出_stata如何输出回归结果

如何在STATA中做格兰杰因果关系检验_stata命令

$
0
0

如何在STATA中做格兰杰因果关系检验

关键词: stata格兰杰因果检验 格兰杰因果关系检验 格兰杰因果检验结果

格兰杰因果检验相关的stata命令可以有三种。

方法一:
reg y L.y L.x (滞后1 期)
estat ic (显示AIC 与BIC 取值,以便选择最佳滞后期)

reg y L.y L.x L2.y L2.x
estat ic (显示AIC 与BIC 取值,以便选择最佳滞后期)
……
根据信息准则确定p, q 后,检验 ;所用的命令就是test

特别说明,此处p和q的取值完全可以不同,而且应该不同,这样才能获得最有说服力的结果,这也是该方法与其他两个方法相比的最大优点,该方法缺点是命令过于繁琐。

方法二:
ssc install gcause (下载格兰杰因果检验程序gcause)

gcause y x,lags(1) (滞后1 期)
estat ic (显示AIC 与BIC 取值,以便选择最佳滞后期)

gcause y x,lags(2) (滞后2 期)
estat ic (显示AIC 与BIC 取值,以便选择最佳滞后期)

特别说明,在选定滞后期后,对于因果关系检验,该方法提供F检验和卡方检验。如果两个检验结论不一致,原则上用F检验更好些。因为卡方检验是一个大样本检验,而实证检验所能获得的样本容量通常并不大,如果采用的是大样本,则以卡方检验结果为准。不过,通常情况下,大样本下两个检验结论一致,所以不用担心。综上,F检验适用范围更广。

方法三:
var y x (向量自回归)
vargranger

注意:1、如果实际检验过程中AIC和BIC越来越小,直到不能再滞后(时间序列长度所限)。这样的话,可能数据确实存在高阶自相关。在这种情况下,可以限制p的取值,比如取最大的 或 ,  。
2、回归结果中各期系数显著性不同,有的不显著有的显著,如实汇报就可以。最好全部汇报。不显著的期数可能意味着那一期的自相关很弱。

转载请注明:数据分析 » 如何在STATA中做格兰杰因果关系检验_stata命令

stata 回归及回归分析_stata回归分析命令_stata回归结果分析

$
0
0

stata 回归及回归分析

关键词:stata回归结果分析 stata回归分析 stata做回归分析stata回归分析命令stata回归结果分析

可以使用help regress/logit/probit/tobit 来了解

命令有:
regress y x1 x2 x3 (regress后的第一个变量为被解释变量)
regress y x1 x2 x3 , robust (regression with robust standard errors)
regress y x1 x2 x3 [aweight=w] (WLS, 以变量w为权重)
xi:regress y x1 x2  i.catvar*x2 (被解释变量为y,解释变量为x1,x2,分类变量catvar生成的虚拟变量与x2的乘积。xi可以实现很复杂的带虚拟变量的回归。可使用help xi来了解)
regress y x1 x2 (x z) (工具变量回归,工具变量是x和z)
regress y x1 x2 [if exp][in range](使用满足[if exp]和[in range]的观测做回归)
回归后可堆系数做假设检验:
test amount (检验amount的系数是否显著)
test amount=1 (检验amount的系数是否=1)
对多个参数的检验:
test amount ratio (零假设为amount 和ratio的系数都不显著)
test amount=ratio
test amount+ratio=1 (检验系数之和是否=1)
predict的命令:
predict yhat
predict new, stdp (standard errors of predicted mean y)
回归残差相关:
predict var,resid
predict var, rstandard (标准化残差)
predict var, rstudent (学生化的残差)
predict var, stdr ( 回归残差的标准差)
如果画残差关于某一解释变量的图像,可用:rvfplot var
logit回归
 logit y x1 x2 x3 (y取0或1)
probit回归
probit y x1 x2 x3 (y取0或1)
tobit回归
tobit  y x1 x2 x3 (y取0和1之间)

转载请注明:数据分析 » stata 回归及回归分析_stata回归分析命令_stata回归结果分析

分析stata多元线性回归结果_stata多元线性回归

$
0
0

关键词:stata做多元线性回归stata线性回归教程 stata多元回归分析stata多元回归结果

对t p>[t]  F R^2 置信区间的值做出相应解释   因变量是新生儿体重birth weight  主题是产前护理及父母恶习对新生儿健康的影响 此外hypothesis假设应该怎么写.

分析stata多元线性回归结果

首先说觉得你这个方程回归的不好,R系数太小,显著性不好。F值应该大于该自由度下查表的值才行,所有的t值大于查表得到的值,这样从方程到参量全部显著。不过受制于原始数据,一般都不完美,回归的方程都这样鸟样,能凑合用。F值代表整个方程的显著程度,F>F(P,n-P-1),n为数据组数,P为自变量个数。F,t可以查表或者用函数求解。置信区间严格说不能包括0的,包括0表明该自变量对因变量不显著,需要剔除重新回归的。p值需要小于默认的alpha值,也就是p<0.05才表明方程显著。
可是,我很疑惑你的主题。如果只是想要得到劣习的影响程度顺序,只需要做一下灰色关联分析就行,可以很简单的得到各个影响因素的排序,分清楚主要影响和次要影响。多元线性回归数据不好的话出来的误差很大,而且不做-5%~5%敏感度浮动分析也看不出来谁的影响更大,除非你自己编程能一直自动的判定显著性并且会自动重新回归。
小弟也是工作需要,最近自学的这部分内容,不知道说的对不,互通有无吧。
另外,hypothesis假设没看懂。我是用MATLAB和EXCEL做的多元线性回归,EXCEL做的灰色关联分析。

追问:
就是原假设应该怎么写啊 不能给分析下这几个数据吗
追答:
我没用过你这个软件,用matlab回归程序很简单,可以直接从EXCEL导入然后直接进行矩阵引用。
我的意思是,这里面明显的R可以说很差,F和t你的查表对照一下才可以判定,属于比较大小,没有查表的值无法说你这个F和t是好是坏。
p值不知道为啥有3个?一般回归出来貌似就一个p吧,只要小于默认的alpha就行。置信区间这个你有2个都是包括0的,明显不好啊。
说实话,我做回归的时候没特别在意这个,因为数据不好,怎么回归都是R很小,线性相关差,我也不想去删数据点来造假拟合。
如果你只是想要得到影响程度的排序,推荐灰色关联排序分析。

转载请注明:数据分析 » 分析stata多元线性回归结果_stata多元线性回归

stata线性回归分析_stata线性回归

$
0
0

关键词:线性回归 stata线性回归教程stata回归结果分析

总体平方和 残差平方和,解释平方和 ,F检验值 F检验P值 判定系数 调整判定系数 均方根误差 变量系数 标准误差 t检验值 t检验P值 置信区间    这些值怎么看????专业老师让我们分析,大神有会的吗?先谢谢了

stata线性回归分析_stata线性回归

总体平方和:在你整个回归结果的左上角部分,SS和total所确定的数值就是,也就是9.00072(没写全,后面部分我没抄,你如果需要更高精度回上表看……)
残差平方和:在你整个回归结果的左上角部分,SS和residual所确定的数值就是,也就是0.1374
解释平方和:在你整个回归结果的左上角部分,SS和model所确定的数值就是,也就是8.8698
F检验值:在你整个回归结果的右上角部分,F(2,7)对应的值225.94——这个值越大越好,回归总体越显著
F检验P值:在你整个回归结果的右上角部分,P>F对应的值0——这个值越小越好,0说明回归总体而言非常显著
判定系数:应该就是R方吧,右上角那个R-squared 0.9847——这个值是解释平方和除以总体平方和得出的,越大则回归的拟合度越高
调整的判定系数:右上角那个adj-R-squared 0.9804——这个值是将变量数目考虑后略加变动所计算出的R方(需要这个是因为当解释变量很多时,即使拟合度没有区别,R方也会很高),同样是越大回归的拟合度越高
均方根误差:右上角那个root-MSE0.1401,它是左上角Residual-MS的开方
 
变量系数:下面方框里coef所对应的项——越大则“实际显著性”越高(就是说影响在绝对值上越大)
标准误差:下面方框里std.err所对应的项——比较小更好,因为说明估计值越集中
 t检验值:下面方框t对应的项,这项是coef/std.err得出——绝对值越大越好,因为越大,取到这个t值就更不可能,从而原假设(系数=0)被否定,则这个变量在回归中越显著,越应该留在回归里
 t检验P值:下面方框里p》t那个对应的——越小越好,是做双边检验,P小说明了t大,0是最好的
置信区间:下面方框里那个95%conf interval,两个值是coef加减std.err*97.5%t分布所对应的值,代表“真实的系数”有95%可能落在这个区间里(因为我们OLS假设这是一个抽样,是一个样本的估计值的系数,而还有一个真实规律所对应的系数)。

转载请注明:数据分析 » stata线性回归分析_stata线性回归

STATA怎么做VIF分析_ stata vif怎么看

$
0
0

STATA怎么做VIF分析

关键词:stata vif命令 stata多重共线性vif vif检验stata如何检验 stata 面板数据 vif stata vif 操作步骤

vif是以前的命令

stata9以后就是estat vif 了  用reg进行回归后直接vif即可

首先要知道为什么要做vif,方差膨胀因子是用来检验多重共线性的,而多重共线性并不是必须解决的问题,只有当你对存在多重共线性的变量的系数感兴趣时才需要处理。例如X1,X2,X3,X4四个变量中,X1和X2存在多重共线性,而你只对X3,X4的系数感兴趣,那就可以不去管它,也就是说只要X3和X4的VIF值都没超过10就可以了。至于logit模型似乎关心的并不是具体解释变量的系数,自然也不需要做VIF检验.

qui reg lnc1 ehatw3 cpi tax unemp lnpgdpc,

estat vif

estat用在reg后,但是我不懂两个vif, uncentered和estat vif差别在哪儿?结果不同。。。。
estat vif

Variable |       VIF       1/VIF
————-+———————-
ehatw3 |      1.40    0.714852
cpi |      1.29    0.773065
lnpgdpc |      1.19    0.841205
tax |      1.10    0.905225
unemp |      1.07    0.932392
————-+———————-
Mean VIF |      1.21

. vif, uncentered

Variable |       VIF       1/VIF
————-+———————-
cpi |   1380.14    0.000725
intercept |   1236.54    0.000809
ehatw3 |    425.19    0.002352
lnpgdpc |    317.73    0.003147
unemp |      6.98    0.143284
tax |      3.19    0.313037
————-+———————-
Mean VIF |    561.63

大家help vif 就了解uncentered选项的含义了啊, uncentered requests the computation of the uncentered variance inflation factors.  This option is often used to detect the collinearity of the regressors with the constant.  estat  vif, uncentered may be used after regression models fit without the constant term.

转载请注明:数据分析 » STATA怎么做VIF分析_ stata vif怎么看

stata中pvar(面板向量自回归模型)的问题_stata 面板数据回归

$
0
0

stata中pvar(面板向量自回归模型)的问题

关键词:stata 面板数据回归 stata面板回归 stata面板回归命令 stata面板回归分析 面板分位数回归 stata stata做面板数据回归

最近在做面板向量自回归模型的时候遇到了问题,快抓狂了。
我的数据集中,有ticker(SH股票代码),date(周时间,2004-2012),turnover(换手率),discount(封闭式基金折价率),AAR(异常收益率),SVI(搜索量指数)这几个字段。其中,每只股票观测数不一定相同(因为04年可能还没有上市),所以面板是unbalanced。
现在我想要对turnover(换手率),discount(封闭式基金折价率),AAR(异常收益率),SVI(搜索量指数)四个变量进行面板向量自回归。
已经下载了Love的pvar,helm的ado文件。但是运行时总是遇到问题。已经截图在附件里面。不知怎么回事。我已经把数据集和截图打包放在附件里面。如果可以的话,烦请您跑一下,看看问题所在,当然,您的劳动成果不会白费的,如果做得好的话,我还会追加分数的。谢谢了!
(天天下载数据,处理数据,跑数据的小硕你伤不起啊伤不起,5555555~~~~~~~~不过马上又是毕业论文季了,大家还是早作准备,跑数据中会遇到各种各样的问题,不要像我这样到了最后关头急得团团转)
stata中pvar(面板向量自回归模型)的问题_stata 面板数据回归

我帮您测试的结果,应当是可行的!

按理,错误讯息的提示,是告诉您,它在进行sgmm.ado档时,
它在一开始的矩阵累积推叠出了状况。【但这要去检测sgmm】
不过这里,也带出一个思考。为什么会这样呢? 我想重点在于您的资料为unbalance data。
但当我去调一些unbalance data的资料时,又发现还是可以执行的。

所以我进一步大胆地假设,您的时间date变量可能出了状况,
因为作者在pvar帮助文件中,举的例子大都为年资料,这种一年一年,显地简单
当您把您的date变量直接转成改名year,您觉得这样能立即套用吗?

建议修改您的date变量,重新运作即可。【即一天,下一天,,,下下一天 等同于 一年,下一年,,,下下一年】
rename ticker id
egen time=group(date)
rename time year
xtset id year
helm  turnover discount aar svi
pvar  turnover discount aar svi, lag(3) gmm monte 500 “decomp 30”

转载请注明:数据分析 » stata中pvar(面板向量自回归模型)的问题_stata 面板数据回归


stata 内生性检验及工具变量_stata 弱工具变量检验

$
0
0

stata 内生性检验及工具变量

关键词:stata 弱工具变量检验,stata 工具变量检验,stata变量相关性检验,stata 单变量检验,stata工具变量,stata 工具变量回归

我想问一下面板数据中如何检验内生性?也是用Hausman检验么?那出现负值究竟是说明存在内生性还是不存在,因为我发现对于这个问题好像是有分歧的。还有是不是用固定效应模型(fe)就可以解决面板中内生性问题?还是说也要用工具变量回归,具体的命令是什么呢?问题有点多,还请高手指教,谢谢!

最佳答案:

1、如何检验内生性?
可以使用Hausman检验
2、出现负值究竟是说明存在内生性还是不存在
出现负值很可能是不满足Hausman检验的基本假定
论坛中连老师好像用Monte Carlo模拟研究认为负值可以看作是拒绝原假设(不敢确定我是否记错,请再查)
3、是不是用固定效应模型(fe)就可以解决面板中内生性问题?
不是,
4、面板数据中的工具变量回归命令
re模型:xtivreg    ,re
fe模型:xtivreg    ,fe
fd模型:xtivreg    ,fd
be模型:xtivreg    ,be


那么用xtivreg估计的时候,需要自己寻找工具变量么?还是stata会自动生成?
比如我的方程是:
xtreg overreturn  DC DE DNA DI DD LC L DNF JL LCDC LDC JLDC,fe
然后我怀疑JL变量存在内生性,那么我下面写IV估计的时候,是要把这个变量换成我找的工具变量,还是直接不写这一项,变成:
xtivreg overreturn  DC DE DNA DI DD LC L DNF LCDC LDC JLDC,fe
与JL变量有关的交叉项 JLDC用不用去掉呢?


若JLDC是JL与DC的交叉项,JL的工具变量为IVJL,则命令如下:
gen IVJLDC=IVJL*DC
xtivreg overreturn  DC DE DNA DI DD LC L DNF LCDC LDC (JL JLDC=IVJL IVJLDC),fe


那就是说具体选用什么工具变量还是要自己选的,不能直接生成的是么?
我还见到说可以用GMM方法消除内生性,而且不用自己想用什么工具变量,是这样么?请再指教一下


工具变量都是要根据实际问题来选择的
工具变量必须与内生变量相关而与误差项不相关!


你好,我刚刚开始学stata做论文,看你是高手呀,我想问下你问题,怎么用面板数据做内生性检验啊,什么命令呢?还有就是我回归的系数有两项的符号和我想的不一样是应该换变量吗?能否帮助我一下呢?


1. thausman检验
xtreg y x,fe
est store fe
xtreg y x,re
est store re
hausman fe re

2.样本量较小时系数估计结果受工具变量的影响,此时应首先考虑工具变量选择问题
大样本下时应考虑你的模型设定问题


弱弱地问一句,上面的这个豪斯曼检验不是识别固定效应和随机效应的么?可以用来判断内生性?


实质是一样的,例如:当一模型为固定效应,若采用了随机效应估计,此时随机效应模型中的复合误差项因个体效应与解释变量相关而使得复合误差与解释变量相关,此时就是模型存在内生性。


您好,我是stata新手,想用stata做内生性检验,看到您的命令,我想问问您怎么看检验结果?这个豪斯曼检验我看是可以检验固定效应和随机效应模型的,那么在检验内生性时使用的豪斯曼检验和前者有什么不同么?Eviews里的豪斯曼检验可以用么?很感谢您能解答!


1. 我想问问您怎么看检验结果?
p<a时拒绝原假设,即fe估计优于re估计,iv估计(或gmm估计)优于ols估计,否则是re估计或ols估计较优。
2. 在检验内生性时使用的豪斯曼检验和前者有什么不同么?
实质是一样的,差别是一个是比较fe估计和re估计哪一个较优,另一个是比较iv估计与ols估计哪个较好。
3. Eviews里的豪斯曼检验可以用么?


请问1.在选择JL和JLDC作为内生变量时,stata是怎么进行处理的?是自动选择一个滞后期还是怎么?2.如果再加入一些其他可能遗漏的外部指标,怎么处理?3.如果选择多个内生变量是否需要做一个F检验


在面板数据模型中复合误差V=U+E,其中U为不可观测的个体效应U,E为特异性误差。
1、当解释变量与U相关,与E不相关时,对于复合误差V来说,解释变量为内生变量,理论上可采用工具变量法进行处理,然而在实际应用中很难找到合适的工具变量与U不相关,因此此时采用固定效应估计来得更方便。
2、当解释变量与U相关,也与E相关时,不管是对于复合误差V、U还是E来说,解释变量都是内生变量,理论上可采用工具变量法进行处理,但在实际应用中要找到同时与U和E不相关的工具变量就更困难了,因此可采用固定效应的工具变量法(需找到与E不相关的工具变量)。
3、当解释变量与U不相关,与E相关时,对于复合误差V来说,解释变量同样是内生变量,此时须采用随机效应工具变量法进行处理(需找到与E不相关的工具变量)。
4、当解释变量与U不相关,同时也与E不相关时,此时可直接采用混合最小二乘法即可。

对于你的问题:用固定效应法估计会因完全共线性而删除一个变量,那又如何可以进行huasman检验呢?huasman检验(官方程序)要求固定效应和随机效应的变量是相同的。要不就是你用自己的程序对其中个别变量作huasman检验。请见上面,自已选择合适方法!

转载请注明:数据分析 » stata 内生性检验及工具变量_stata 弱工具变量检验

stata做分年、分行业的回归_stata 分年份回归

$
0
0

如何用stata做分年、分行业的回归?

关键词:stata 分年份回归,stata 控制行业 年份,stata 面板数据回归,tata 提取年份,stata如何输入年份

比如截面的jones模型,要求分行业分年份进行回归,如果每年每行业做一次回归,10年的数据10多个行业,需要做100多次回归。做很多个模型就需要做几千次的回归。
有没有什么办法能够让stata快速进行分行业和分年份的回归,,生成残差,,并将残差保存在excel里?

精彩解答:

*仅显示各回归的结果
bys year industry: reg y x*

*生成各回归的预测值yp与残差e:
reg y (industry#year)##c.x*
predict yp
predict e,r

*生成各回归的系数及其标准差、t值、p值,拟合优度r2:
statsby _b _se r2=e(r2) n=e(df_r),clear by(industry year): reg y x*
foreach v of var _b*{
loc
s=substr(“`v‘”,4,.)
g
_t_`s’=`v’/_se_`s’
g _p_`s’=ttail(_eq2_n, abs(_t_`s’))*2
}


由于初学stata,很多东西都不懂,我想请教一下在生成各回归的预测值yp与残差e时,下面命令中自变量前面的c.是什么意思呀?是只用在第一个自变量前面加c.,还是需要在所有自变量前面加c.?谢谢您的解答。
reg y (industry#year)##c.x*


对您写的这组命令,自己也看了相关命令,还是有些不解
foreach v of var _b* ,这里为什么用varlist,而不是numlist?
g _t_`s’=`v’/_se_`s’
这里红色标注的前面2个下划线是否是您自己定义的变量,而不是必须这样写?
最后一个下划线是否可以删除?其实就是从_se的第s个吧?


输入命令“reg y(industry#year) x1 x2 x3 x4”时出现2个问题:
1、提示“industry:  may not use factor variable operators on string variables
r(109);”
2、提示“end of do-file
r(109);”。但是输入
“predict yp
predict e,r”后程序又能运行。
是怎么回事呢?


命令“reg y(industry#year) x1 x2 x3 x4”和“reg y(industry#year)##c.x1 x2 x3 x4”的结果是一样的

转载请注明:数据分析 » stata做分年、分行业的回归_stata 分年份回归

控制变量行业年份回归时在STATA里怎么操作_stata 分年份回归

$
0
0

控制变量行业年份回归时在STATA里怎么操作

关键词:stata 分年份回归stata 控制行业 年份stata 控制变量 回归stata 年份虚拟变量stata 滞后变量回归stata 工具变量回归

我希望做一个多元回归,但需要控制年份和行业。
(1)年份有7年2006-2012,听说STATA可以自动设置虚拟变量,请问命令是怎样的?(2)行业共有12个,已经设好虚拟变量,如下图
控制变量行业年份回归时在STATA里怎么操作_stata 分年份回归
请问我在回归时怎么控制行业,命令是怎样子?STATA新手,在论坛上看了挺多方法但还是没明白,请尽量讲详细一点!


stata控制变量分年份回归操作

直接在回归命令里用 i.year 就会生成以year为基础的虚拟变量
比如reg y x i.year,就是控制年份后y对x的回归,数据里只需要有year这个变量就行,不需要每年都生成变量然后再放入回归命令中。


代码:  xi:reg y x i.year i.industry

year表示年份变量,industry为行业变量
这些不用自己事先创建,只需要有industry代码,直接i.industry就可以生成。

追问:请问行业代码要怎么样的?我的数据是国泰安下的,每个公司的行业都是用字母表示,如000002公司用K表示其行业,但这样STATA是不能识别呀,需要给他赋值。我问了老师,说需要自己弄成虚拟变量,如第一个帖子的图。现在行业虚拟变量已经表示出了,我在回归时要怎么控制。
追答:不用自己创建,数据库下载的,比如行业变量名为industry,其包含了
a,f,c,d,e类似的字符,直接用i.industry就可以。
追问:
回归的时候写上i.Industry之后出现这个问题:
Industry:  string variables may not be used as factor variables
r(109);
这时该怎么办
答:把行业变成数字虚拟变量 1,2,3,4.。。  行业变量是字符,需要转成数值型

转载请注明:数据分析 » 控制变量行业年份回归时在STATA里怎么操作_stata 分年份回归

如何利用STATA生成变量滞后期的数据_stata生成滞后变量

$
0
0

如何利用STATA生成变量滞后期的数据

 关键词:stata生成滞后变量,stata 生成滞后项,stata 变量滞后一期,stata 滞后变量

做个计量经济学的大作业,但是在STATA中如何生成滞后期变量有一点点困难,希望得到高手的指点,

解答:

假如变量是x   要生成其滞后一期
命令为:gen m=l.x就可以了
如果要滞后多期的话就在l的后面加上对应的数字


出现了Time Variable Not Set 这是什么情况? 是不是缺少了什么步骤呢?


你要先设定时间变量  用 tsset   time  X(截面变量)


我按照你给的方法做的结果是missing values generated,这个是什么原因的啊


我换了命令了:sort id year
by id:gen newvar=var[ _n-1]


X是什么意思啊?求指点!


如果你的数据是面板数据 用tsset或者xtset 加个体变量 加时间变量,如果只是时间序列xtset 加时间变量即可。

转载请注明:数据分析 » 如何利用STATA生成变量滞后期的数据_stata生成滞后变量

stata面板数据单位根检验的做法

$
0
0

stata面板数据单位根检验的做法

关键词:stata面板单位根检验,stata面板协整检验,stata 面板平稳性检验

正打算做一些面板数据的单位根检验问题,但很难查到详细的stata如何进行面板数据单位检验的命令和操作方法。

我在STATA8.0和9.0版本中都看到了“time series ”项的检验(tests)中发现dfuller,dfgls和pperron 三种检验命令菜单中都在“time setting”中有panel id varable的选项,因此就相应用面板数据并加以设置,但三各命令试下来结果都是”sample may not include multiple panels”的错误提示,这难道说明这一选项不能使用呢?还是使用时需要升级软件,还是要有什么条件?还是我选择的命令项有误呢?真是非常着急想搞明白啊。

有那位高手能指导一下stata软件如何处理面板数据单位根检验、协整以及因果检验方法。

能否给些例子?盼望好心的高手指点一二,先表示万分万分感谢了。


我在stata 用了高人所說的
xtwest loghex loggdp, westerlund constant trend lags(1) leads(1) lrwindow(3) bootstrap(100)
為何出現以下錯誤? 煩請指教 謝謝
Bootstrapping critical values under H0l.0.d:  operator invalid
r(198);

转载请注明:数据分析 » stata面板数据单位根检验的做法

面板数据回归需要检验多重共线性吗?

$
0
0

面板数据回归需要检验多重共线性吗

关键词:面板数据回归模型检验,面板数据多重共线性,面板数据共线性,回归分析 多重共线性

看到很多文献在做面板数据回归分析时没有提到多重共线性的检验,有些书上也写到面板数据可以减轻多重共线性,但不知做面板数据分析时到底需要检验多重共线性不,有人知道么?

我个人的感觉,既然面板数据是截面数据和时间序列数据的组合,那么就不能避免截面数据可能出现共线性的问题。文章提不提是一回事,但是作不做检验又是一回事。所以不要只看文章的内容,很多处理都不会直接体现在文章中。如果你跟作者进行交流可能会获得这方面的信息。事实上,很多国外的很多实证文献都很少写这些处理,因为文章的重点不在这。惜墨呀。。。。。。。。

一般来说,如果模型得出的系数和我们预想不太一样的时候,我们就应该讲共线性作为一个考虑的指标了。
不过,我们也不能简单的根据共线性的检验就踢出某一变量,我觉得这是很不明智的,更多的还要其他方面的因素,因为毕竟对于不是太小的样本,面板数据是可以自动处理共线性问题的。
面板数据共线性的检验我一般采用collin,需要下载,得出的结果是方差膨胀因子,可以考虑考虑…


赞同,面板数据不太需要多重共线性检验,因为即使检验也是将面板当做polled来检验大。


理论上的样本量与30的数量关系,实际上操作中样本量与100的数量关系。


能请教您一下伍德里奇是导论那本书提到吗,具体是在哪个位置,本人找了很久没找到,谢谢您!

伍德里奇的导论里也没明说面板数据就不要做共线性检验,他觉得经济中变量之间存在相关关系很正常。在横截面数据部分,MLR3假定时他就说只要不是完全共线就行,P80。个人觉得,检验多重共线性的原因是怕回归系数的不一致或者有偏,但如果在回归全部符合MLR或TS假设,那么系数本身就是无偏或一致的,并不需要多重共线性假设,我觉得伍德里奇应该也是这个想法吧。

转载请注明:数据分析 » 面板数据回归需要检验多重共线性吗?

stata如何删除重复值_stata删除重复值

$
0
0

如何在stata中删除重复值

关键词:stata中删除重复值,stata 删除重复数据

请问 (1) 在stata中 有某两个或多个样本所有变量或部分变量相同,想删除重复的样本 仅保留一个如何操作。

(2)想有条件地删除样本,比如 if year==2007 ,命令是怎样的呢?

我的问题的两个例子就是:
(1) id      year      age        height
1      2007       5             1.2
1      2007        5            1.4
2      2008        5            1.2
比如在这个数据中,前两个样本id  year  age相同,我想要删除掉其中一个,仅保留一个,然后还想附加一个条件,就是删掉height较小(1.2)的那个。

(2)还是上面的数据,然后我想要删掉 year==2007的全部样本。

请问这两个命令如何操作,谢谢了。


最佳解答:

*设数据中无缺失值
bys id year age (height): g n=_n
bys id year age (height): g N=_N
keep if n==N
drop n N


如果想要删除height较大的数据 需要怎么做呢

*先gsort排序,再duplicates去除第二个相同样本

gsort year -height

duplicates drop id-age, force

转载请注明:数据分析 » stata如何删除重复值_stata删除重复值


面板数据模型和stata软件应用 面板数据模型

$
0
0

面板数据模型和stata软件应用 面板数据模型

关键词:面板数据var模型stata,面板数据模型 stata,stata gmm 面板模型

面板数据模型有以下几个优点:
第一,Panel Data 模型可以通过设置虚拟变量对个别差异(非观测效应)进行控制;
第二,Panel Data模型通过对不同横截面单元不同时间观察值的结合,增加了自由度,减少了解释变量之间的共线性,从而改进了估计结果的有效性;
第三,Panel Data模型是对同一截面单元集的重复观察, 能更好地研究经济行为变化的动态性
举例
交通死亡率与酒后驾车人数(一段时间内江苏省各市)
其他的非观测(潜在)因素:南京与苏州
汽车本身状况
道路质量
当地的饮酒文化
单位道路的车辆密度
非观测效应导致估计结果不准确,面板数据可以控制和估计非观测效应
面板数据模型形式:
其中, i=1,2,3…N,截面标示; t=1,2,… T,时间标示;xit为k×1解释变量,β为k×1系数列向量
对于特定的个体i 而言,ai表示那些不随时间改变的影响因素,而这些因素在多数情况下都是无法直接观测或难以量化的,如个人的消费习惯,地区的经济结构,法律和产权制度等,一般称其为”个体效应”(individual effects)
面板数据模型的误差项由两部分组成:
一部分是与个体观察单位有关的,它概括了所有影响被解释变量,但不随时间变化的因素,因此,面板数据模型也常常被成为非观测效应模型;
另外一部分概括了随截面随时间而变化的不可观测因素,通常被成为特异性误差或特异扰动项
GDP
X(Invest,edu)
北京
江苏省
山西省
基础设施更加完善,受教育程度较好,经济结构以服务业为主,法制更健全
面板模型选择:固定效应还是随机效应
对”个体效应”的处理主要有2种方式:1种是视其为不随时间改变的固定性因素,相应的模型称为”固定效应”模型;另1种是视其为随机因素,相应的模型称为”随机效应”模型
固定效应模型中的个体差异反映在每个个体都有1个特定的截距项上;
随机效应模型则假设所有的个体具有相同的截距项,个体的差异主要反应在随机干扰项的设定上
FE(Fixed Effects) Model
RE (Random Effects) Model
其中, 是截距中的随机变量部分,代表个体的随机影响
(Replace with dummy variables)
固定效应模型
1,例如,在研究财政支出与经济增长的关系,运用全国的时间序列数据来检验财政支出与经济增长的关系可能存在设定误差并且受统计资料的制约,仅用时间序列资料不能够满足大样本的要求
同时,由于我国不同地区的体制变革和财政政策的不断调整,造成各个地区财政支出结构随时间而不断变化
面板数据(Panel Data)从某种程度上克服了这一困难.考虑到中国各省份财政支出结构与经济增长的关系存在明显的地区差异,从时间序列的角度,考虑各省差异的动态性,是面板数据模型的优势
例如,在研究中国地区经济增长的过程中,以全国28 个省区为研究对象,可以认为这28 个省区几乎代表了整个总体
同时假设在样本区间内,各省区的
经济结构
人口素质
等不可观测的特质性因素是固定不变的,因此采用固定效应模型是比较合适的
2,而当我们研究某个县市居民的消费行为时,由于样本数相对于江苏省几千万人口是个很小的样本,此时,可以认为个体居民在个人能力,消费习惯等方面的差异是随机的,采用随机效应模型较为合适
随机效应模型:
RE认为个体的差异是随机的,其中
非观测的个体差异效应 与随机扰动项一样都[wWW.nIUBB.net]是随机变量
随机效应模型
总结:如果把非观测效应看做是各个截面或个体特有的可估计参数,并且不随时间而变化,则模型为固定效应模型;
如果把非观测效应看作随机变量,并且符合1个特定的分布,则模型为随机效应模型
3,在实证分析中,一般通过hausman检验判断:由于随机效应模型把个体效应设定为干扰项的一部分,所以就要求解释变量与个体效应不相关,而固定效应模型并不需要这个假设条件
因此,我们可以通过检验该假设条件是否满足,如果满足,那么就应该采用随机效应模型,反之,就需要采用固定效应模型
Hausman检验的基本思想是:在固定效应u_i和其他解释变数不相关的原假设下,用OLS估计的固定效应模型和用GLS估计的随机效应模型的参数估计都是一致的.反之,OLS是一致的,但GLS则不是
因此,在原假设下,二者的参数估计应该不会有系统的差异,我们可以基于二者参数估计的差异构造统计检验量.如果拒绝了原假设,我们就认为选择固定效应模型是比较合适的.
四,stata软件简单介绍
STATA软件估计与应用:
打开数据库:
use “E:\Program Files\Stata10.0绿色软件\Stata10\东部.dta”
或者重新输入数据:edit
相关系数:cor gdp invest edu sci health
简单回归:regress gdp invest culture sci
无常数:regress gdp invest culture sci,noconstant
估计结果
回归诊断:
是否存在异方差:estat hettest
怀特检验: estat imtest,white
回归信息检验:estat imtest
是否遗漏重要解释变量:estat ovtest
拟合图: rvfplot
单一变量的相关图:cprplot invest
画图
菜单与命令结合
twoway (scatter gdp invest)
twoway (scatter gdp invest||lfit gdp invest)
基本建设支出与GDP的相关关系图
各省教育支出的增长趋势:1998-2006
Durbin-Watson 统计量:estat dwatson
序列相关检验:estat durbinalt
滞后阶数选择:estat durbinalt,lags(2)
条件异方差检验:estat archlm,lags(2)
可选变量的异方差检验:estat szroeter gdp invest culture sci
五,Stata对面板数据模型的估计
随机效应模型
Stata对面板数据模型的估计
首先对面板数据进行声明:
前面是截面单元,后面是时间标识:
tsset company year
tsset industry year
产生新的变量:gen newvar=human*lnrd
产生滞后变量Gen fiscal(2)=L2.fiscal
产生差分变量Gen fiscal(D)=D.fiscal
描述性统计:
xtdes :对Panel Data截面个数,时间跨度的整体描述
Xtsum:分组内,组间和样本整体计算各个变量的基本统计量

转载请注明:数据分析 » 面板数据模型和stata软件应用 面板数据模型

会用stata做动态面板数据的GMM估计吗_stata操作gmm案例

$
0
0

会用stata做动态面板数据的GMM估计吗

关键词:stata gmm估计stata gmm 面板模型动态面板gmm估计系统gmm stata 命令

广义矩估计(Generalized Method of Moments,即GMM)
一、解释变量内生性检验
首先检验解释变量内生性(解释变量内生性的Hausman 检验:使用工具变量法的前提是存在内生解释变量。Hausman 检验的原假设为:所有解释变量均为外生变量,如果拒绝,则认为存在内生解释变量,要用IV;反之,如果接受,则认为不存在内生解释变量,应该使用OLS。
reg ldi lofdi
estimates store ols
xtivreg ldi (lofdi=l.lofdi ldep lexr)
estimates store iv
hausman iv ols
(在面板数据中使用工具变量,Stata提供了如下命令来执行2SLS:xtivreg depvar [varlist1] (varlist_2=varlist_iv) (选择项可以为fe,re等,表示固定效应、随机效应等。详见help xtivreg)
如果存在内生解释变量,则应该选用工具变量,工具变量个数不少于方程中内生解释变量的个数。“恰好识别”时用2SLS。2SLS的实质是把内生解释变量分成两部分,即由工具变量所造成的外生的变动部分,以及与扰动项相关的其他部分;然后,把被解释变量对中的这个外生部分进行回归,从而满足OLS前定变量的要求而得到一致估计量。tptqtp
二、异方差与自相关检验
在球型扰动项的假定下,2SLS是最有效的。但如果扰动项存在异方差或自相关,
面板异方差检验:
xtgls enc invs exp imp esc mrl,igls panel(het)
estimates store hetero
xtgls enc invs exp imp esc mrl,igls
estimates store homo
local df = e(N_g) – 1
lrtest hetero homo, df(`df’)
面板自相关:xtserial enc invs exp imp esc mrl
则存在一种更有效的方法,即GMM。从某种意义上,GMM之于2SLS正如GLS之于OLS。好识别的情况下,GMM还原为普通的工具变量法;过度识别时传统的矩估计法行不通,只有这时才有必要使用GMM,过度识别检验(Overidentification Test或J Test):estat overid
三、工具变量效果验证
工具变量:工具变量要求与内生解释变量相关,但又不能与被解释变量的扰动项相关。由于这两个要求常常是矛盾的,故在实践上寻找合适的工具变量常常很困难,需要相当的想象力与创作性。常用滞后变量。
需要做的检验:
检验工具变量的有效性:
(1) 检验工具变量与解释变量的相关性
如果工具变量z与内生解释变量完全不相关,则无法使用工具变量法;如果与仅仅微弱地相关,。这种工具变量被称为“弱工具变量”(weak instruments)后果就象样本容量过小。检验弱工具变量的一个经验规则是,如果在第一阶段回归中,F统计量大于10,则可不必担心弱工具变量问题。Stata命令:estat first(显示第一个阶段回归中的统计量)
(2) 检验工具变量的外生性(接受原假设好)
在恰好识别的情况下,无法检验工具变量是否与扰动项相关。在过度识别(工具变量个数>内生变量个数)的情况下,则可进行过度识别检验(Overidentification Test),检验原假设所有工具变量都是外生的。如果拒绝该原假设,则认为至少某个变量不是外生的,即与扰动项相关。0H
Sargan统计量,Stata命令:estat overid
四、GMM过程
在Stata输入以下命令,就可以进行对面板数据的GMM估计。
. ssc install ivreg2 (安装程序ivreg2 )
. ssc install ranktest (安装另外一个在运行ivreg2 时需要用到的辅助程序ranktest)
. use “traffic.dta”(打开面板数据)
. xtset panelvar timevar (设置面板变量及时间变量)
. ivreg2 y x1 (x2=z1 z2),gmm2s (进行面板GMM估计,其中2s指的是2-step GMM)

转载请注明:数据分析 » 会用stata做动态面板数据的GMM估计吗_stata操作gmm案例

面板数据:面板数据-基本介绍

$
0
0

面板数据面板数据-基本介绍

面板数据(Panel Data)也叫“平行数据”,是指在时间序列上取多个截面,在这些截面上同时选取样本观测值所构成的样本数据。在面板数据模型形式的选择方法上,人们经常采用F检验决定选用混合模型还是固定效应模型,然后用Hausman检验确定应该建立随机效应模型还是固定效应模型。

面板数据_面板数据 -基本介绍

其有时间序列和截面2个维度,当这类数据按2个维度排列时,是排在1个平面上,与只有1个维度的数据排在一条线上有着明显的不同,整个表格像是1个面板,所以把panel data译作“面板数据”。但是,如果从其内在含义上讲,把panel data译为“时间序列—截面数据” 更能揭示这类数据的本质上的特点。也有译作“平行数据”或“TS-CS数据(Time Series – Cross Section)”。

面板数据_面板数据 -举例

1如

城市名:北京、上海、重庆、天津的GDP分别为10、11、9、8(单位亿元)。这就是截面数据,在1个时间点处切开,看各个城市的不同就是截面数据。

如:2000、2001、2002、2003、2004各年的北京市GDP分别为8、9、10、11、12(单位亿元)。这就是时间序列,选1个城市,看各个样本时间点的不同就是时间序列。

2如

2000、2001、2002、2003、2004各年中国所有直辖市的GDP分别为:

北京市分别为8、9、10、11、12;

上海市分别为9、10、11、12、13;

天津市分别为5、6、7、8、9;

重庆市分别为7、8、9、10、11(单位亿元)。

这就是面板数据。

面板数据是按照英文的直译,也有人将Panel data翻译成综列数据、平行数据等。由于国内没有统一的说法,因此直接使用Panel data这种英文说法应该更准确一些。说面板数据也是比较通用的,但是面板数据并不能从名称上反映出该种数据的实际意义,故很多研究者不愿使用。

面板数据_面板数据 -研究方法

面板数据分析方法是最近几十年来发展起来的新的统计方法,面板数据可以克服时间序列分析受多重共线性的困扰,能够提供更多的信息、更多的变化、更少共线性、更多的自由度和更高的估计效率,而面板数据的单位根检验和协整分析是当前最前沿的领域之一。在本文的研究中,我们首先运用面板数据的单位根检验与协整检验来考察能源消费、环境污染与经济增长之间的长期关系,然后建立计量模型来量化它们之间的内在联系。

面板数据的单位根检验的方法主要有 Levin,Lin and CHU(2002)提出的LLC检验方法。Im,Pesearn,Shin(2003)提出的IPS检验 , Maddala和Wu(1999),Choi(2001)提出的ADF和PP检验等。面板数据的协整检验的方法主要有Pedroni (1999,2004)和Kao(1999)提出的检验方法,这2种检验方法的原假设均为不存在协整关系,从面板数据中得到残差统计量进行检验。Luciano(2003)中运用Monte Carlo模拟对协整检验的几种方法进行比较,说明在T较小(大)时,Kao检验比Pedroni检验更高(低)的功效。具体面板数据单位根检验和协整检验的方法见参考文献[5-10]。

面板数据_面板数据 -实证分析

1.指标选取和数据来源

经济增长:本文使用地区生产总值 ,以1999年为基期,根据各地区生产总值指数折算成实际 ,单位:亿元。

能源消费:考虑到近年来我国能源消费总量中,煤炭和石油供需存在着明显低估,而电力消费数据相当准确。因此使用电力消费更能准确反映能源消费与经济增长之间的内在联系(林伯强,2003)。所以本文使用各地区电力消费量 作为能源消费量,单位:亿千瓦小时。

环境污染:污染物以气休、液体、固体形态存在,本文选取工业废水排放量作为环境污染的量化指标,单位:万吨。

本文采用1999-2006年全国三十个省(直辖市,自治区)的地区生产总值 、电力消费量 和工业废水排放量 的数据构建面板数据集。三十个省(直辖市,自治区)包括北京、天津、河北、辽宁、上海、江苏、浙江、福建、山东、广东、山西、内蒙古、吉林、黑龙江、安徽、江西、河南、湖北、湖南、海南、广西、重庆、四川、贵州、云南、陕西、西藏、甘肃、青海、宁夏、新疆,由于西藏数据不全故不包括在内。数据来源于《中国统计年鉴2000-2007》。为了消除变量间可能存在的异方差,本文先对地区生产总值 、地区电力消费量和工业废水排放量进行自然对数变换。

转载请注明:数据分析 » 面板数据:面板数据-基本介绍

DSGE求解和模型参数估计的一些认识

$
0
0

DSGE求解和模型参数估计的一些认识

关键词: dsge模型dsge模型中参数的确定dsge模型是什么dsge模型介绍

其实DSGE最难的地方不在于模型的optimality condition的推导,也不在于寻找Saddle-path。最难的还是在于参数估计,最大似然或者是贝叶斯估计。我下面一条一条地写出来一些认识,希望和大家交流。DSGE是宏观经济学的顶峰难度,不适合数学和经济学基础没有打好的同学,更加不适合自学。这个行业里面一直以来都是老师带学生的传统,基本没有自学成才的例子,至少我没听说过。所以要提醒大家,有导师的,要依靠导师,没有导师的要多跟别人交流学习。

1 . 动态规划是现代宏观的一部分数学基础,但是不是你们想象中那么重要。不要以为学高级宏观就是一直在弄Dynamic programming,这个技术虽然不简单,但也怎么也算不上现代宏观或者DSGE的核心技术。完全没有必要画大把的时间在这个上面,DSGE不依靠它而存在。就目前的DSGE研究来看,用dynamic programming的地方就是对Euler equation分析求解用得比较多,其他地方基本都不用。更别说Dynamic programming的数值模拟了,除了上课的时候用,真实研究里面基本不用。

2 . DSGE不是非要线性化才能搞,关键看你的目的是什么,如果你就是做模拟和impulse response,你没有必要自己动手去对数线性化,Dynare可以帮你做。但是要知道一点,我们对付“线性动力系统”的知识远远比“非线性动力系统”认识要深和宽泛。非线性动力系统对付起来很麻烦,占用大量的计算时间,并且准确性低,对初始条件非常敏感。非线性微分方程组里面一个重要话题就是混沌理论,用在气象学上面的一个著名例子就是“蝴蝶效应”。如果你学过研究生级别的微分方程课程,就应该知道非线性微分方程一般我们都要做泰勒级数一次展开,其实DSGE的线性化本质思想也是来自于那里。

3 . 和所有动力一样,一个线性系统必须要stable solution,我们才能预测和模拟。linear rational expectation模型求解之后找到一个stochastic difference equation system被叫做policy and transition function。这个系统是描述整个DSGE模型动态性的一个终极解释,所有endogenous variables都会沿着一个saddle-path(鞍部线) 移动。在微积分上面我们知道有一种saddle point,通过Hessian matrix的行列式检验之后可以发现,既不是最大值,也不是最小值,如图:
DSGE求解和模型参数估计的一些认识
这个红色的点,就是saddle point。但微积分教材没有说一个关键的问题: 这个saddle point是一个equilibrium。这是一个基本的物理学认识,如果这个曲面绝对光滑,无摩擦力,那么你放一个球在红色点的地方,它会静止在那个地方不动,因为这里是力量均衡点,重力和支撑力刚好相反方向G=F,一个垂直向上,一个垂直向下。经济学的均衡思想最开始就是从物理上面学过来,因为市场供给和需求就是两种力量,如果相等了就是均衡了。

还有,看下面这个图,钟摆。钟摆有两个equilibrium,这个图只画了一个,这个垂直向下的equilibrium叫做global equilibrium。另外一个均衡点是,钟摆垂直向上,这个时候钟摆同样会静止不动,这个equilibrium就是saddle point equilibrium。它对初始条件非常敏感,已经敏感到了初始条件必须是垂直向上(刚好就是equilibrium),才能保持均衡。
DSGE求解和模型参数估计的一些认识

我上面之所讲这么多,就是要告诉你一点,DSGE的解实际上就是一个动态saddle point,所以我们叫做saddle path。它往往存在于高纬度,所以我们一般不画图来解释。saddle path有时候对初始条件敏感,有时候不太敏感,这都要看情况,这里和李雅普诺夫的稳定性描述有点相似,但是saddle path并没有一个准确的basin of attraction的数学描述。

4 . DSGE的求解方法很多,Blachard-Kahn是行业标准,检查单位元之外的特征值数量是否与nonpredetermined variables的数量是否相等,其实这是个基本的差分方程常识,我在之前的帖子解释了很多次了。BK方法的弱点在于出现了Singularity就没法解了,所以我们有其他方法Sims’,Klein’s之类的,用泛用性很高的Schur decompostion或者QZ decomposition就解决问题了。可以说,这是DSGE里面一个特别简单的版块,除了一些技术性知识之外,没有什么对智力有挑战的地方。

5 . Dynare是作为一个行业标准而出现的,每年的Dynare年会都立足于推广DSGE和Dynare在现代宏观经济学上的使用。你可以认为Dynare是个黑盒子,但它实际上还偏不是黑盒子。因为大部分执行程序都是用Matlab编写的,如果你能看懂,那些”xxx.m”程序都是可以打开来学习的。当然你不想把DSGE做为研究方向的话, 只学习Dynare的应用就已经够难了,更别说看懂内部构造了。所以对于大多数同学来说,Dynare仍然是保持着一种黑盒子的状态,包括对我来说一样。

6 . 同时因为state-space 模型是一种泛用性极高的线性系统,里面的transition equation刚好就是DSGE模型的解(transition function),这个极其巧妙的特点是当年Sargent发现的,同时意识到了一点,只要能写成state-space 模型,就能推导出maximum likelihood的函数形式。所以我们能用Kalman filter来数值模拟出maximum likelihood。

7 . 最大似然估计很容出现identification的问题,简单来说就是不同的两套参数,在同一种structural model的情况下回产生同一种probability distribution。这样就导致似然函数的顶端是平的。下面这个图是用Dynare做的ML估计,一个简单的新凯恩斯模型。看Sigma的log-likelihood function,顶端是平的,这就一个identification问题。所以必须要用prior来加权重,所以采用Bayesian有绝对优势。
DSGE求解和模型参数估计的一些认识

8 . 关于Bayesian estimation,要说的就太多了

转载请注明:数据分析 » DSGE求解和模型参数估计的一些认识

常用到的stata命令_stata常用命令_stata命令大全

$
0
0

常用到的stata命令_stata常用命令_stata命令大全

关键词:stata常用命令stata描述性统计命令、stata命令大全、stata滞后一期命令

最重要的两个命令莫过于help和search了。即使是经常使用stata的人也很难,也没必要记住常用命令的每一个细节,更不用说那些不常用到的了。所以,在遇到困难又没有免费专家咨询时,使用stata自带的帮助文件就是最佳选择。stata的帮助文件十分详尽,面面俱到,这既是好处也是麻烦。当你看到长长的帮助文件时,是不是对迅速找到相关信息感到没有信心?

闲话不说了。help和search都是查找帮助文件的命令,它们之间的区别在于help用于查找精确的命令名,而search是模糊查找。如果你知道某个命令的名字,并且想知道它的具体使用方法,只须在stata的命令行窗口中输入help空格加上这个名字。回车后结果屏幕上就会显示出这个命令的帮助文件的全部内容。如果你想知道在stata下做某个估计或某种计算,而不知道具体该如何实现,就需要用search命令了。使用的方法和help类似,只须把准确的命令名改成某个关键词。回车后结果窗口会给出所有和这个关键词相关的帮助文件名和链接列表。在列表中寻找最相关的内容,点击后在弹出的查看窗口中会给出相关的帮助文件。耐心寻找,反复实验,通常可以较快地找到你需要的内容。

下面该正式处理数据了。我的处理数据经验是最好能用stata的do文件编辑器记下你做过的工作。因为很少有一项实证研究能够一次完成,所以,当你下次继续工作时。能够重复前面的工作是非常重要的。有时因为一些细小的不同,你会发现无法复制原先的结果了。这时如果有记录下以往工作的do文件将把你从地狱带到天堂。因为你不必一遍又一遍地试图重现做过的工作。在stata窗口上部的工具栏中有个孤立的小按钮,把鼠标放上去会出现“bring do-file editor to front”,点击它就会出现do文件编辑器。

为了使do文件能够顺利工作,一般需要编辑do文件的“头”和“尾”。这里给出我使用的“头”和“尾”。

capture clear          (清空内存中的数据)
capture log close      (关闭所有打开的日志文件)
set mem 128m        (设置用于stata使用的内存容量)
set more off          (关闭more选项。如果打开该选项,那么结果分屏输出,即一次只输出一屏结果。你按空格键后再输出下一屏,直到全部输完。如果关闭则中间不停,一次全部输出。)
set matsize 4000      (设置矩阵的最大阶数。我用的是不是太大了?)

cd D:                  (进入数据所在的盘符和文件夹。和dos的命令行很相似。)
log using (文件名).log,replace (打开日志文件,并更新。日志文件将记录下所有文件运行后给出的结果,如果你修改了文件内容,replace选项可以将其更新为最近运行的结果。)

use (文件名),clear  (打开数据文件。)

(文件内容)

log close              (关闭日志文件。)
exit,clear            (退出并清空内存中的数据。)

这个do文件的“头尾”并非我的发明,而是从沈明高老师那里学到的。版权归沈明高老师。

实证工作中往往接触的是原始数据。这些数据没有经过整理,有一些错漏和不统一的地方。比如,对某个变量的缺失观察值,有时会用点,有时会用-9,-99等来表示。回归时如果使用这些观察,往往得出非常错误的结果。还有,在不同的数据文件中,相同变量有时使用的变量名不同,会给合并数据造成麻烦。因此,拿到原始数据后,往往需要根据需要重新生成新的数据库,并且只使用这个新库处理数据。这部分工作不难,但是非常基础。因为如果在这里你不够小心,后面的事情往往会白做。

假设你清楚地知道所需的变量,现在要做的是检查数据、生成必要的数据并形成数据库供将来使用。检查数据的重要命令包括codebook,su,ta,des和list。其中,codebook提供的信息最全面,缺点是不能使用if条件限制范围,所以,有时还要用别的帮帮忙。su空格加变量名报告相应变量的非缺失的观察个数,均值,标准差,最小值和最大值。ta空格后面加一个(或两个)变量名是报告某个变量(或两个变量二维)的取值(不含缺失值)的频数,比率和按大小排列的累积比率。des后面可以加任意个变量名,只要数据中有。它报告变量的存储的类型,显示的格式和标签。标签中一般记录这个变量的定义和单位。list报告变量的观察值,可以用if或in来限制范围。所有这些命令都可以后面不加任何变量名,报告的结果是正在使用的数据库中的所有变量的相应信息。说起来苍白无力,打开stata亲自实验一下吧。

顺带说点儿题外话。除了codebook之外,上述统计类的命令都属于r族命令(又称一般命令)。执行后都可以使用return list报告储存在r()中的统计结果。最典型的r族命令当属summarize。它会把样本量、均值、标准差、方差、最小值、最大值、总和等统计信息储存起来。你在执行su之后,只需敲入return list就可以得到所有这些信息。其实,和一般命令的return命令类似,估计命令(又称e族命令)也有ereturn命令,具有报告,储存信息的功能。在更复杂的编程中,比如对回归分解,计算一些程序中无法直接计算的统计量,这些功能更是必不可少。

检查数据时,先用codebook看一下它的值域和单位。如果有-9,-99这样的取值,查一下问卷中对缺失值的记录方法。确定它们是缺失值后,改为用点记录。命令是replace (变量名)=. if (变量名)==-9。再看一下用点记录的缺失值有多少,作为选用变量的一个依据。

得到可用的数据后,我会给没有标签的变量加上注解。或者统一标签;或者统一变量的命名规则。更改变量名的命令是ren (原变量名)空格(新变量名)。定义标签的命令是label var (变量名)空格”(标签内容)”。整齐划一的变量名有助于记忆,简明的标签有助于明确变量的单位等信息。

如果你需要使用通过原始变量派生出的新变量,那么就需要了解gen,egen和replace这三个命令。gen和replace常常在一起使用。它们的基本语法是gen (或replace)空格(变量名)=(表达式)。二者的不同之处在于gen是生成新变量,replace是重新定义旧变量。

虚拟变量是我们常常需要用到的一类派生变量。如果你需要生成的虚拟变量个数不多,可以有两种方法生成。一种是简明方法:gen空格(变量名)=((限制条件))[这外面的小括弧是命令需要的,里面的小括弧不是命令需要的,只是说明“限制条件”并非命令]。如果某个观察满足限制条件,那么它的这个虚拟变量取值为1,否则为0。另一种要麻烦一点。就是

gen (变量名)=1 if (取值为一限制条件)
replace(相同的变量名)=0 if (取值为零的限制条件)

两个方法貌似一样,但有一个小小的区别。如果限制条件中使用的变量都没有任何缺失值,那么两种方法的结果一样。如果有缺失值,第一种方法会把是缺失值的观察的虚拟变量都定义为0。而第二种方法可以将虚拟变量的取值分为三种,一是等于1,二是等于0,三是等于缺失值。这样就避免了把本来信息不明的观察错误地纳入到回归中去。下次再讲如何方便地生成成百上千个虚拟变量。

大量的虚拟变量往往是根据某个已知变量的取值生成的。比如,在某个回归中希望控制每个观察所在的社区,即希望控制标记社区的虚拟变量。社区数目可能有成百上千个,如果用上次的所说的方法生成就需要重复成百上千次,这也太笨了。大量生成虚拟变量的命令如下;

ta (变量名), gen((变量名))

第一个括号里的变量名是已知的变量,在上面的例子中是社区编码。后一个括号里的变量名是新生成的虚拟变量的共同前缀,后面跟数字表示不同的虚拟变量。如果我在这里填入d,那么,上述命令就会新生成d1,d2,等等,直到所有社区都有一个虚拟变量。

在回归中控制社区变量,只需简单地放入这些变量即可。一个麻烦是虚拟变量太多,怎么简单地加入呢?一个办法是用省略符号,d*表示所有d字母开头的变量,另一法是用破折号,d1-d150表示第一个到第150个社区虚拟变量(假设共有150个社区)。

还有一种方法可以在回归中直接控制虚拟变量,而无需真的去生成这些虚拟变量。使用命令areg可以做到,它的语法是

areg (被解释变量) (解释变量), absorb(变量名)

absorb选项后面的变量名和前面讲的命令中第一个变量名相同。在上面的例子中即为社区编码。回归的结果和在reg中直接加入相应的虚拟变量相同。

生成变量的最后一招是egen。egen和gen都用于生成新变量,但egen的特点是它更强大的函数功能。gen可以支持一些函数,egen支持额外的函数。如果用gen搞不定,就得用egen想办法了。不过我比较懒,到现在为止只用用取平均、加和这些简单的函数。

有的时候数据情况复杂一些,往往生成所需变量不是非常直接,就需要多几个过程。曾经碰到原始数据中记录日期有些怪异的格式。比如,1991年10月23日被记录为19911023。我想使用它年份和月份,并生成虚拟变量。下面是我的做法:

gen yr=int(date)
gen mo=int((data-yr*10000)/100)
ta yr, gen( yd)
ta mo, gen( md)

假设你已经生成了所有需要的变量,现在最重要的就是保存好你的工作。使用的命令是save空格(文件名),replace。和前面介绍的一样,replace选项将更新你对数据库的修改,所以一定要小心使用。最好另存一个新的数据库,如果把原始库改了又变不回去,就叫天不应叫地不灵了。

前面说的都是对单个数据库的简单操作,但有时我们需要改变数据的结构,或者抽取来自不同数据库的信息,因此需要更方便的命令。这一类命令中我用过的有:改变数据的纵横结构的命令 reshape,生成退化的数据库collapse,合并数据库的命令append和merge。

纵列(longitudinal)数据通常包括同一个行为者(agent)在不同时期的观察,所以处理这类数据常常需要把数据库从宽表变成长表,或者相反。所谓宽表是以每个行为者为一个观察,不同时期的变量都记录在这个观察下,例如,行为者是厂商,时期有2000、2001年,变量是雇佣人数和所在城市,假设雇佣人数在不同时期不同,所在城市则不变。宽表记录的格式是每个厂商是一个观察,没有时期变量,雇佣人数有两个变量,分别记录2000年和2001年的人数,所在城市只有一个变量。所谓长表是行为者和时期共同定义观察,在上面的例子中,每个厂商有两个观察,有时期变量,雇佣人数和所在城市都只有一个,它们和时期变量共同定义相应时期的变量取值。

在上面的例子下,把宽表变成长表的命令格式如下:

reshape long (雇佣人数的变量名), i((标记厂商的变量名)) j((标记时期的变量名))

因为所在城市不随时期变化,所以在转换格式时不用放在reshape long后面,转换前后也不改变什么。相反地,如果把长表变成宽表则使用如下命令

reshape wide (雇佣人数的变量名), i((标记厂商的变量名)) j((标记时期的变量名))

唯一的区别是long换成了wide。

collapse的用处是计算某个数据库的一些统计量,再把它存为只含有这些统计量的数据库。用到这个命令的机会不多,我使用它是因为它可以计算中位数和从1到99的百分位数,这些统计量在常规的数据描述命令中没有。如果要计算中位数,其命令的语法如下

collapse (median) ((变量名)), by((变量名))

生成的新数据库中记录了第一个括号中的变量(可以是多个变量)的中位数。右面的by选项是根据某个变量分组计算中位数,没有这个选项则计算全部样本的中位数。

合并数据库有两种方式,一种是增加观察,另一种是增加变量。第一种用append,用在两个数据库的格式一样,但观察不一样,只需用append空格 using空格(文件名)就可以狗尾续貂了。简单明了,不会有什么错。另一种就不同了,需要格外小心。如果两个数据库中包含共同的观察,但是变量不同,希望从一个数据库中提取一些变量到另一个数据库中用merge。完整的命令如下:

use (文件名) [打开辅助数据库]
sort (变量名) [根据变量排序,这个变量是两个数据库共有的识别信息]
save (文件名), replace [保存辅助数据库]
use (文件名) [打开主数据库]
sort (变量名) [对相同的变量排序]
merge (变量名) using (文件名), keep((变量名))
[第一个变量名即为前面sort后面的变量名,文件名是辅助数据库的名字,后面的变量名是希望提取的变量名]
ta _merge [显示_merge的取值情况。_merge等于1的观察是仅主库有的,等于2的是仅辅助库有的,等于3是两个库都有的。]
drop if _merge==2 [删除仅仅来自辅助库的观察]
drop merge [删除_merge]
save (文件名), replace [将合并后的文件保存,通常另存]

我常用到的stata命令

(续)
讲到这里似乎对于数据的生成和处理应该闭嘴了。大家可能更想听听估计、检验这些事情。但我并不想就此止住,因为实际中总是有一些简单套用命令无法轻易办到的特殊要求。此时至少有两条路可以通向罗马:一是找到更高级的命令一步到位;二是利用已知简单命令多绕几个圈子达到目的。

下面讲一个令我刻骨铭心的经历,这也是迄今我所碰到的生成新数据中最繁复的了。原始数据中包含了可以识别属于同一个家庭中所有个人的信息和家庭成员与户主关系的信息。目的是利用这些信息建立亲子关系。初步的构想是新数据库以子辈为观察,找到他们的父母,把父母的变量添加到每个观察上。我的做法如下:

use a1,clear [打开全部样本数据库]
keep if gender==2&agemos>=96&a8~=1&line<10
[保留已婚的一定年龄的女性]
replace a5=1 if a5==0
[变量a5标记和户主的关系。等于0是户主,等于1是户主的配偶。这里不加区分地将户主及其配偶放在一起。]
keep if a5==1|a5==3|a5==7
[保留是户主(=1),是户主的子女(=3),或是户主的儿媳(=7)的那些人。]

ren h hf [将所需变量加上后缀f,表示女性]
ren line lf [将所需变量加上后缀f,表示女性]
sort wave hhid
save b1,replace [排序并保存]

keep if a5f==1 [留下其中是户主或户主配偶的]
save b2,replace [保存]

use b1,clear
keep if a5f==3|a5f==7
save b3,replace [留下其中是户主女儿或儿媳的并保存]

use a3,clear [打开与户主关系是户主子女的儿童数据库]
sort wave hhid
merge wave hhid using CHNS01b2, keep(hf lf)
ta _merge
drop if _merge==2
sort hhid line wave [处理两代户,将户主配偶女性库与儿童库合并]

by hhid line wave: egen x=count(id)
drop x _merge [计算每个年份家庭匹配的情况,x只取值1,表明两代户匹配成功]
save b4,replace [保存]

use a4,clear [打开与户主关系是户主孙子女的儿童数据库]
sort wave hhid
merge wave hhid using CHNS01b3, keep(a5f a8f schf a12f hf agemosf c8f lf)
ta _merge
drop if _merge==2 [处理三代户,将户主女儿或儿媳女性库与孙子女儿童库合并]

sort hhid line wave
by hhid line wave: egen x=count(id)
gen a=agemosf-agemos
drop if a<216&x==3 [计算每个年份家庭匹配的情况,x不只取1,三代户匹配不完全成功。删除不合理的样本,标准是年龄差距和有三个可能母亲的那些家庭。]

gen xx=x[_n+1]
gen xxx=x[_n-1]
gen y=lf if x==1
replace y=lf[_n+1] if x==2&xx==1
replace y=lf[_n-1] if x==2&xxx==1
keep if x==1|(lf==y&x==2)
[对于有两个可能母亲的儿童,有相同编码的女性出现两次的情况。上面的做法是为了保证不删除这部分样本。]

drop a x xx xxx y _merge
save b5,replace [保存合并后的数据库]

[对男性数据的合并完全类似,不赘述。]

log close
exit,clear

我的方法是属于使用简单命令反复迂回地达到目的那一类的,所以非常希望有更简便的方法来替代。不过做实证时往往不是非常追求程序的漂亮,常常也就得过且过了。曾经有人向我索要过上面的处理方法,因为一直杂事缠身,就没有回复。现在公开了,希望对需要的人能有所帮助,我也懒得再去一一答复了。

stata强大的功能体现在它可以方便地回归微观数据。而回归也是微观实证中最重要的方法。下面就开始讲stata中和回归有关的常用命令。

基本回归方法有两种:线性设定下的最小二乘法(OLS)和两阶段最小二乘法(2SLS)。他们在实证分析中应用广泛,十分详细地掌握这两种方法是实证研究的基本要求。讲解的顺序是先依次介绍如何在stata中实现OLS和2SLS估计,然后再分析如何在实际问题中选择合理的方法。后一部分受Joshua Angrist教授的影响很大,因此,在后面引用他的思想时会详细注明。

假设你已经清楚地了解待估计方程的形式,那么回归命令的基本格式就十分简单明了:

reg (被解释变量) (解释变量1) (解释变量2)……

方程中的相应变量可以简单地放在reg的后面。执行上面的命令后,stata会出现两个表格,分别报告一些方差分析和回归的参数估计结果。我们最关心的是参数的大小和显著性,这在第二个表格中列出。表格的最左边一栏列出了解释变量,在它的右边是相应的系数估计值,然后依次是估计值的标准误,t比率,原假设为系数的真实值等于零时错误地拒绝该假设的概率——p值,以及该估计值的置信度为(1-5%)的置信区间。

我看到回归结果的第一眼是瞄着最关心的解释变量的符号、大小和显著性。看看解释变量影响的方向和大小是不是符合理论的预期,是不是合乎常识,以及这个估计值是不是显著。标记显著性的统计量是t统计量,在经典假设下,它服从t分布。t分布和标准正态分布形状很相似,但它的“尾巴”要比标准正态分布的“肥”一些,在样本量比较小的时候尤其明显,当样本量趋于无穷时,t分布的极限分布是标准正态分布。大家对标准正态分布的分布函数上一些关键点比较熟悉,比如,1.96是97.5%的关键点,1.64是95%的关键点,所以,我们希望知道什么时候可以安全地使用标准正态分布。下表列出了一些小自由度下二者的差异(Beyer 1987 “CRC Standard Mathematical Tables, 28th ed.”;Goulden 1956 “Methods of Statistical Analysis, 2nd ed.”)。可以看出,自由度超过一百时,二者的差别就已经相当小了。所以,当样本量的数量级是100个或以上时,可以直接认为t比率服从标准正态分布,并以此做检验。
90%    95%    97.5%    99.5%
   3.07768    6.31375    12.7062    63.6567
   1.88562    2.91999    4.30265    9.92484
   1.63774    2.35336    3.18245    5.84091
   1.53321    2.13185    2.77645    4.60409
   1.47588    2.01505    2.57058    4.03214
10    1.37218    1.81246    2.22814    3.16927
30    1.31042    1.69726    2.04227    2.75000
100    1.29007    1.66023    1.98397    2.62589

1.28156    1.64487    1.95999    2.57588

读者读到这里可能会笑话我了,stata不是已经报告了t检验的p值和置信区间了吗?为什么不直接察看这些结果呢?原因在于实证文献往往只报告参数的估计值和标准误,需要读者自己将估计值和标准误相除,计算显著性。而且当你在写实证文章时,也应该报告参数的估计值和标准误。这比报告估计值和它的p值更规范。

伴随回归命令的一个重要命令是predict。回归结束后,使用它可以得到和回归相关的一些关键统计量。语法如下:

predict (新变量名), (统计量名)

这里的统计量名是一些选项。常用的选项有:xb(回归的拟合值。这是默认选项,即不加任何选项时,predict赋予新变量前一个回归的拟合值。);residuals(残差);leverage(杠杆值)。下面具一个例子来解释predict的用法。

有时样本中的一个特别的观察值会显著地改变回归结果。这样的观察值可以笼统地分为三类:outliers,leverage和influence。Outliers是针对残差而言的,指那些回归中残差很大的观察;leverage是针对解释变量而言的,是解释变量相对其平均值偏里很大的观察;influence是针对估计结果而言的。如果去掉这个观察会明显地改变估计值,那么这个观察就是一个influence。Influence可以看作outliers和leverage共同作用的结果。异常观察可能是由于样本的特性,也可能是因为录入错误。总之,我们希望找到它们。

回归后的predict命令可以发现这些异常观察(命令来自UCLA的“Regression with Stata”第二章)。发现outliers,leverage和influence的命令如下:

predict rs, rstudent
predict l, leverage
predict csd, cooksd
predict df, dfits

这些统计量都有相应的关键值。当统计量(或其绝对值)超过关键值时就应该仔细检查相应的观察,确认是否属于录入错误。rstudent是用来发现outliers的统计量,其关键值是2,2.5和3。leverage 是用来发现leverage 的统计量,其关键值是(2k+2)/n,其中k解释变量的个数,n是样本量。Cooksd和DFITS是探测influence的统计量。它们都综合了残差和杠杆的信息,而且二者非常类似,只是单位不同,因而给出的结果也差不多。Cooksd的关键值是4/n。DFITS的关键值是2*sqrt(k/n)。

在使用最小二乘法估计时,两个通常被质疑的问题是数据是否存在多重共线性和异方差。

多重共线性是指解释变量之间的相关性。通常我们假设解释变量之间是相关的,而且允许解释变量存在相关性,并控制可以观察的因素正是OLS的优点。如果把多重共线性看作一个需要解决的问题,那么需要把它解释为相关性“较大”。这样,变量之间没有相关性不好,相关性太大也不好,优劣的分割真是颇费琢磨。而且多重共线性并没有违反任何经典假定,所以,这个问题没有很好的定义。本质上讲,在样本给定时,多重共线性问题无法解决,或者说它是一个伪问题。

先看一下为什么解释变量之间的相关性大会有问题。在OLS回归的经典假设(除正态假设外)下,某个系数的OLS估计值的总体方差与扰动项的方差成正比,与解释变量的总方差(一般地,我们视解释变量为随机变量)成反比,是该变量对其它解释变量回归的拟合优度的增函数。这个拟合优度可以理解为该变量的总变动中可以由其他解释变量解释的部分。当这个值趋近于1时,OLS估计值的总体方差趋向于无穷大。总体方差大时,样本方差也大的概率就大,t检验就会不准确。尽管多重共线性没有违背任何经典假设,但是OLS方法有时无法准确估计一些参数。这个问题可以理解为数据提供的信息不足以精确地计算出某些系数。最根本的解决方法当然是搜集更大的样本。如果样本给定,也许我们应该修改提出的问题,使我们能够根据样本数据做出更精确的判断。去掉一个解释变量,或者合并一些解释变量可以减少多重共线性。不过要注意的是去掉相关的解释变量会使估计有偏。

实际操作时使用方差膨胀系数衡量解释变量的多重共线性。我们只需在回归之后使用vif命令就可以得到方差膨胀系数。在命令行中敲入vif并回车,stata会报告一个包含所有解释变量的方差膨胀系数的表格,如果方差膨胀系数大于10,这个变量潜在地有多重共线性问题。

异方差是一个更值得关注的问题。首先简单地介绍一下异方差会带来哪些问题。第一、异方差不影响OLS估计的无偏性和一致性。第二、异方差使估计值方差的估计有偏,所以此时的t检验和置信区间无效。第三、F统计量不再服从F分布,LM统计量不再服从渐进卡方分布,相应的检验无效。第四、异方差使OLS不再是有效估计。总之,异方差影响推断是否有效,降低估计的效率,但对估计值的无偏性和一致性没有影响。

知道了异方差作用的原理,很自然地就有了对付它的办法。第一种方法是在不知道是否存在异方差时,通过调整相应的统计量纠正可能带来的偏差。OLS中实现对异方差稳健的标准误很简便。相应的命令是在原来的回归命令后面加上robust选项。如下:

reg (被解释变量) (解释变量1) (解释变量2)……,robust

White(1980)证明了这种方法得到的标准误是渐进可用(asymptotically valid)的。这种方法的优点是简单,而且需要的信息少,在各种情况下都通用。缺点是损失了一些效率。

另一种方法是通过直接或间接的方法估计异方差的形式,并获得有效估计。典型的方法是WLS(加权最小二乘法)。WLS是GLS(一般最小二乘法)的一种,也可以说在异方差情形下的GLS就是WLS。在WLS下,我们设定扰动项的条件方差是某个解释变量子集的函数。之所以被称为加权最小二乘法,是因为这个估计最小化的是残差的加权平方和,而上述函数的倒数恰为其权重。

在stata中实现WLS的方法如下:

reg (被解释变量) (解释变量1) (解释变量2)…… [aweight=变量名]

其中,aweight后面的变量就是权重,是我们设定的函数。

一种经常的设定是假设扰动项的条件方差是所有解释变量的某个线性组合的指数函数。在stata中也可以方便地实现:

首先做标准的OLS回归,并得到残差项;

reg (被解释变量) (解释变量1) (解释变量2)……
predict r, resid

生成新变量logusq,并用它对所有解释变量做回归,得到这个回归的拟合值,再对这个拟合值求指数函数;

gen logusq=ln(r^2)
reg logusq (解释变量1) (解释变量2)……
predict g, xb
gen h=exp(g)

最后以h作为权重做WLS回归;

reg (被解释变量) (解释变量1) (解释变量2)…… [aweight=h]

如果我们确切地知道扰动项的协方差矩阵的形式,那么GLS估计是最小方差线性无偏估计,是所有线性估计中最好的。显然它比OLS更有效率。虽然GLS有很多好处,但有一个致命弱点:就是一般而言我们不知道扰动项的协方差矩阵,因而无法保证结果的有效性。

到现在我们已经有了两种处理异方差的方法:一是使用对异方差稳健的标准误调整t统计量,并以此作推断;另一种是设定异方差的形式,使用可行的GLS得到有效估计。下面总结一下标准的OLS估计同上述两种方法的优劣,并结合检验异方差的方法,给出处理异方差的一般步骤。

调整变量格式:
format x1 .3f ——将x1的列宽固定为10,小数点后取三位
format x1 .3g ——将x1的列宽固定为10,有效数字取三位
format x1 .3e ——将x1的列宽固定为10,采用科学计数法
format x1 .3fc ——将x1的列宽固定为10,小数点后取三位,加入千分位分隔符
format x1 .3gc ——将x1的列宽固定为10,有效数字取三位,加入千分位分隔符
format x1 %-10.3gc ——将x1的列宽固定为10,有效数字取三位,加入千分位分隔符,加入“-”表示左对齐
合并数据:
use “C:Documents and Settingsxks桌面2006.dta”, clear
merge using “C:Documents and Settingsxks桌面1999.dta”
——将1999和2006的数据按照样本(observation)排列的自然顺序合并起来
use “C:Documents and Settingsxks桌面2006.dta”, clear
merge id using “C:Documents and Settingsxks桌面1999.dta” ,unique sort
——将1999和2006的数据按照唯一的(unique)变量id来合并,在合并时对id进行排序(sort)
建议采用第一种方法。
对样本进行随机筛选:
sample 50
在观测案例中随机选取50%的样本,其余删除
sample 50,count
在观测案例中随机选取50个样本,其余删除
查看与编辑数据:
browse x1 x2 if x3>3 (按所列变量与条件打开数据查看器)
edit x1 x2 if x3>3 (按所列变量与条件打开数据编辑器)
数据合并(merge)与扩展(append)
merge表示样本量不变,但增加了一些新变量;append表示样本总量增加了,但变量数目不变。
one-to-one merge:
数据源自stata tutorial中的exampw1和exampw2
第一步:将exampw1按v001~v003这三个编码排序,并建立临时数据库tempw1
clear
use “t:statatutexampw1.dta”
su ——summarize的简写
sort v001 v002 v003
save tempw1
第二步:对exampw2做同样的处理
clear
use “t:statatutexampw2.dta”
su
sort v001 v002 v003
save tempw2
第三步:使用tempw1数据库,将其与tempw2合并:
clear
use tempw1
merge v001 v002 v003 using tempw2
第四步:查看合并后的数据状况:
ta _merge ——tabulate _merge的简写
su
第五步:清理临时数据库,并删除_merge,以免日后合并新变量时出错
erase tempw1.dta
erase tempw2.dta
drop _merge
数据扩展append:
数据源自stata tutorial中的fac19和newfac
clear
use “t:statatutfac19.dta”
ta region
append using “t:statatutnewfac”
ta region
合并后样本量增加,但变量数不变

茎叶图:
stem x1,line(2) (做x1的茎叶图,每一个十分位的树茎都被拆分成两段来显示,前半段为0~4,后半段为5~9)
stem x1,width(2) (做x1的茎叶图,每一个十分位的树茎都被拆分成五段来显示,每个小树茎的组距为2)
stem x1,round(100) (将x1除以100后再做x1的茎叶图)
直方图
采用auto数据库
histogram mpg, discrete frequency normal xlabel(1(1)5)
(discrete表示变量不连续,frequency表示显示频数,normal加入正太分布曲线,xlabel设定x轴,1和5为极端值,(1)为单位)
histogram price, fraction norm
(fraction表示y轴显示小数,除了frequency和fraction这两个选择之外,该命令可替换为“percent”百分比,和“density”密度;未加上discrete就表示将price当作连续变量来绘图)
histogram price, percent by(foreign)
(按照变量“foreign”的分类,将不同类样本的“price”绘制出来,两个图分左右排布)
histogram mpg, discrete by(foreign, col(1))
(按照变量“foreign”的分类,将不同类样本的“mpg”绘制出来,两个图分上下排布)
histogram mpg, discrete percent by(foreign, total) norm
(按照变量“foreign”的分类,将不同类样本的“mpg”绘制出来,同时绘出样本整体的“总”直方图)
二变量图:
graph twoway lfit price weight || scatter price weight
(作出price和weight的回归线图——“lfit”,然后与price和weight的散点图相叠加)
twoway scatter price weight,mlabel(make)
(做price和weight的散点图,并在每个点上标注“make”,即厂商的取值)
twoway scatter price weight || lfit price weight,by(foreign)
(按照变量foreign的分类,分别对不同类样本的price和weight做散点图和回归线图的叠加,两图呈左右分布)
twoway scatter price weight || lfit price weight,by(foreign,col(1))
(按照变量foreign的分类,分别对不同类样本的price和weight做散点图和回归线图的叠加,两图呈上下分布)
twoway scatter price weight [fweight= displacement],msymbol(oh)
(画出price和weight的散点图,“msybol(oh)”表示每个点均为中空的圆圈,[fweight= displacement]表示每个点的大小与displacement的取值大小成比例)
twoway connected y1 time,yaxis(1) || y2 time,yaxis(2)
(画出y1和y2这两个变量的时间点线图,并将它们叠加在一个图中,左边“yaxis(1)”为y1的度量,右边“yaxis(2)”为y2的)
twoway line y1 time,yaxis(1) || y2 time,yaxis(2)
(与上图基本相同,就是没有点,只显示曲线)
graph twoway scatter var1 var4 || scatter var2 var4 || scatter var3 var4
(做三个点图的叠加)
graph twoway line var1 var4 || line var2 var4 || line var3 var4
(做三个线图的叠加)
graph twoway connected var1 var4 || connected var2 var4 || connected var3 var4
(叠加三个点线相连图)
更多变量:
graph matrix a b c y
(画出一个散点图矩阵,显示各变量之间所有可能的两两相互散点图)
graph matrix a b c d,half
(生成散点图矩阵,只显示下半部分的三角形区域)
用auto数据集:
graph matrix price mpg weight length,half by( foreign,total col(1) )
(根据foreign变量的不同类型绘制price等四个变量的散点图矩阵,要求绘出总图,并上下排列】=具)
其他图形:
graph box y,over(x) yline(.22)
(对应x的每一个取值构建y的箱型图,并在y轴的0.22处划一条水平线)
graph bar (mean) y,over(x)
对应x的每一个取值,显示y的平均数的条形图。括号中的“mean”也可换成median、sum、sd、p25、p75等
graph bar a1 a2,over(b) stack
(对应在b的每一个取值,显示a1和a2的条形图,a1和a2是叠放成一根条形柱。若不写入“stack”,则a1和a2显示为两个并排的条形柱)
graph dot (median)y,over(x)
(画点图,沿着水平刻度,在x的每一个取值水平所对应的y的中位数上打点)
qnorm x
(画出一幅分位-正态标绘图)
rchart a1 a2 a2
(画出质量控制R图,显示a1到a3的取值范围)

简单统计量的计算:
ameans x
(计算变量x的算术平均值、几何平均值和简单调和平均值,均显示样本量和置信区间)
mean var1 [pweight = var2]
(求取分组数据的平均值和标准误,var1为各组的赋值,var2为每组的频数)
summarize y x1 x2,detail
(可以获得各个变量的百分比数、最大最小值、样本量、平均数、标准差、方差、峰度、偏度)
***注意***
stata中summarize所计算出来的峰度skewness和偏度kurtosis有问题,与ECELL和SPSS有较大差异,建议不采用stata的结果。
summarize var1 [aweight = var2], detail
(求取分组数据的统计量,var1为各组的赋值,var2为每组的频数)
tabstat X1,stats(mean n q max min sd var cv)
(计算变量X1的算术平均值、样本量、四分位线、最大最小值、标准差、方差和变异系数)
概率分布的计算:
(1)贝努利概率分布测试:
webuse quick
bitest quick==0.3,detail
(假设每次得到成功案例‘1’的概率等于0.3,计算在变量quick所显示的二项分布情况下,各种累计概率和单个概率是多少)
bitesti 10,3,0.5,detail
(计算当每次成功的概率为0.5时,十次抽样中抽到三次成功案例的概率:低于或高于三次成功的累计概率和恰好三次成功概率)
(2)泊松分布概率:
display poisson(7,6)
.44971106
(计算均值为7,成功案例小于等于6个的泊松概率)
display poissonp(7,6)
.14900278
(计算均值为7,成功案例恰好等于6个的泊松概率)
display poissontail(7,6)
.69929172
(计算均值为7,成功案例大于等于6个的泊松概率)
(3)超几何分布概率:
display hypergeometricp(10,3,4,2)
.3
(计算在样本总量为10,成功案例为3的样本总体中,不重置地抽取4个样本,其中恰好有2个为成功案例的概率)
display hypergeometric(10,3,4,2)
.96666667
(计算在样本总量为10,成功案例为3的样本总体中,不重置地抽取4个样本,其中有小于或等于2个为成功案例的概率)
检验极端值的步骤:
常见命令:tabulate、stem、codebook、summarize、list、histogram、graph box、gragh matrix
step1.用codebook、summarize、histogram、graph boxs、graph matrix、stem看检验数据的总体情况:
codebook y x1 x2
summarize y x1 x2,detail
histogram x1,norm(正态直方图)
graph box x1(箱图)
graph matrix y x1 x2,half(画出各个变量的两两x-y图)
stem x1(做x1的茎叶图)
可以看出数据分布状况,尤其是最大、最小值
step2.用tabulate、list细致寻找极端值
tabulate code if x1==极端值(作出x1等于极端值时code的频数分布表,code表示地区、年份等序列变量,这样便可找出那些地区的数值出现了错误)
list code if x1==极端值(直接列出x1等于极端值时code的值,当x1的错误过多时,不建议使用该命令)
list in -20/l(l表示last one,-20表示倒数第20个样本,该命令列出了从倒数第20个到倒数第一个样本的各变量值)
step3.用replace命令替换极端值
replace x1=? if x1==极端值
去除极端值:
keep if y<1000
drop if y>1000
对数据排序:
sort x
gsort +x
(对数据按x进行升序排列)
gsort -x
(对数据按x进行降序排列)
gsort -x, generate(id) mfirst
(对数据按x进行降序排列,缺失值排最前,生成反映位次的变量id)
对变量进行排序:
order y x3 x1 x2
(将变量按照y、x3、x1、x2的顺序排列)
生成新变量:
gen logx1=log(x1)(得出x1的对数)
gen x1`=exp(logx1)(将logx1反对数化)
gen r61_100=1 if rank>=61&rank<=100(若rank在61与100之间,则新变量r61_100的取值为1,其他为缺失值)
replace r61_100 if r61_100!=1(“!=”表示不等于,若r61_100取值不为1,则将r61_100替换为0,就是将上式中的缺失值替换为0)
gen abs(x)(取x的绝对值)
gen ceil(x)(取大于或等于x的最小整数)
gen trunc(x)(取x的整数部分)
gen round(x)(对x进行四舍五入)
gen round(x,y)(以y为单位,对x进行四舍五入)
gen sqrt(x)(取x的平方根)
gen mod(x,y)(取x/y的余数)
gen reldif(x,y)(取x与y的相对差异,即|x-y|/(|y|+1))
gen logit(x)(取ln[x/(1-x)])
gen x=autocode(x,n,xmin,xmax)(将x的值域,即xmax-xmin,分为等距的n份)
gen x=cond(x1>x2,x1,x2)(若x1>x2成立,则取x1,若x1>x2不成立,则取x2)
sort x
gen gx=group(n)(将经过排序的变量x分为尽量等规模的n个组)
egen zx1=std(x1)(得出x1的标准值,就是用(x1-avgx1)/sdx1)
egen zx1=std(x1),m(0) s(1)(得出x1的标准分,标准分的平均值为0,标准差为1)
egen sdx1=sd(x1)(得出x1的标准差)
egen meanx1=mean(x1)(得出x1的平均值)
egen maxx1=max(x1)(最大值)
egen minx1=min(x1)(最小值)
egen medx1=med(x1)(中数)
egen modex1=mode(x1)(众数)
egen totalx1=total(x1)(得出x1的总数)
egen rowsd=sd(x1 x2 x3)(得出x1、x2和x3联合的标准差)
egen rowmean=mean(x1 x2 x3)(得出x1、x2和x3联合的平均值)
egen rowmax=max(x1 x2 x3)(联合最大值)
egen rowmin=min(x1 x2 x3)(联合最小值)
egen rowmed=med(x1 x2 x3)(联合中数)
egen rowmode=mode(x1 x2 x3) (联合众数)
egen rowtotal=total(x1 x2 x3)(联合总数)
egen xrank=rank(x)(在不改变变量x各个值排序的情况下,获得反映x值大小排序的xrank)
数据计算器display命令:
display x[12](显示x的第十二个观察值)
display chi2(n,x)(自由度为n的累计卡方分布)
display chi2tail(n,x)(自由度为n的反向累计卡方分布,chi2tail(n,x)=1-chi2(n,x))
display invchi2(n,p)(卡方分布的逆运算,若chi2(n,x)=p,那么invchi2(n,p)=x)
display invchi2tail(n,p)(chi2tail的逆运算)
display F(n1,n2,f)(分子、分母自由度分别为n1和n2的累计F分布)
display Ftail(n1,n2,f)(分子、分母自由度分别为n1和n2的反向累计F分布)
display invF(n1,n2,P)(F分布的逆运算,若F(n1,n2,f)=p,那么invF(n1,n2,p)=f)
display invFtail(n1,n2,p)(Ftail的逆运算)
display tden(n,t)(自由度为n的t分布)
display ttail(n,t)(自由度为n的反向累计t分布)
display invttail(n,p)(ttail的逆运算)

给数据库和变量做标记:
label data “~~~”(对现用的数据库做标记,”~~~”就是标记,可自行填写)
label variable x “~~~”(对变量x做标记)
label values x label1(赋予变量x一组标签:label1)
label define label1 1 “a1” 2 “a2″(定义标签的具体内容:当x=1时,标记为a1,当x=2时,标记为a2)
频数表:
tabulate x1,sort
tab1 x1-x7,sort(做x1到x7的频数表,并按照频数以降序显示行)
table c1,c(n x1 mean x1 sd x1)(在分类变量c1的不同水平上列出x1的样本量和平均值)
二维交互表:
auto数据库:
table rep78 foreign, c(n mpg mean mpg sd mpg median mpg) center row col
(rep78,foreign均为分类变量,rep78为行变量,foreign为列变量,center表示结果显示在单元格中间,row表示计算行变量整体的统计量,col表示计算列变量整体的统计量)
tabulate x1 x2,all
(做x1和x2的二维交互表,要求显示独立性检验chi2、似然比卡方独立性检验lrchi2、对定序变量适用的等级相关系数gamma和taub、以及对名义变量适用的V)
tabulate x1 x2,column chi2(做x1和x2的二维交互表,要求显示列百分比和行变量和列变量的独立性检验——零假设为变量之间独立无统计关系)
tab2 x1-x7,all nofreq(对x1到x7这七个变量两两地做二维交互表,不显示频数:nofreq)
三维交互表:
by x3,sort:tabulate x1 x2,nofreq col chi2(同时进行x3的每一个取值内的x1和x2的二维交互表,不显示频数、显示列百分比和独立性检验)
四维交互表:
table x1 x2 x3,c(ferq mean x1 mean x2 mean x3) by(x4)
tabstat X1 X2,by(X3) stats(mean n q max min sd var cv) col(stats)
tabstat X1 X2,by(X3) stats(mean range q sd var cv p5 p95 median),[aw=X4](以X4为权重求X1、X2的均值,标准差、方差等)

ttest X1=1
count if X1==0
count if X1>=0
gen X2=1 if X1>=0
corr x1 x2 x3(做x1、x2、x3的相关系数表)
swilk x1 x2 x3(用Shapiro-Wilk W test对x1、x2、x3进行正太性分析)
sktest x1 x2 x3(对x1、x2、x3进行正太性分析,可以求出峰度和偏度)
ttest x1=x2(对x1、x2的均值是否相等进行T检验)
ttest x1,by(x2) unequal(按x2的分组方式对x1进行T检验,假设方差不齐性)
sdtest x1=x2(方差齐性检验)
sdtest x1,by(x2)(按x2的分组方式对x1进行方差齐性检验)

聚类分析:
cluster kmeans y x1 x2 x3, k(3)
——依据y、x1、x2、x3,将样本分为n类,聚类的核为随机选取
cluster kmeans y x1 x2 x3, k(3) measure(L1) start(everykth)
—— “start”用于确定聚类的核,”everykth”表示将通过构造三组样本获得聚类核:构造方法为将样本id为1、1+3、1+3×2、 1+3×3……分为一组、将样本id为2、2+3、2+3×2、2+3×3……分为第二组,以此类推,将这三组的均值作为聚类的核;”measure”用于计算相似性和相异性的方法,”L1″表示采用欧式距离的绝对值,也直接可采用欧式距离(L2)和欧式距离的平方(L2squared)。PS:这个方法所得的结果与SPSS所得结果相同。

sort c1 c2(对c1和c2两个分类变量排序)
by c1 c2:reg y x1 x2 x3(在c1、c2的各个水平上分别进行回归)
bysort c1 c2:reg y x1 x2 x3 if c3=1(逗号前面相当于将上面两步骤合一,既排序又回归,逗号后面的“if c3=1”表示只有在c3=1的情况下才进行回归)
stepwise, pr(.2): reg y x1 x2 x3(使用Backward selection,去除P值大于0.2时变量)
stepwise, pe(.2): reg y x1 x2 x3(使用forward selection,去除P值小于0.2时变量)
stepwise, pr(.2) pe(.01):reg y x1 x2 x3(使用backward-stepwise selection,取P值在0.01和0.2之间的变量)
stepwise, pe(.2) forward: reg y x1 x2 x3(使用forward-stepwise selection)
reg y x1 x2 x3
predict Yhat,xb
predict u,resid
predict ustd,stdr(获得残差的标准误)
predict std,stdp(获得y估计值的标准误)
predict stdf,stdf(获得y预测值的标准误)
predict e,e(1,12)(获得y在1到12之间的估计值)
predict p,pr(1,12)(获得y在1到12之间的概率)
predict rstu,rstudent(获得student的t值)
predict lerg,leverage(获得杠杆值)
predict ckd,cooksd(获得cooksd)
reg y x1 x2 x3 c1 c2
adjust x1 x2 x3,se(使得变量x1、x2和x3等于其均值,求y的预测值和标准误)
adjust x1 x2 x3,stdf ci(使得变量x1、x2和x3等于其均值,求y的预测值,预测标准误和置信区间)
adjust x1 x2,by(c1) se ci(控制变量x1、x2,亦即取它们的均值,在分类变量c1的不同水平上求y预测值,标准误和置信区间)
adjust x1 x2 x3,by(c1) stdf ci(控制变量x1、x2、x3,亦即取它们的均值,在分类变量c1的不同水平上求y预测值,预测标准误和置信区间)
adjust x1 x2,by(c1 c2) se ci(控制变量x1、x2,在分类变量c1、c2的不同水平上求y的预测值,标准误和置信区间)
adjust x1 x2 x3,by(c1 c2) stdf ci(控制变量x1、x2、x3,在分类变量c1、c2的不同水平上求y的预测值,预测标准误和置信区间)
adjust x1=a x2=b x3=c,se ci(当x1=a、x2=b、x3=c时,求y的预测值、标准误和置信区间)
adjust x1=a x2=b x3=c,by(c1) se ci(当x1=a、x2=b、x3=c时,在分类变量c1的不同水平上,求y的预测值、标准误和置信区间)
adjust x1=a x2=b c1=1,by(c1) se ci(当x1=a、x2=b,并假设所有的样本均为c1=1,求在分类变量c1的不同水平上,因为变量x3的均值不同,而导致的y的不同的预测值……)
mvreg Y1 Y2 ……: X1 X2 X3……(多元回归)
mvreg y1 y2 y3: x1 x3 x3(多元回归分析,y1 y2 y3为因变量,x1 x3 x3为自变量)
以下命令只有在进行了mvreg之后才能进行
test [y1](测试对y1的回归系数联合为0)
test [y1]: x1 x2(测试对y1的回归中x1、x2的系数为0)
test x1 x2 x3(测试在所有的回归中,x1、x2、x3的系数均为0)
test [y1=y2](对y1的回归和对y2的回归系数相等)
test [y1=y2]: x1 x2 x3, mtest(对y1和y2的回归中,分别测试x1、x2、x3的系数是否相等,若没有mtest这个命令,则测试他们的联和统计)
test [y1=y2=y3](三个回归的系数是否相等,可加mtest以分别测试)
test [y1=y2=y3]: x1 x2 (测试三个回归中的x1、x2是否相等,可加mtest)
est命令的用法:
(1)储存回归结果:
reg y x1 x2 x3(不限于reg,也可储存ivreg、mvreg、reg3)
est store A
(2)重现回归结果:
est replay A
(3)对回归结果进行进一步分析
est for A:sum(对A回归结果中的各个变量运行sum命令)
异方差问题:
获得稳健性标准误
reg y x1 x2 x3 if c1==1(当分类变量c1=1时,进行y和诸x的回归)
reg y x1 x2 x3,robust(回归后显示各个自变量的异方差-稳健性标准误)
estat vif(回归之后获得VIF)
estat hettest,mtest(异方差检验)
异方差检验的套路:
(1)Breusch-pagan法:
reg y x1 x2 x3
predict u,resid
gen usq=u^2
reg usq x1 x2 x3
求F值
display R/(1-R)*n2/n1(n1表示分子除数,n2表示分母除数)
display Ftail(……)
求LM值
display R*n(n表示总样本量)
display chi2tail(……)
(2)white法:
reg y x1 x2 x3
predict u,resid
gen usq=u^2
predict y
gen ysq=y^2
reg usq y ysq
求F值
display R/(1-R)*n2/n1(n1表示分子除数,n2表示分母除数)
display Ftail(……)
求LM值
display R*n(n表示总样本量)
display chi2tail(……)
(3)必要补充
F值和LM值转换为P值的命令:
display Ftail(n1,n2,a)(利用F值求p值,n1表示分子除数,n2表示分母除数,a为F值)
display chi2tail(n3,b)(利用LM值求p值,n3表示自由度的损失量,一般等于n1,b为LM值)
异方差的纠正——WLS(weighted least square estimator)
(1)基本思路:
reg y x1 x2 x3 [aw=x1](将x1作为异方差的来源,对方程进行修正)
上式相当于:
reg y/(x1^0.5) 1/(x1^0.5) x1/(x1^0.5) x2/(x1^0.5) x3/(x1^0.5),noconstant
(2)纠正异方差的常用套路(构造h值)
reg y x1 x2 x3
predict u,resid
gen usq=u^2
gen logusq=log(usq)
reg logusq x1 x2 x3
predict g
gen h=exp(g)
reg y x1 x2 x3 [aw=1/h]
异方差hausman检验:
reg y x1 x2 x3
est store A(将上述回归结果储存到A中)
reg y x1 x2 x3 [aw=1/h]
est store B
hausman A B
当因变量为对数形式时(log(y))如何预测y
reg logy x1 x2 x3
predict k
gen m=exp(k)
reg y m,noconstant
m的系数为i
y的预测值=i×exp(k)

方差分析:
一元方差分析
anova y g1 / g1|g2 /(g*表示不同分类变量,计算g1和交互项/ g1|g2 /这两种分类的y值是否存在组内差异)
anova y d1 d2 d1*d2(d*表示虚拟变量,计算d1、d2和d1*d2的这三种分类的y值是否有组内差异)
anova y d1 d2 x1 d2*x1, continuous(x1)(x*表示连续的控制变量)
多元方差分析
webuse jaw
manova y1 y2 y3 = gender fracture gender*fracture(按性别、是否骨折及二者的交互项对y1、y2和y3进行方差分析)
manova y1 = gender fracture gender*fracture(相当于一元方差分析,以y1为因变量)
————————————
webuse nobetween
gen mycons = 1
manova test1 test2 test3 = mycons, noconstant
mat c = (1,0,-1 0,1,-1)
manovatest mycons, ytransform(c)
进行多元回归的方法:
多元回归分析:(与mvreg相同)
foreach vname in y1 y2 y3 { (确定y变量组vname)
reg `vname’ x1 x2 x3 (将y变量组中的各个变量与诸x变量进行回归分析,注意vname的标点符号)
}
上式等价于:
mvreg y1 y2 y3 = x1 x2 x3

reg3命令:
(1)简单用法:
reg3 (y1 = x1 x2 x3) (y2 = x1 x3 x4) (y3 = x1 x2 x5)
测试y1 coefs = 0
test [y1]
测试不同回归中相同变量的系数:
test [y1=y2=y3], common
test ([y1=y2]) ([y1=y3]), common constant(constant表示包含截距项)
(2)用reg3进行2SLS
reg3 (y1 = y2 x1 x2) (y2 = y1 x4),2sls
(2)用reg3进行OLS
reg3 (y1 = y2 x1 x2) (y2 = y1 x4),ols
对两个回归结果进行hausman检验:
reg3 (y1=x1 x2 x3)(y2=y1 x4),2sls
est store twosls
reg3 (y1=x1 x2 x3)(y2=y1 x4),ols
est store ols
hausman twosls ols,equations(1:1)(对两次回归中的方程1,即“y1=x1 x2 x3”进行hausman检验)
hausman twosls ols,equations(2:2)(对两次回归中的方程2,即“y2=y1 x4”进行hausman检验)
hausman twosls ols,alleqs(对所有方程一起进行检验)
检验忽略变量(模型的RESET):
reg y x1 x2 x3
estat ovtest
滞后变量的制取
对变量y滞后一期:
gen y_l1=y[_n-1]
滞后两期:
gen y_l2=y[_n-2]
以此类推。
制取样本序号:
gen id=_n
获得样本总量:
gen id=_N

时间序列回归:
回归元严格外生时AR(1)序列相关的检验
reg y x1 x2
predict u,resid
gen u_1=u[_n-1]
reg u u_1,noconstant
回归之后,u_1的序数如果不异于零,则该序列不相关
用Durbin-Watson Statistics检验序列相关:
tsset year @(对时间序列回归中代表时间的变量进行定义)@
reg y x1 x2
dwstat @(求出时间序列回归的DW值)@
durbina @(对该回归是否具有序列相关进行检验,H0为无序列相关,可根据chi2值求出P值)@
durbina,small @(small可以根据F值求出P值,以代替chi2值)@
durbina,force @(让检验能在robust、neway之后进行)@
durbina,small lag(1/10) @(lag可以求出更高阶滞后的序列相关,如本例中可求出1到10阶的序列相关)@
durbina,robust lag(1/10) @(robust可进行异方差—稳健性回归,避免未知形式的异方差)@
bgodfrey @(利用Breusch-Godfrey test求出高阶序列相关)@
bgodfrey,small lag(1/10)
数据调查:survey data
源数据:dataset文件夹中的svydata
步骤:
1、定义survey data
svyset psuid [pweight=finalwgt], strata(stratid)
——定义primary sampling unit为psuid。可能是测试的编号,1or2
——定义pweight为finalwgt
——定义stratum identifer为stratid。可能是测试中被试的编号,1to31
2、生成male
gen male= (sex==1) if !missing(sex)
——当sex不缺失且等于1时,male=sex
3、生成行变量为highbp,列变量为sizplace的表格
svy, subpop(male): tabulate highbp sizplace, col obs pearson lr null wald
——subpop规定了以male为数据调查的范围
——tabulate highbp sizplace表示绘制行变量为highbp,列变量为sizplace的表格
——col表示每一列的加总为100%,row表示每一行的加总为100%,cell表示横纵所有单元格的加总为100%
——obs表示列出每个单元格的样本量,se表示列出每个单元格的标准误,ci表示列出每个单元格的置信区间
——pearson表示求取pearson’s chi-squired,皮尔逊的卡方检定
——lr表示求取likelihood ratio
——null表示求取null-based statistics
——wald表示求取adjusted wald,llwald表示求取adjusted log-linear Wald,noadjust表示求取unadjusted Wald statistics
4、svy:mean x1 x2 x3
——对x1、x2、x3求取mean、se和ci
5、简单的tabulate twoway(不用svyset就可执行)
tab2 y x,col chi2 exact lr
——col、cell、row等均可换用,chi2指的是Pearson’s chi-squared、exact指的是fisher exact test、lr指的是likelihood-ratio chi-squared
6、svy的其他用法:
svy:reg y x
建立人工数据集:
创建一个包含从独立标准正态分布中抽取的2000个观察案例和三个随机Z1、Z2、Z3,并分别定义他们的平均值和标准差。
matrix m=(0,2,3) ——定义三个变量的平均值
matrix sd=(1,.5,2) ——定义三个变量的标准差
drawnorm z1 z2 z3,n(2000) means(m) sds(sd) ——创建样本量为2000,均值和标准差符合上面定义的数据集
补充:除了定义均值和标准差之外,还可定义相关矩阵和协方差矩阵等。
logit回归
logit y x1 x2 x3
——y必须为二分变量
glogit outcomedata populationdata x1 x2 x3
——outcomedata为目标样本总量,populationdata为观测样本总量,outcomedata/populationdata的值便是一个概率,相当于logit命令中的y
面板数据(Panel Data)
1、基本套路:
xtreg y x1 x2,re
est store re
xtreg y x1 x2,fe
est store fe
hausman re fe
——如果hausman检验的结果为显著,则采用固定效应(fe)模型,不显著,则选取随机效应(re)模型
2、随机效应的检验:
xtreg y x1 x2,re
xttest0
xttest1
——xttest1是xttest0的扩展,若这xttest0的结果为显著,则采用随机效应(re)模型
xttest1的假设是没有随机效应和/或没有序列相关,它的七个结果分别表示:
1) LM Test for random effects, assuming no serial correlation
(假设没有序列相关情况下对随机效应进行LM检验)
2) Adjusted LM test for random effects, which works even under serial
correlation
(假设有序列相关的情况下对随机LM检验)
3) One sided version of the LM test for random effects
(假设没有序列相关的情况下对随机效应进行单边检验)
4) One sided version of the adjusted LM test for random effects
(假设有序列相关的情况下对随机效应进行单边检验)
5) LM test for first-order serial correlation, assuming no random effects
(假设没有随机效应的情况下对一阶序列相关进行检验)
6) Adjusted test for first-order serial correlation, which works even under
random effects
(假设有随机效应的情况下对一阶序列相关进行检验)
7) LM Joint test for random effects and serial correlation
(随机效应和序列相关的联合检验)
3、固定效应模型,可采用广义最小二乘法(gls)进行估算,也可采用固定效应方程(fe):
xtserial y x1 x2
xtgls y x1 x2
xttest2
xttest3
——xtserial用于检验固定效应模型中的一阶序列自相关,可通用于xtgls和fe之前
——xttest2用于检验不同厂商的相似性,若显著则各厂家的截面相似,可通用于xtgls和fe之后
——xttest3用于检验固定效应模型中的异方差问题,若显著则有异方差,可通用于xtgls和fe之后

stata强大的功能体现在它可以方便地回归微观数据。而回归也是微观实证中最重要的方法。下面就开始讲stata中和回归有关的常用命令。

基本回归方法有两种:线性设定下的最小二乘法(OLS)和两阶段最小二乘法(2SLS)。他们在实证分析中应用广泛,十分详细地掌握这两种方法是实证研究的基本要求。讲解的顺序是先依次介绍如何在stata中实现OLS和2SLS估计,然后再分析如何在实际问题中选择合理的方法。后一部分受Joshua Angrist教授的影响很大,因此,在后面引用他的思想时会详细注明。

假设你已经清楚地了解待估计方程的形式,那么回归命令的基本格式就十分简单明了:

reg (被解释变量) (解释变量1) (解释变量2)……

方程中的相应变量可以简单地放在reg的后面。执行上面的命令后,stata会出现两个表格,分别报告一些方差分析和回归的参数估计结果。我们最关心的是参数的大小和显著性,这在第二个表格中列出。表格的最左边一栏列出了解释变量,在它的右边是相应的系数估计值,然后依次是估计值的标准误,t比率,原假设为系数的真实值等于零时错误地拒绝该假设的概率——p值,以及该估计值的置信度为(1-5%)的置信区间。

我看到回归结果的第一眼是瞄着最关心的解释变量的符号、大小和显著性。看看解释变量影响的方向和大小是不是符合理论的预期,是不是合乎常识,以及这个估计值是不是显著。标记显著性的统计量是t统计量,在经典假设下,它服从t分布。t分布和标准正态分布形状很相似,但它的“尾巴”要比标准正态分布的“肥”一些,在样本量比较小的时候尤其明显,当样本量趋于无穷时,t分布的极限分布是标准正态分布。大家对标准正态分布的分布函数上一些关键点比较熟悉,比如,1.96是97.5%的关键点,1.64是95%的关键点,所以,我们希望知道什么时候可以安全地使用标准正态分布。下表列出了一些小自由度下二者的差异(Beyer 1987 “CRC Standard Mathematical Tables, 28th ed.”;Goulden 1956 “Methods of Statistical Analysis, 2nd ed.”)。可以看出,自由度超过一百时,二者的差别就已经相当小了。所以,当样本量的数量级是100个或以上时,可以直接认为t比率服从标准正态分布,并以此做检验。

90% 95% 97.5% 99.5%
1 3.07768 6.31375 12.7062 63.6567
2 1.88562 2.91999 4.30265 9.92484
3 1.63774 2.35336 3.18245 5.84091
4 1.53321 2.13185 2.77645 4.60409
5 1.47588 2.01505 2.57058 4.03214
10 1.37218 1.81246 2.22814 3.16927
30 1.31042 1.69726 2.04227 2.75000
100 1.29007 1.66023 1.98397 2.62589

1.28156 1.64487 1.95999 2.57588

读者读到这里可能会笑话我了,stata不是已经报告了t检验的p值和置信区间了吗?为什么不直接察看这些结果呢?原因在于实证文献往往只报告参数的估计值和标准误,需要读者自己将估计值和标准误相除,计算显著性。而且当你在写实证文章时,也应该报告参数的估计值和标准误。这比报告估计值和它的p值更规范。

伴随回归命令的一个重要命令是predict。回归结束后,使用它可以得到和回归相关的一些关键统计量。语法如下:

predict (新变量名), (统计量名)

这里的统计量名是一些选项。常用的选项有:xb(回归的拟合值。这是默认选项,即不加任何选项时,predict赋予新变量前一个回归的拟合值。);residuals(残差);leverage(杠杆值)。下面具一个例子来解释predict的用法。

有时样本中的一个特别的观察值会显著地改变回归结果。这样的观察值可以笼统地分为三类:outliers,leverage和influence。Outliers是针对残差而言的,指那些回归中残差很大的观察;leverage是针对解释变量而言的,是解释变量相对其平均值偏里很大的观察;influence是针对估计结果而言的。如果去掉这个观察会明显地改变估计值,那么这个观察就是一个influence。Influence可以看作outliers和leverage共同作用的结果。异常观察可能是由于样本的特性,也可能是因为录入错误。总之,我们希望找到它们。

回归后的predict命令可以发现这些异常观察(命令来自UCLA的“Regression with Stata”第二章)。发现outliers,leverage和influence的命令如下:

predict rs, rstudent
predict l, leverage
predict csd, cooksd
predict df, dfits

这些统计量都有相应的关键值。当统计量(或其绝对值)超过关键值时就应该仔细检查相应的观察,确认是否属于录入错误。rstudent是用来发现outliers的统计量,其关键值是2,2.5和3。leverage 是用来发现leverage 的统计量,其关键值是(2k+2)/n,其中k解释变量的个数,n是样本量。Cooksd和DFITS是探测influence的统计量。它们都综合了残差和杠杆的信息,而且二者非常类似,只是单位不同,因而给出的结果也差不多。Cooksd的关键值是4/n。DFITS的关键值是2*sqrt(k/n)。

(续)
在使用最小二乘法估计时,两个通常被质疑的问题是数据是否存在多重共线性和异方差。

多重共线性是指解释变量之间的相关性。通常我们假设解释变量之间是相关的,而且允许解释变量存在相关性,并控制可以观察的因素正是OLS的优点。如果把多重共线性看作一个需要解决的问题,那么需要把它解释为相关性“较大”。这样,变量之间没有相关性不好,相关性太大也不好,优劣的分割真是颇费琢磨。而且多重共线性并没有违反任何经典假定,所以,这个问题没有很好的定义。本质上讲,在样本给定时,多重共线性问题无法解决,或者说它是一个伪问题。

先看一下为什么解释变量之间的相关性大会有问题。在OLS回归的经典假设(除正态假设外)下,某个系数的OLS估计值的总体方差与扰动项的方差成正比,与解释变量的总方差(一般地,我们视解释变量为随机变量)成反比,是该变量对其它解释变量回归的拟合优度的增函数。这个拟合优度可以理解为该变量的总变动中可以由其他解释变量解释的部分。当这个值趋近于1时,OLS估计值的总体方差趋向于无穷大。总体方差大时,样本方差也大的概率就大,t检验就会不准确。尽管多重共线性没有违背任何经典假设,但是OLS方法有时无法准确估计一些参数。这个问题可以理解为数据提供的信息不足以精确地计算出某些系数。最根本的解决方法当然是搜集更大的样本。如果样本给定,也许我们应该修改提出的问题,使我们能够根据样本数据做出更精确的判断。去掉一个解释变量,或者合并一些解释变量可以减少多重共线性。不过要注意的是去掉相关的解释变量会使估计有偏。

实际操作时使用方差膨胀系数衡量解释变量的多重共线性。我们只需在回归之后使用vif命令就可以得到方差膨胀系数。在命令行中敲入vif并回车,stata会报告一个包含所有解释变量的方差膨胀系数的表格,如果方差膨胀系数大于10,这个变量潜在地有多重共线性问题。

异方差是一个更值得关注的问题。首先简单地介绍一下异方差会带来哪些问题。第一、异方差不影响OLS估计的无偏性和一致性。第二、异方差使估计值方差的估计有偏,所以此时的t检验和置信区间无效。第三、F统计量不再服从F分布,LM统计量不再服从渐进卡方分布,相应的检验无效。第四、异方差使OLS不再是有效估计。总之,异方差影响推断是否有效,降低估计的效率,但对估计值的无偏性和一致性没有影响。

知道了异方差作用的原理,很自然地就有了对付它的办法。第一种方法是在不知道是否存在异方差时,通过调整相应的统计量纠正可能带来的偏差。OLS中实现对异方差稳健的标准误很简便。相应的命令是在原来的回归命令后面加上robust选项。如下:

reg (被解释变量) (解释变量1) (解释变量2)……,robust

White(1980)证明了这种方法得到的标准误是渐进可用(asymptotically valid)的。这种方法的优点是简单,而且需要的信息少,在各种情况下都通用。缺点是损失了一些效率。

另一种方法是通过直接或间接的方法估计异方差的形式,并获得有效估计。典型的方法是WLS(加权最小二乘法)。WLS是GLS(一般最小二乘法)的一种,也可以说在异方差情形下的GLS就是WLS。在WLS下,我们设定扰动项的条件方差是某个解释变量子集的函数。之所以被称为加权最小二乘法,是因为这个估计最小化的是残差的加权平方和,而上述函数的倒数恰为其权重。

在stata中实现WLS的方法如下:

reg (被解释变量) (解释变量1) (解释变量2)…… [aweight=变量名]

其中,aweight后面的变量就是权重,是我们设定的函数。

一种经常的设定是假设扰动项的条件方差是所有解释变量的某个线性组合的指数函数。在stata中也可以方便地实现:

首先做标准的OLS回归,并得到残差项;

reg (被解释变量) (解释变量1) (解释变量2)……
predict r, resid

生成新变量logusq,并用它对所有解释变量做回归,得到这个回归的拟合值,再对这个拟合值求指数函数;

gen logusq=ln(r^2)
reg logusq (解释变量1)

转载请注明:数据分析 » 常用到的stata命令_stata常用命令_stata命令大全

Viewing all 94 articles
Browse latest View live