stata做计量⼊门常⽤代码⼀览!
现在越来越多⼈有写论⽂的需求啦,经管领域的论⽂中,实证研究已成为必备操作。有了下⾯的代码,直接上⼿跑数据!
⼀、分组回归。
实证中,常常要分⾏业分年度、分省份分年度等分组回归,保存出回归出来的某些参数。statsby就是⼀个有⽤的命令,命令语句格式为:
statsby [exp_list] [, options ]: command
其具体内容,请参见STATA的help⽂件,即:
help statsby
在分组回归中,statsby最重要的是如下三个部分:
(1)[, options ],应使⽤分组变量,如:“,by(year industry)”;
(2)command,应选⽤相应的回归命令,如果是OLS,那么就为“reg y x1 x2”;
(3)[exp_list],要统计的相应参数,如:系数拟合值、拟和优度、⾃由度等,可参见对应command的help⽂件。
综合起来,命令可以写为:
use “d:\statsbydata.dta”,clear
sort year industy
Statsby _b _se e(r2) e(r2_a) e(df_m) e(df_r) e(F) e(N), by(year industry) saving(d:\statsbyresults.dta, replace): regress y x1 x2
其中:
d:\statsbydata.dta为举例使⽤数据库,包括变量为:y、x1、x2、year和industry,其中year和industry是⽤来做分组回归的分组标识变量;
sort是排序命令,建议养成好习惯对分组变量排序,为了后续研究做准备。
_b为各变量的回归系数;
_se为各变量的标准误;
e(r2)为回归⽅程的拟和优度r2;
e(r2_a)为回归⽅程的调整后r2;
代码大全书籍e(df_m)为回归⽅程的模型⾃由度,⼀般的统计、计量的书籍都记为(K-1);
e(df_r)为回归⽅程的剩余⾃由度,⼀般的统计、计量的书籍都记为(n-K);
e(F)为回归⽅程的F值;
e(N)为进⼊回归⽅程的有效样本数N,⼀般的统计、计量的书籍都记为n,也即前述提及的n;
by(year industry),使⽤变量year和industry作为分组变量,进⾏分组统计; saving(d:\statsbyresults.dta, replace),将结果保存,也可以保存在临时表⾥;
regress y x1 x2,进⾏回归,这部分可以参看regress命令⾃⾝格式进⾏扩充。
此命令结束后,将在D盘下产⽣⼀个名字为statsbyresults.dta的⽂件,上述统计量都将在此⽂件中。这⾥需要说明的是_b和_se是系统⽣成的向量,因此不能随便赋给变量,⽽e()
则是标量,可以赋值给⼀个变量,譬如在命令中可以写:“R_square=e(r2)”,这样在statsbyresults.dta就会出现⼀个R_square,替代原有的系统默认⽣成的变量。即使是系统⽣成的变量,也不⽤担⼼,因为变量的label可以区分具体的变量意义。
⼆、使⽤statsby命令后计算各回归⽅程中各回归系数的t值和p值
这⾥⼜发现了新的问题,⾸先在regress命令结果中的e()函数中,没有t值和对应的p值,这对于想验证相应分组模型对应的系数是否显著或是模型是否显著就很⿇烦,因此,这⾥只能通过t值的计算公式和STATA提供的t检验的p值函数。具体步骤如下:
⾸先切换到结果表,
save “d:\statsbydata.dta”,replace
use “d:\statsbyresults.dta”, clear
其中,save命令使⽤要⼗分⼩⼼,会把原有的数据库内容改变,因此存在⼤量的STATA的使⽤讲解中都提及到如何避免这个问题的处理,请⾃⾏参考。本⽂为了说明⽅便,简化处理。
回归系数的t值公式为:ti?其中: ?ise(?i)t(n?K)
i是第i个回归系数,可以在结果表中到相应变量,以“_b_”开头的、以对应回归变量名为结尾的,如:“_b_x1”为x1的回归系数、“_b_cons”为截距项回归系数;
se(?i)为其标准误,可以在结果表中到相应变量,以“_se_”为开头的、以对应回归变量名为结尾的,如:“_se_x1”为x1的回归系数的标准误、“_se_cons”为截距项回归系数的标准误;
n?K为回归⽅程剩余⾃由度,即e(df_r),如果没有赋给变量,那么系统⾃动⽣成⼀个变量,其label会标注“e(df_r)”,此处回归的系统变量为_eq2_stat_4。
因此,计算x1回归系数的t值和p值可以⽤如下的命令:
gen x1_t=_b_x1/_se_x1
gen x1_p=ttail(_eq2_stat_4,abs(x1_t))
其中:
ttail(e(df_r),abs(t_value))为计算t检验值对应的p值函数,具体函数要求请参考help⽂件;abs()为取绝对值函数。
这样,d:\statsbyresults.dta⽂件中⽣成了两个新的变量x1_t和x1_p,分别为x1回归系数的t值和对应的p值。
标准化:egen x22=std(x2)
. sum x22
三、使⽤statsby命令后计算各回归⽅程F值对应的p值
同t值和对应的p值⼀样,e()中也没有给出各个模型的F值对应的p值,因此需要通过STATA提供的F检验的p值函数来计算⽣成。具体步骤如下:
r2/(K?1)回归⽅程的F值公式为:F?, (1?r2)/(n?K)
其中:
r2为回归⽅程拟和优度,即e(r2);
K?1为回归⽅程的模型⾃由度,即e(df_m);
n?K为回归⽅程的剩余⾃由度,即e(df_r)。
⽽计算F值相应p值的函数为Ftail(e(df_m),e(df_r),e(F))。
按照此分组回归模型形成的结果数据中,使⽤系统⽣成变量分别为:_eq2_stat_3为e(df_m)、_eq2_stat_4为e(df_r)、_eq2_stat_5为
e(F),那么F值的相应p值为:
gen PF=Ftail(_eq2_stat_3, _eq2_stat_4, _eq2_stat_5)
则在d:\statsbyresults.dta⽂件中⽣成了⼀个新的变量PF,为相应回归⽅程的F值对应的p值。
四、使⽤statsby命令后如何⽣成各组回归⽅程的拟合值和残差等
在实际分组回归后,研究还需要保存相应因变量的拟合值或是⽅程的残差,如果不使⽤statsby的话,需要⼀个⼀个回归,然后使⽤predict 命令,如:
reg y x1 x2 if year==2002 & industry==“A0“
predict yhat2002A0
predict resid2002A0,residuals
这太⿇烦了,还要⾯临产⽣变量等问题。在使⽤statsby命令后,可以通过回归⽅程的回归系数直接计算相应的拟合值和残差,具体步骤如下:
⾸先打开d:\statsbydata.dta数据:
use “d:\statsbydata.dta”,clear
merge m:1 year industry using “d:\statsbyresults.dta”
gen yhat=_b_cons+_b_x1*x1+_b_x2*x2
gen resid=y-yhat
其中,merge是合并命令,m:1是多对⼀合并,要求using后的数据库必须按照year和industry排序并且是唯⼀排序,由于statsby命令结果⾃然是排好序的,这⾥就没有再排序。_b_cons、_b_x1和_b_x2分别是截距、x1的回归系数和x2的回归系数。合并的结果是,所有在d:\statsbydata.dta的变量数据都在year和industry的分类基础上合并到对应的样本中。这样就完成了分组回归后的因变量拟合值和残差的⽣成。
本⽂仅是就在STATA中使⽤statby完成分类回归⼯作及相应结果⽣成的简单描述,其他复杂内容,可以参考相应的help⽂件和编程知识进⼀步扩展。
四、导出回归结果(括号T值)
est store m1
outreg2 [m1]using myfile.doc,tstat e(r2_a,F) bdec(3) tdec(2)
五、缩尾winsor
先通过help winsor2安装需要的winsor2,
默认1%-99%进⾏缩尾,并⽣成后缀为_win的新变量,代码如下:
winsor2 Y X1 X2 X3 X4 ,suffix(_win) label
六、描述性分析和相关分析
描述性:sum varname
相关性:pwcorr_a  varname
pwocrr_a命令是经管之家连⽼师的教程,需要⾃⾏下载安装,使⽤该命令可以输出带*的相关性系数,*表⽰显著性⽔平。pwcorr_a命令更好⽤,可以显⽰相关性显著的*号。
七、⽅差膨胀因⼦VIF 这个现在论⽂中不怎么⽤了,但是也可以加上
回归之后输estat vif,显⽰模型vif,过⼤就存在多重共线
⼋、求中位数或分位数
1. egen x_med = median(x)
2. egen x_p50 = pctile(x), p(50)
九、取绝对值
原始变量为x,产⽣⼀列新的变量,⽐如为y等于x的绝对值,那么命令为gen y=abs(x)
参考 help abs或者help functions
⼗. 取滞后项或未来⼀期项
滞后:gen newvar=L.oldvar
未来⼀期:gen newvar=F.oldvar
asdoc sum,replace
asdoc sum,append 新增到已有的表中

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。