Stata计算可操纵性应计利润——基于琼斯模型

说明

数据、变量名称来源于国泰安数据库,具体名称可见国泰安数据库资产负债表、利润表,本代码仅供参考。

代码实现

基本Jones模型
Jones (1991) 提出了经典的Jones模型,从营业收入变动和固定资产水平衡量企业应计利润的变动。

clonevar A  = a001000000		 // 总资产
clonevar EBXI  = b001300000		 // 营业利润
clonevar cfo = c001000000		 // 经营活动现金流净额
gen acc = (EBXI - cfo)/L.A       // 总应计项目,y
gen invA  = 1/L.A                // 滞后一期的总资产的倒数, x1
gen Dsale = D.b001101000/L.A     // 营业收入的增量, x2
gen PPE = a001212000/L.A		 // 固定资产净额/总资产, x3
sort stkcd year
sum A EBXI cfo acc invA Dsale PPE
* 生成行业+年份变量,方便回归
egen sic_year = group(ind year), label lname(ind_year) // sic 为行业分类,year为年度时间标识
sum sic_year
* 利用循环求残差,残差即为应计盈余管理DACC
sum acc invA Dsale PPE
gen DACC1 = .
//N为sic_year的编码最大值
forvalues i = 1/N{
   //有时由于某行业内企业较少,不能进行单个回归,需要用cap即capture捕捉错误,跳过错误。
   capture  qui reg acc invA Dsale PPE if (sic_year==`i'), nocons
   if(_rc==0){
	predict e if e(sample), res
	replace DACC1 = e if e(sample) 
   drop e
   }
}

修正Jones模型
Dechow等 (1995) 提出的修正Jones模型在Jones模型的基础上加入了应收账款的变动

//接上面代码,共用部分变量
xtset stkcd year 
* 根据国泰安数据库计算需要的指标
gen DAR   = D.a001111000/L.A     // 应收账款的增量
gen DS_DAR= Dsale - DAR          // 营业收入的增量-应收账款的增量, x2
* 生成行业+年份变量,方便回归
//egen sic_year = group(sic year), label lname(sic_year) // sic 为行业分类,year为年度时间标识
* 利用循环求残差,残差即为应计盈余管理DACC
gen DACC2 = .
//drop e
//N为sic_year的编码最大值
 forvalues i = 1/N{
 	//有时由于某行业内企业较少,不能进行单个回归,需要用cap即capture捕捉错误,跳过错误。
	capture  reg acc invA DS_DAR PPE if (sic_year==`i'), nocons
	if(_rc==0){
	predict e if e(sample), res
	replace DACC2 = e if e(sample) 
   drop e
 }
}
sum DACC2
label var DACC1 琼斯模型应计盈余
label var DACC2 修正琼斯应计盈余分行业年份

真实盈余管理
目前对真实盈余管理的计算普遍使用Roychowdhury (2006)

//接上面代码,删除部分变量
drop A-PPE DAR DS_DAR
xtset stkcd year 
replace a001123000=0 if a001123000==.
sum a001000000 c001000000   a001123000  b001209000 b001210000
replace b001209000=0 if b001209000==.
replace b001210000=0 if b001210000==.
* 根据国泰安数据库计算需要的指标
clonevar A  = a001000000		           // 总资产
gen cfo   = c001000000/L.A		  	       // 经营活动现金流净额, y1
gen cogs  = b001209000/L.A		           // 销售费用/总资产
gen Dinv  = D.a001123000/L.A	           // 存货净额增量
gen prod  = cogs + Dinv                    // 生产成本, y2
gen disexp= (b001209000+b001210000)/L.A    // 酌量性费用,销售费用+管理费用, y3
gen invA  = 1/L.A                          // 滞后一期的总资产的倒数  
gen sale  = b001101000/L.A		           // 营业收入
gen Lsale = L.b001101000/L.A               // 滞后一期的营业收入
gen Dsale = D.b001101000/L.A               // 营业收入增量
gen LDsale= L.D.b001101000/L.A             // 滞后一期的营业收入增量

* 生成行业+年份变量,方便回归
//egen sic_year = group(sic year), label lname(sic_year)  // sic 为行业分类,year为年度时间标识
* 分别计算异常经营性净现金流、异常生产成本和异常酌量性费用
*-CFO
local  y "cfo"
global y `y'
local  x "invA sale Dsale"
global x `x' 
cap drop AB`y'
gen AB`y'  = .
	 //drop e
//N为sic_year的编码最大值
 forvalues i = 1/N{
 	//有时由于某行业内企业较少,不能进行单个回归,需要用cap即capture捕捉错误,跳过错误。
   capture reg  cfo invA sale Dsale if sic_year==`i'
   if (_rc==0){
   predict e if e(sample), res
   replace ABcfo = e if e(sample) 
   drop e	
} 
}
sum ABcfo
sum sic_year
*-PROD	
 //qui tsset id year
 local y "prod"
 local x "invA sale Dsale LDsale"
 cap drop AB`y'
 gen AB`y'  = .
 //N为sic_year的编码最大值
 forvalues i = 1/N{
 	//有时由于某行业内企业较少,不能进行单个回归,需要用cap即capture捕捉错误,跳过错误。
   cap qui reg prod invA sale Dsale LDsale if (sic_year==`i')
   if (_rc==0){
   predict e if e(sample), res
   replace ABprod = e if e(sample) 
   drop e
 }		
} 
sum ABprod
*-DISEXP	 
 local y "disexp"
 local x "invA Lsale"
 cap drop AB`y'
 gen AB`y'  = .
 //drop e
 //N为sic_year的编码最大值
 forvalues i = 1/N{
 	//有时由于某行业内企业较少,不能进行单个回归,需要用cap即capture捕捉错误,跳过错误。
   cap reg disexp invA Lsale if (sic_year==`i')
   if (_rc==0){
   predict e if e(sample), res
   replace ABdisexp = e if e(sample) 
   drop e
 }		  
}

你可能感兴趣的:(Stata)