玩转stata:分组回归的秘密武器-statsby
青年会计学者联合发起会计领域NO.1高端自媒体
点击:高层次会计人才招聘免费推送!
传播会计前辈思想,引领青年一代成长
因缘分相聚,因互助成长,因智慧光华
实证分析中经常需要按年度、行业进行回归。如果仅仅使用regress命令,那么必然造成进行重复多次的繁重劳动。本期介绍一种STATA已经提供了相应的命令完成这个貌似繁重的工作,即statsby,这个可以专门用来处理分组数据的命令。
一、statsby的命令格式及说明
statsby命令格式为:
statsby [exp_list] [, options ]: command
其具体内容,请参见STATA的help文件,即:
help statsby
在分组回归中,statsby最重要的是如下三个部分:
(1)[, options ],应使用分组变量,如:“,by(year industry)”;
(2)command,应选用相应的回归命令,如果是OLS,那么就为“regress y x1 x2”;
(3)[exp_list],要统计的相应参数,如:系数拟合值、拟和优度、自由度等,可参见对应command的help文件。
综合起来,命令可以写为:
use “data.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:\results.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(results.dta, replace),将结果保存,也可以保存在临时表里;
regress y x1 x2,进行回归,这部分可以参看regress命令自身格式进行扩充。
此命令结束后,将在D盘下产生一个名字为results.dta的文件,上述统计量都将在此文件中。这里需要说明的是_b和_se是系统生成的向量,因此不能随便赋给变量,而e()则是标量,可以赋值给一个变量,譬如在命令中可以写:“r_square=e(r2)”,这样在results.dta就会出现一个r_square,替代原有的系统默认生成的变量。即使是系统生成的变量,也不用担心,因为变量的label可以区分具体的变量意义。
二、举例
*案例一
use d:/sample.dta,clear
xtset stkcd year
/*分年份和分行业做回归*/
bys ind year: reg sale staff wage fixed adminfee
/*分年份和分行业做回归,并且选取其各自回归系数为变量的内容*/
statsby _b, by(ind year) saving(123.dta, replace): reg sale staff wage fixed adminfee
merge m:1 ind year using 123.dta
gen yhat = staff*_b_staff + wage*_b_wage + fixed*_b_fixed + adminfee*_b_adminfee + _b_cons
*案例二
import excel "return_residual.xls", ///
sheet("Sheet1") firstrow case(lower) clear
// 方法一
egen t = group(year)
qui sum t
local Nt = r(max)
egen s = group(ind)
qui sum s
local Ns = r(max)
gen res = .
forvalues t = 1/`Nt' {
forvalues s = 1/`Ns' {
cap qui reg return returntl1 size if (t==`t' & s==`s')
cap qui predict e if e(sample), res
cap qui replace res = e if e(sample)
cap drop e
}
}
save example,replace
// 方法二
statsby _b, by(ind year) saving(123.dta, replace): reg return returntl1 size
merge m:1 ind year using 123.dta
gen res2 = return - returntl1*_b_returntl1 - size*_b_size - _b_cons
set matsize 1000
qui reg return (s#t)##(c.returntl1 c.size)
predict res3, res
// 确认结果
scatter res3 res2 res
*案例三
use soccer.dta,clear
*按行业回归:
egen gr=group(state)
quietly sum gr
local gmax=r(max)
forvalue i=1/`gmax' {
reg score goals loss if gr==`i'
}
*按年度回归:
egen grt=group(year)
quietly sum grt
local gmax=r(max)
forvalue t=1/`gmax' {
reg score goals loss if grr==`t'
}
*照年份和行业分组
egen g3=group(year state)
quietly sum g3
local gmax=r(max)
forvalue t=1/`gmax' {
reg score goals loss if grr==`t'
}
1
学习试听(原速播放版)
https://v.qq.com/txp/iframe/player.html?vid=x1328vthei3&width=500&height=375&auto=0
2
学习试听(1.5倍加速播放版)
https://v.qq.com/txp/iframe/player.html?vid=y1328h9ij7s&width=500&height=375&auto=0
更多stata学习资料
欢迎点击左下方阅读原文
“中国高校会计教师联盟(695人)”欢迎加入!
欢迎诸位加入会计学术联盟旗下的“中国高校会计教师联盟微信2群”,希望大家积极贯彻联盟发展理念:传播会计前辈思想,引领青年一代成长;发扬联盟发展文化:传正能量,广交朋友,整合资源,服务成长~
感谢大家一直以来的各种捧场支持!
为便于大家认识,切磋会计教学手艺,请及时修改群名:“称呼+单位简称+学历+职称”
高校老师相加群,请联系微信610997158,申请好友主题:“称呼+单位简称+学历+职称”(本群仅限高校或科研机构同仁加群!)
欢迎邀请与本群文化相匹配的正能量,积极向上的,又好玩的同仁入群!
中国高校会计教师联盟
2017年12月18日
▼点击查看更多精彩
▼学习充电推荐
近50000本硕博关注
会计领域NO.1高端自媒体
汇聚会计学子、学者、学师
投稿及战略合作,请联系微信:610997158,自我介绍下,注明事由
投稿:Accounting_AU@yeah.net