上市企业成本粘性计算

admin / 博文 / ... / Reads: 874

1 问题描述

成本粘性是指成本费用随业务量变化时出现的不对称性,表现为成本在业务量增加时的变化率大于在业务量减少时的变化率。成本粘性的计算公式为:

这里采用上市企业数据来计算成本粘性。其中sheet1中为2010年至2015年上市企业营业收入的季度数据;sheet2中为2010年至2015年上市企业成本的季度数据

r-64-1

2 读取数据

library(readxl)
sale=read_excel("D:/Desktop/sticky.xlsx",sheet="Sheet1")
cost=read_excel("D:/Desktop/sticky.xlsx",sheet="Sheet2")

3 将季度累积数据转换为当季数据

qsale=sale[,1]
qsale[,2]=NA
colnames(qsale[,2])="qsale2010Q1"

qcost=cost[,1]
qcost[,2]=NA
colnames(qcost[,2])="qcost2010Q1"

for(i in 3:25){
  if((i-1)%%4==1){
    qsale[,i]=sale[,i]
    colnames(qsale[,i])= paste0('dsale',2010+(i-2)%/%4,"Q",(i-2)%%4+1)

    qcost[,i]=cost[,i]
    colnames(qcost[,i])= paste0('dcost',2010+(i-2)%/%4,"Q",(i-2)%%4+1)
  }else{
    qsale[,i]=sale[,i]-sale[,(i-1)] 
    colnames(qsale[,i])= paste0('dsale',2010+(i-2)%/%4,"Q",(i-2)%%4+1)

    qcost[,i]=cost[,i]-cost[,(i-1)]
    colnames(qcost[,i])= paste0('dcost',2010+(i-2)%/%4,"Q",(i-2)%%4+1)
  }

}

4 计算收入和成本的季度增长数据

dsale=qsale[,1]
dsale[,2]=NA
colnames(dsale[,2])="dsale2010Q1"

dcost=qcost[,1]
dcost[,2]=NA
colnames(dcost[,2])="dcost2010Q1"

for(i in 3:25){
  dsale[,i]=qsale[,i]-qsale[,(i-1)] 
  colnames(dsale[,i])= paste0('dsale',2010+(i-2)%/%4,"Q",(i-2)%%4+1)

  dcost[,i]=qcost[,i]-qcost[,(i-1)]
  colnames(dcost[,i])= paste0('dcost',2010+(i-2)%/%4,"Q",(i-2)%%4+1)
}

5 计算成本粘性

sticky=data.frame(matrix(nrow=3137,ncol=7))
colnames(sticky)=c("证券代码","sticky2010","sticky2011","sticky2012","sticky2013","sticky2014","sticky2015")
sticky[,1]=cost[,1]

dcost=as.data.frame(lapply(dcost, as.numeric))
dsale=as.data.frame(lapply(dsale, as.numeric))

for(i in 1:3137){

  for(j in 1:6){
    c1=NA
    r1=NA
    c2=NA
    r2=NA
    for(k in 1:4){
      if(is.na(dsale[i,(j-1)*4+k+1])){next}
      if(dsale[i,(j-1)*4+k+1]<0 ){
        c1=i
        r1=(j-1)*4+k+1
        break
      }
    }
    for(k in 1:4){
      if(is.na(dsale[i,(j-1)*4+k+1])){next}
      if(dsale[i,(j-1)*4+k+1]>0){
        c2=i
        r2=(j-1)*4+k+1
        break
      }
    }

    if(!is.na(c1) & !is.na(r1) & !is.na(c2) & !is.na(r2)){
      sticky[i,j+1]=log(dcost[c1,r1]/dsale[c1,r1])-log(dcost[c2,r2]/dsale[c2,r2]) 
    }else{
      sticky[i,j+1]=NA
    }
  }
}

6 计算完成后,成本粘性存储在sticky变量中

> head(sticky)
   证券代码 sticky2010    sticky2011  sticky2012  sticky2013  sticky2014  sticky2015
1 000001.SZ         NA            NA          NA          NA         NaN         NaN
2 000002.SZ -0.1388725  0.0242242130 -0.08527615 -0.11050241 -0.07818071  0.03412075
3 000004.SZ -0.1931024           NaN         NaN  0.01251487 -0.09036327 -0.31786410
4 000005.SZ         NA -0.8494772512  0.59663087         NaN         NaN  0.80853489
5 000006.SZ  0.4038917  0.0008572132  0.05332973 -0.08120787  0.06361482  0.07343751
6 000007.SZ         NA  2.3212281891         NaN         NaN         NaN -0.15379662

说明:如果一个企业四个季度收入都是增长或降低,那么无法计算出企业当年的成本粘性,对应的成本粘性值为NA;在计算成本粘性时,如果成本和收入一个增长一个降低,那么将造成两者比值为负数,无法计算出对数值(log()函数不定义域不能取负值),对应的成本粘性值为NaN。



获取案例数据,请关注微信公众号并回复:R_dt5

Comments

Make a comment

Author: admin

Publish at: ...

关注公众号: