1 问题描述
为了研究我国各地区之间的商品价格是否一致,这里收集了我国29个地区9类商品2013年至2019年的价格指数。据此来计算2013年至2019年各地区的价格一体化指数。原始数据存放在Excel中,包含7个Sheet表,形式如下:
2 价格一体化计算方法
第一步:计算出各省份间各类商品相对价格的绝对值|Q_ijt^k |,其中k代表第k种商品,t表示第t年,P_it^k表示i省第t年第k种商品的价格指数。计算方式如下:
|Q_ijt^k |=|P_it^k-P_jt^t |
第二步:对|Q_ijt^k |作去均值化处理,以消除特定商品种类相联系的固定效应所带来的系统偏误,其中|Q_t^k |表示第t年第k种商品相对价格的均值。具体处理方式为:
q_ijt^k=|Q_ijt^k |-|Q_t^k |
第三步:计算各省份间各种商品相对价格波动的方差即为t年i、j两省之间的价格一体化指数,计算公式如下:
priceindex_ijt=Var(q_ijt^k )=Var(|Q_ijt^k |-|Q_t^k |)
需要注意的是目前文献中对价格一体化的计算有两种处理方式,一种是只计算与相邻省份的价格一致性,一种是计算与所有其余省份的价格一致性。
3 价格一体化计算代码
3.1 与其余所有省份的价格一体化指数
install.packages("readxl")
library(readxl)
priceindex=c()
provname=read_excel("C:/Desktop/price.xlsx",sheet="2013")[,1]
for(num in 2013:2019){
sheetname=as.character(num)
df1=read_excel("C:/Users/tity/Desktop/price.xlsx",sheet=sheetname)
df2=df1[,2:ncol(df1)]
data <- as.matrix(df2)
matrix_i=rep(1,29)%x%diag(29)
matrix_c=diag(29) %x% rep(1,29)
lni=matrix_c%*%data
lnj=matrix_i%*%data
Q=abs(log(lni)-log(lnj))
deltQ=colMeans(Q)*841/812
deltQ_matrix=matrix(data=rep(deltQ,841),nrow=841,ncol=9,byrow = TRUE)
qijk=Q-deltQ_matrix
allvar=apply(qijk,1,var)
var_matrix=matrix(data=allvar,nrow=29,ncol=29)
var_matrix=var_matrix-diag(diag(var_matrix))
price=colMeans(var_matrix)*29/28
priceindex=c(priceindex,price)
}
pi=as.data.frame(matrix(data=priceindex, nr=29, nc=7))
result=data.frame(provname,pi)
colnames(result)=c('prov','2013年','2014年','2015年','2016年','2017年','2018年','2019年')
write.csv(result,file = "C:/Desktop/priceindex.csv",row.names = FALSE,fileEncoding = "gbk")
这里采用矩阵的思想来进行的计算,计算结果会保存在名为priceindex.csv的文件中,如下所示。当然,如果发现结果有误,欢迎指正!
3.2 与相邻省份的价格一体化指数
相邻省份计算稍微麻烦一点,需要省份之间是否相邻的信息,这里我们已经获取了省份的邻接矩阵,保存在名为w.xlsx文件中。
计算代码如下:
library(readxl)
priceindex=c()
provname=read_excel("C:/Users/tity/Desktop/price.xlsx",sheet="2013")[,1]
w=as.matrix(read_excel("C:/Users/tity/Desktop/w.xlsx",col_names =FALSE, sheet="Sheet2"))
sumw=colMeans(w)*29
for(num in 2013:2019){
sheetname=as.character(num)
df1=read_excel("C:/Users/tity/Desktop/price.xlsx",sheet=sheetname)
df2=df1[,2:ncol(df1)]
data <- as.matrix(df2)/100
matrix_i=rep(1,29)%x%diag(29)
matrix_c=diag(29) %x% rep(1,29)
lni=matrix_c%*%data
lnj=matrix_i%*%data
Q=abs(log(lni)-log(lnj))
ww=matrix(data=w)
deltQ=t(ww)%*%Q/(colMeans(ww)*841)
deltQ_matrix=matrix(data=rep(deltQ,841),nrow=841,ncol=9,byrow = TRUE)
qijk=Q-deltQ_matrix
allvar=apply(qijk,1,var)
var_matrix=matrix(data=allvar,nrow=29,ncol=29)
rst= w%*%var_matrix
temp=(diag(rst))
priceindex=c(priceindex,temp/sumw)
}
pi=as.data.frame(matrix(data=priceindex, nr=29, nc=7))
result11=data.frame(provname,pi)
colnames(result11)=c('prov','2013年','2014年','2015年','2016年','2017年','2018年','2019年')
write.csv(result11,file = "C:/Users/tity/Desktop/priceinde2.csv",row.names = FALSE,fileEncoding = "gbk")
计算结果会保存在名为priceindex2.csv的文件中,如下所示。当然,如果发现结果有误,欢迎指正!