1 问题描述
成本粘性是指成本费用随业务量变化时出现的不对称性,表现为成本在业务量增加时的变化率大于在业务量减少时的变化率。成本粘性的计算公式为:
这里采用上市企业数据来计算成本粘性。其中sheet1中为2010年至2015年上市企业营业收入的季度数据;sheet2中为2010年至2015年上市企业成本的季度数据
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。