查看原文
其他

玩转stata:分组回归的秘密武器-statsby

Stata成长服务部 会计学术联盟 2023-02-24


青年会计学者联合发起会计领域NO.1高端自媒体


点击:高层次会计人才招聘免费推送!


传播会计前辈思想,引领青年一代成长

因缘分相聚,因互助成长,因智慧光华



 

实证分析中经常需要按年度、行业进行回归。如果仅仅使用regress命令,那么必然造成进行重复多次的繁重劳动。本期介绍一种STATA已经提供了相应的命令完成这个貌似繁重的工作,即statsby,这个可以专门用来处理分组数据的命令。

 

一、statsby的命令格式及说明


statsby命令格式为:

statsby [exp_list] [, options ]:  command

其具体内容,请参见STATAhelp文件,即:

help statsby

在分组回归中,statsby最重要的是如下三个部分:

1[, options ],应使用分组变量,如:“,by(year industry)”;

2command,应选用相应的回归命令,如果是OLS,那么就为“regress y x1 x2”;

3[exp_list],要统计的相应参数,如:系数拟合值、拟和优度、自由度等,可参见对应commandhelp文件。

综合起来,命令可以写为:

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为举例使用数据库,包括变量为:yx1x2yearindustry,其中yearindustry是用来做分组回归的分组标识变量;

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),使用变量yearindustry作为分组变量,进行分组统计;

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,申请好友主题:“称呼+单位简称+学历+职称”(本群仅限高校或科研机构同仁加群!)


欢迎邀请与本群文化相匹配的正能量,积极向上的,又好玩的同仁入群!


中国高校会计教师联盟


20171218



▼点击查看更多精彩

陈艳:会计舞弊研究之路及对未来的思考

张新民:财务分析的战略视角

王化成:基于能力提升的财务管理教学思考

谢志华:会计教授演讲金句及精妙逻辑推演选摘

姜国华:关于会计学术研究的点滴心得

陆铭:如何把实证研究进行到底?

辛清泉:一江春水向东流

叶康涛:我的会计研究之路:从代理观到认知观

2017年全国会计领军人才(学术类)入选人员|简介汇编


▼学习充电推荐

高级会计人才网络招聘报名

Stata培训及实证会计论文学习|12月特惠营


近50000本硕博关注

会计领域NO.1高端自媒体

汇聚会计学子、学者、学师


投稿及战略合作,请联系微信:610997158,自我介绍下,注明事由

投稿:Accounting_AU@yeah.net



您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存