Stata:资本存量测算-张军法-单豪杰法
👇 连享会 · 推文导航 | www.lianxh.cn
🍎 Stata:Stata基础 | Stata绘图 | Stata程序 | Stata新命令 📘 论文:数据处理 | 结果输出 | 论文写作 | 数据分享 💹 计量:回归分析 | 交乘项-调节 | IV-GMM | 时间序列 | 面板数据 | 空间计量 | Probit-Logit | 分位数回归 ⛳ 专题:SFA-DEA | 生存分析 | 爬虫 | 机器学习 | 文本分析 🔃 因果:DID | RDD | 因果推断 | 合成控制法 | PSM-Matching 🔨 工具:工具软件 | Markdown | Python-R-Stata 🎧 课程:公开课-直播 | 计量专题 | 关于连享会
连享会 · 文本分析 | 爬虫 | 机器学习
作者: 陈波 (深圳大学),张翠燕 (山东大学)
邮箱: 1900123011@email.szu.edu.cn,zcy1992yan@163.com
目录
1. 缘起
2. 永续盘存法
2.1 基期资本存量 的确定
2.2 折旧率
2.3 投资
2.4 投资价格指数
3. 数据预处理
3.1 数据来源
3.2 数据处理
4. 资本存量计算
4.1 简便方法
4.2 复杂方法
5. 城市资本存量
5.1 数据清洗
5.2 计算城市资本存量
5.3 绘图比较
6. 结语与不足
7. 数据和程序下载
8. 参考文献
9. 相关推文
温馨提示: 文中链接在微信中无法生效。请点击底部「阅读原文」。或直接长按/扫描如下二维码,直达原文:
致谢:在该文的撰写过程中,单豪杰老师无私分享自己计算的数据,深表谢意。当然,文责自负。
本文的原始数、do file 和计算结果可以通过以下链接获取:
https://gitee.com/arlionn/ChinaCapitalStock
1. 缘起
在测算各类效率指标的时候,一个绕不开的投入性指标就是资本存量 。但是,无论是统计年鉴,还是多数商业数据库,都无法直接获取这一指标,需要我们自行计算。
就国内来讲,目前最流行的两种方法无疑是张军老师 2004 年发表在《经济研究》上的测算方法 (以下简称张军法),以及单豪杰老师 2008 年发表在《数量经济技术经济研究》上的测算方法 (以下简称单豪杰法)。前者引用量高达 7265 次,后者也高达 3074 次。可以说,目前国内大多数文献,都是依循上述两种方法。
由此,也衍生出一个很有意思的问题,上述两种方法计算结果的差异在哪里?两种结果的差异大么?为明晰这一问题,我们基于 2000-2017 年中国各省数据,分别使用 张军等 (2004) 和 单豪杰 (2008) 的方法计算资本存量,具体来看一下两者的差异。
2. 永续盘存法
首先,两位老师都是使用的永续盘存法,该方法由 Goldsmith 在 1951 年开创,是目前测算资本存量最为流行的方法。计算公式如下:
其中 是我们要算的资本存量, 是折旧率, 是固定资产投资, 是投资价格指数。基于上式,延伸出了四个问题,其中对前两个问题的不同处理,直接导致了两种计算方法的差异。
2.1 基期资本存量 的确定
观察永续盘存法的计算公式可以发现,该方法与自回归模型在形式上十分相似,其含义上也有相似之处。在永续盘存法下,基期选择的越早,基期资本存量估计的误差对后续年份的影响就会越小。因此,在条件允许的情况下,多数学者会使用 1952 年或 1978 年作为基年。张军法和单豪杰法都使用了 1952 年作为基年。
在具体处理上,张军法是用各省市 1952 年固定资本形成总额除以 10% 作为基期资本存量,公式如下:
而单豪杰法则使用了 1953 年固定资本形成总额除以折旧率 与 1953-1957 年固定资本形成总额的平均增长率之和 ,公式如下:
考虑折旧率就在 10% 左右,张军法的基期资本存量会明显大于单豪杰法。
2.2 折旧率
折旧率的确定也是资本存量计算的一个核心问题,它直接决定了前期对后期影响的权重大小。在后面的对比中,我们也会发现,资本存量对折旧率的大小相当敏感。
理论上讲,折旧率是会随着时间变化而变化的,但是为了简化计算,我们都会对该指标取固定值,使其不随时间发生变化。其中张军法的折旧率为 9.6%,单豪杰法的折旧率为 10.96%。
2.3 投资
查阅数据,我们发现会有三个统计指标与固定资产投资相近,分别是:固定资本形成额、固定资产投资与新增固定资产投资。国家统计局对三者的定义如下:
固定资本形成额是指常住单位在一定时期内获得的固定资产减处置的固定资产的价值总额 固定资产投资又称为固定资产投资完成额,是以货币形式表现的在一 定时期内全社会建造和购买的固定资产工作量和与此有关的费用的总和 新增固定资产投资是指已经完成建造和购置过程,并已交付生产或使 用单位的固定资产的价值。
从定义上可以发现,在反映资本形成方面,固定资本形成额要优于固定资产投资,因此多数学者都采用固定资本形成总额作为投资 。当然,在计算城市资本存量时,由于无法获取固定资本形成总额,只能退而求其次,使用固定资产投资。
2.4 投资价格指数
由于当年公布的数据都是名义价格,而非实际值,因此我们一般需要使用价格指数对名义量进行平减。在具体操作中,我们使用统计局公布的固定资产投资价格指数,以某一年为基期计算不变价。
3. 数据预处理
3.1 数据来源
由于 2017 年之后国家不再统计资本形成总额数据,而 2000 年之前的数据又存在一定缺失值,因此我们将计算区间定于 2000-2017 年,以 2000 年为基期计算不变价。
固定资本形成总额和固定资产投资价格指数来源于 CSMAR,张军老师的数据来自于其发表在《经济研究》上的文章《中国省际物质资本存量估算: 1952—2000》,该文表 2 的最后一列 (2000b) 即为 2000 年价格计算的资本存量。单豪杰老师的数据则是以邮件形式向其求取,感谢单老师对学术后进的无私帮助。
3.2 数据处理
第一步:新建数据文件
为方便后续数据处理,我们先使用 efolder
命令在桌面上新建一个 ChinaK 文件夹,并内置三个子文件夹:raw_data 、result_data 和 picture,用于存储原始数据、处理之后的结果数据与绘图结果。最后用 global
定义存储路径,方便后面直接调用。(efolder
的用法可参考连享会推文:Stata数据处理:用-efolder-快速生成文件夹和子文件夹)
* # 1. 数据处理
********************
* # 1.1 新建数据文件
********************
efolder, cd("~/Desktop/ChinaK")
efolder, cd("~/Desktop/ChinaK/Prov") ///
sub(raw_data result_data)
global raw_data "~/Desktop/ChinaK/Prov/raw_data"
global result_data "~/Desktop/ChinaK/Prov/result_data"
第二步:清洗 CSMAR 数据
使用 copy
命令从码云中下载固定资本形成总额与价格指数数据。这两个数据都来自于 CSMAR。随后使用 import excel
将数据导入至 Stata,保留 2000-2017 年数据,并存为 dta 格式。代码如下:
* ## 1.2 清洗 CSMAR 数据
************************
cd "$raw_data"
*- 固定资本形成总额
copy "https://gitee.com/arlionn/ChinaCapitalStock/raw/master/data/CRE_Gdp03.xlsx" ///
"CRE_Gdp03.xlsx", replace
import excel "CRE_Gdp03.xlsx", firstrow clear
labone, nrow(1 2)
drop in 1/2
rename (_all)(year provcode province invest)
destring year provcode invest, replace force
drop if provcode == 142
keep if inrange(year, 2000, 2017)
xtset provcode year
save "$result_data/invest_2000_2017.dta", replace
*- 固定资产投资价格指数
copy "https://gitee.com/arlionn/ChinaCapitalStock/raw/master/data/CRE_Pi04.xlsx" ///
"CRE_Pi04.xlsx", replace
import excel "CRE_Pi04.xlsx", firstrow clear
labone, nrow(1 2)
drop in 1/2
rename (_all)(year provcode province index)
destring year provcode index, replace force
keep if inrange(year, 2000, 2017)
xtset provcode year
tsfill, full
bys provcode: fillmissing province
xtset provcode year
save "$result_data/index_2000_2017.dta", replace
第三步:清洗张军数据
导入张军等 (2004) 中表 2 的数据,我们只需要保留 2000b 这一列的数据,作为之后计算的基期资本存量。完成之后,同样保存为 dta 文件。
* ## 1.3 清洗张军数据
***********************
copy "https://gitee.com/arlionn/ChinaCapitalStock/raw/master/data/资本存量换算—张军.xlsx" ///
"资本存量换算—张军.xlsx", replace
import excel "资本存量换算—张军.xlsx", sheet("Sheet2") clear
nrow
keep province provcode _2000b
rename (_2000b)(zj_2000)
destring provcode zj_2000, replace force
drop if provcode == .
replace provcode = provcode * 10000
label var zj_2000 "2000年不变价资本存量 (张军)"
save "$result_data/stock_base_zj.dta", replace
第四步:清洗单豪杰数据
同样地,我们将单豪杰老师提供的数据导入 Stata,需要注意的是,单老师提供给你的 excel 中会有两个 sheet,第一个 sheet 是 1952 年价的资本存量,另一个 sheet 是平减指数 (1952 = 1)。本文使用的是 2000 年价,因此需要对单老师的数据进行平减,具体做法是使用对 1952 年价的资本存量,乘以 2000 年的平减指数,所得即为 2000 年价的资本存量。
* ## 1.4 清洗单豪杰数据
***********************
copy "https://gitee.com/arlionn/ChinaCapitalStock/raw/master/data/资本存量换算-单豪杰.xlsx" ///
"资本存量换算-单豪杰.xlsx", replace
import excel "资本存量换算-单豪杰.xlsx", firstrow clear
gen shj_2000 = invest_2000 * c2000_1952
label var shj_2000 "2000年不变价资本存量 (单豪杰)"
drop invest_2000 c2000_1952
save "$result_data/stock_base_shj.dta", replace
第五步:合并数据。使用
merge
命令合并上述四份数据。
需要注意的是,张军法与单豪杰法在数据处理时,都将重庆合并至四川,我们随后也做相同处理。
* ## 1.5 合并数据
***********************
use "$result_data/invest_2003_2017.dta", clear
merge 1:1 provcode year using "$result_data/index_2003_2017.dta", keep(1 3) nogen
merge m:1 provcode using "$result_data/stock_base_zj.dta", ///
keepusing(zj) keep(1 3) nogen
merge m:1 provcode using "$result_data/stock_base_shj.dta", ///
keepusing(shj) keep(1 3) nogen
第六步:计算西藏的价格指数。
西藏并未公布其历年的固定资产投资价格指数。因此我们按照单豪杰 (2008) 的做法,使用新疆和青海两省的价格指数,对西藏的缺失值进行补齐。
* ## 1.6 计算西藏价格指数
***********************
// 西藏价格指数使用新疆、青海均值 (单豪杰,2008)
inlist2 provcode, values(650000, 630000)
bys year inlist2: egen index2 = mean(index)
replace index2 = . if inlist2 == .
bys year: fillmissing index2
replace index = index2 if provcode == 540000
drop index2 inlist2
第七步:计算实际资本形成总额。
由于 CSMAR 提供的价格指数是以上一年 = 100,我们需要先将其换算为 2000 年 = 1,即以 2000 年为基期的平减指数。资本形成总额 invest 除以平减指数 deflator ,就是 2000 年价的实际资本形成总额了。
* ## 1.7 计算实际资本形成总额
***************************
xtset provcode year
gen deflator = 1 if year == 2000
bys provcode: replace deflator = index[_n] * deflator[_n-1] / 100 if mi(deflator)
gen real_invest = invest / deflator
save "$result_data/calculate.dta", replace
最后,将合并文件保存,用于接下来的计算。
4. 资本存量计算
4.1 简便方法
在实际操作中,囿于数据可得性,或者简单化的需要,部分学者在计算基期资本存量时,会直接使用第一期投资除以 10%,或除以投资增长率与折旧率之和,而不论其基期年份。
例如郑世林、杨梦俊 (2020, 管理世界) 在计算中国 2000-2016 年省际无形资本存量时,基期资本存量直接使用基期投资额除以折旧率与投资增长率之和。王垚等 (2017, 经济学季刊) 在计算中国 1990-2010 年城市资本存量时,直接使用基期投资除以 10% 作为基期资本存量。
这种做法的好处显而易见,可以极大的减少工作量,丢掉 “历史包袱”。缺点是简单粗暴,直接使用基期投资的一定倍数来替代前面几十年的积累。
我们先使用这种简便方法估算一下各省资本存量。
张军法。
导入前面计算好的数据,将 2000 年的实际资本形成总额除以 10% 作为基期资本存量,然后使用永续盘存法计算各年资本存量,折旧率去 9.6%。变量 stock1 即为张军法计算的资本存量。
* # 2. 资本存量计算 (简易法)
**************************
* ## 2.1 张军法
********************
use "$result_data/calculate.dta", clear
*- 基期资本存量 (张军等,2000)
gen stock1 = real_invest / 0.1 if year == 2000
replace stock1 = real_invest + stock1[_n-1] * (1- 0.096) if mi(stock1)
单豪杰法。
先计算出各年的实际投资之和,再计算出历年增长率,然后取 2001-2005 年的增长率均值作为投资增长率 。
* ## 2.2 单豪杰法
********************
*- 平均增长率
bys year: egen total_invest = sum(real_invest)
xtset provcode year
gen rate = d.total_invest / total_invest[_n-1]
egen growth = mean(rate) if inrange(year, 2001, 2005)
fillmissing growth
drop total_invest rate
随后以 2001 年实际投资额除以增长率 与折旧率之和,作为基期资本存量。然后使用永续盘存法计算各年资本存量,折旧率取 10.96%。变量 stock2 即为单豪杰法计算的资本存量。
gen stock2 = real_invest[_n+1] / (growth + 0.1096) if year == 2000
replace stock2 = real_invest + stock2[_n-1] * (1- 0.1096) if mi(stock2)
label var deflator "平减指数"
label var real_invest "实际固定资本形成总额"
label var stock1 "资本存量 (张军法, K_1=I_1/0.1)"
label var growth "投资增长率"
label var stock2 "资本存量 (单豪杰法, K_1=I_2/(g+delta))"
save "$result_data/capital_stock_1.dta", replace
我们将两种方法计算的资本存量按年份加总的全国层面,数值中的零太多,我们对其除以 10000,将单位变为万亿,并绘制散点图。
collapse (sum)stock1 (sum)stock2, by(year)
for var stock*: replace X = X / 10000
gen gap = stock1 - stock2
tw (scatter stock1 year, c(l)) ///
(scatter stock2 year, c(l) m(T)) ///
(bar gap year, barw(0.7) yaxis(2)), ///
xlabel(2000(2)2017) xtitle("") ytitle("") ///
ylabel(-100(50)200 -50 " " -100 " ", nogrid) ///
ylabel(0(20)60, axis(2)) ///
legend(ring(0) rows(3) position(11) ///
order(1 "张军方法" 2 "单豪杰方法" 3 "资本存量差")) ///
graphregion(fcolor(white))
下图展示了两种方法的计算结果。在基期的时候,单豪杰法计算的资本存量只有张军法的一半大小,有着近 20 万亿的差距。但是随着时间增长,两者的差距在逐渐收敛,并最终保持相对稳定。
4.2 复杂方法
另外一种较为复杂的方法将基期前置,因为在永续盘存法下,基期选择的越早,基期资本存量估计的误差对后续年份的影响就会越小。基于此,在数据允许的情况下,部分学者会选尽可能早的时间点。例如余泳泽、李启航 (2019) 在计算 1998-2013 年的城市资本存量时,就将基期提前至 1991 年。
出于准确性考虑,我们直接使用 1952 年作为基期,并将 1952 年的资本存量换算为 2000 年价。在张军法和单豪杰法中,两位老师都将重庆合并至四川,我们也做同样处理。先将四川、重庆历年的实际投资按年份加总,并删除重庆样本。
* # 3. 资本存量计算 (复杂法)
**************************
* ## 3.1 合并四川、重庆
**********************
use "$result_data/calculate.dta", clear
inlist2 provcode, values(500000, 510000)
bys year inlist2: egen invest2 = sum(real_invest)
replace invest2 = . if inlist2 == .
bys year: fillmissing invest2
replace real_invest = invest2 if provcode == 510000
drop if provcode == 500000
drop invest2 inlist2
xtset provcode year
随后以 1952 年的资本存量作为基期,计算资本存量。同样地,张军法的折旧率取 9.6%,单豪杰法的折旧率取 10.96%。stock3 和 stock4 分别是两种方法计算而来的资本存量。
* ## 3.2 张军法
********************
gen stock3 = zj_2000 if year == 2000
replace stock3 = real_invest + stock3[_n-1] * (1- 0.096) if mi(stock3)
* ## 3.3 单豪杰法
********************
gen stock4 = shj_2000 if year == 2000
replace stock4 = real_invest + stock4[_n-1] * (1- 0.1096) if mi(stock4)
label var deflator "平减指数"
label var real_invest "实际固定资本形成总额"
label var stock3 "资本存量 (张军法, K_1为1952年)"
label var stock4 "资本存量 (单豪杰法, K_1为1952年)"
save "$result_data/capital_stock_2.dta", replace
我们将计算结果按年份进行加总,得到全国层面的资本存量,并将单位划为万亿,绘制散点图。
collapse (sum)stock3 (sum)stock4, by(year)
for var stock*: replace X = X / 10000
gen gap = stock3 - stock4
// 1952年计价的比较
tw (scatter stock3 year, c(l)) ///
(scatter stock4 year, c(l) m(T)) ///
(bar gap year, barw(0.7) yaxis(2)), ///
xlabel(2000(2)2017) xtitle("") ytitle("", axis(2)) ///
ylabel(, nogrid) ylabel(0(5)20, axis(2)) ///
legend(ring(0) rows(3) position(11) ///
order(1 "张军方法 Base1952" 2 "单豪杰方法 Base1952" 3 "资本存量差")) ///
graphregion(fcolor(white))
下图展示了两种结果的差异。可以发现,当我们将基期提前至 1952 年时,50 年后,两种方法得到的资本存量基本是一致的,差异相当小。这也表明 (在数据允许的情况下) 尽可能将基期前置确实是十分必要的。
另一方面,我们也看到,虽然两种结果的基期相似,但是随着时间的推移,差距在不断拉大,17 年之后,两者之差扩大至 10 万亿。而 2017 年北京市的资本存量才 4.6 万亿 (张军法,1952 年为基期),资本存量最丰富的山东也才 14.8 万亿。这表明资本存量对折旧率的设定相当敏感,在基期相似的情况下,即使两种方法的折旧率仅相差 1.36%,随着年份的增长,其计算结果也会呈现巨大的差异。
最后,我们将四种方法所得的计算结果放进同一张图里进行展示。Stata 默认的颜色并不算好看,我们可以进行自定义。我们将张军法的所得的两种结果设定较为鲜艳的颜色,单豪杰法的两种结果设定成较为淡雅的颜色。为避免代码过长,前面先定义一个局部宏,对颜色类型实行绝对引用。
local color1 = `"lcolor("240 59 32") mcolor("240 59 32")"'
local color2 = `"lcolor("49 163 84") mcolor("49 163 84")"'
local color3 = `"lcolor("254 178 76") mcolor("254 178 76")"'
local color4 = `"lcolor("161 217 155") mcolor("161 217 155")"'
// 四种方法比较
tw (scatter stock1 year, c(l) m(oh) `color1') ///
(scatter stock2 year, c(l) m(Th) `color2' lp(dash)) ///
(scatter stock3 year, c(l) m(Sh) `color3') ///
(scatter stock4 year, c(l) m(Dh) `color4' lp(dash)), ///
xlabel(2000(2)2017) xtitle("") ///
ylabel(, nogrid angle(0)) ///
legend(ring(0) rows(4) position(11) ///
order(1 "张军方法" 2 "单豪杰方法" 3 "张军方法 Base1952" 4 "单豪杰方法 Base1952")) ///
graphregion(fcolor(white)) plotregion(margin(left))
所得结果如下。可以发现,张军法所得的资本存量要相对高一下,这主要是由于其基期较大和折旧率较小所致。长期来看,四种方法所得结果都会趋于收敛,其中张军法的收敛速度慢一些,而单豪杰法收敛速度则相对较快。这可能是因为单豪杰法的基期相对较小,其折旧率也取得更大一些。
5. 城市资本存量
接下来,我们依循上文的思路,计算城市层面的固定资本存量。城市资本存量有两点需要注意。一是统计部门未统计城市层面的固定资本形成总额,因而我们只能退而求其次,使用当年的固定资产投资;二是缺乏城市层面的投资价格指数,依据惯例,我们使用城市所在省份的固定资产投资价格指数进行平减。
5.1 数据清洗
第一步:新建数据文件
我们先用 efolder
建立一个单独文件夹与三个子文件,用于存储原始文件、计算结果与图片。
* # 4. 城市资本存量计算
**************************
* ## 4.1 新建数据文件
********************
efolder, cd("~/Desktop/ChinaK/City") ///
sub(raw_data result_data picture)
global raw_data "~/Desktop/ChinaK/City/raw_data"
global result_data "~/Desktop/ChinaK/City/result_data"
global picture "~/Desktop/ChinaK/City/picture"
第二步:清洗城市固定资产投资数据
使用 copy
从码云下载城市层面的固定资产投资数据,该数据来源于 CSMAR。删除巢湖市,因为它在我们的计算区间内已被降级。保留 2000-2017 年样本。
* ## 4.2 城市固定资产投资数据
*******************************
cd "$raw_data"
copy "https://gitee.com/arlionn/ChinaCapitalStock/raw/master/data/CRE_Invcsct.xlsx" ///
"CRE_Invcsct.xlsx", replace
import excel "CRE_Invcsct.xlsx", firstrow clear
labone, nrow(1 2)
drop in 1/2
drop Cttyp
drop if Ctnm == "巢湖市"
rename (_all)(year city citycode provcode province invest)
destring year *code invest, replace force
keep if inrange(year, 2000, 2017)
删除观测值少于 10 的样本,观测值过少,后面插值会产生过大的偏误。xtset
后发现数据非平衡,使用 tsfill
填充为平衡面板数据,对缺失的城市名、省份名、省份行政区划码进行填充。使用 order
对变量名进行排序,利于阅读。有些字符变量过宽,不利于阅读,我们统一字符变量的宽度。
*- 整合平衡面板
bys citycode: drop if _N <= 10
xtset citycode year
tsfill, full
bys citycode: fillmissing city
bys citycode: fillmissing province
bys citycode: fillmissing provcode
xtset citycode year
order city citycode year province provcode
for var _all: cap format %15s X
随后,从各个地级市的统计年鉴、统计公报中查找当年的固定资产投资,对缺失值进行填补。
*- 缺失值处理
replace invest = 112746900 if citycode == 120000 & year == 2017
replace invest = 1322000 if citycode == 131100 & year == 2001
replace invest = 14908000 if citycode == 150100 & year == 2017
replace invest = 29587900 if citycode == 150200 & year == 2017
replace invest = 1789100 if citycode == 150300 & year == 2017
replace invest = 15069500 if citycode == 150400 & year == 2017
replace invest = 14652100 if citycode == 150500 & year == 2017
replace invest = 30657415 if citycode == 150600 & year == 2017
replace invest = 391337 if citycode == 150700 & year == 2000
replace invest = 7090600 if citycode == 150700 & year == 2017
replace invest = 289501 if citycode == 150800 & year == 2000
replace invest = 328854 if citycode == 150800 & year == 2001
replace invest = 383500 if citycode == 150800 & year == 2002
replace invest = 6502100 if citycode == 150800 & year == 2017
replace invest = 226684 if citycode == 150900 & year == 2000
replace invest = 193583 if citycode == 150900 & year == 2001
replace invest = 315700 if citycode == 150900 & year == 2002
replace invest = 5334700 if citycode == 150900 & year == 2017
replace invest = 922951 if citycode == 450800 & year == 2004
replace invest = 294600 if citycode == 451000 & year == 2000
replace invest = 71504 if citycode == 451100 & year == 2000
replace invest = 63208 if citycode == 451100 & year == 2001
replace invest = 405500 if citycode == 451200 & year == 2000
replace invest = 180100 if citycode == 451300 & year == 2000
replace invest = 80099 if citycode == 451400 & year == 2000
replace invest = 111338 if citycode == 451400 & year == 2001
replace invest = 38506000 if citycode == 520100 & year == 2017
replace invest = 16525000 if citycode == 520200 & year == 2017
replace invest = 25236200 if citycode == 520300 & year == 2017
replace invest = 7945400 if citycode == 520400 & year == 2017
replace invest = 214411 if citycode == 530600 & year == 2000
replace invest = 133224 if citycode == 530700 & year == 2001
replace invest = 125938 if citycode == 530800 & year == 2000
replace invest = 213654 if citycode == 530800 & year == 2001
replace invest = 242230 if citycode == 530900 & year == 2000
replace invest = 201661 if citycode == 530900 & year == 2001
replace invest = 25898800 if citycode == 610300 & year == 2015
replace invest = 200900 if citycode == 611000 & year == 2000
replace invest = 151765 if citycode == 620600 & year == 2000
replace invest = 183858 if citycode == 620700 & year == 2000
replace invest = 233794 if citycode == 620700 & year == 2001
replace invest = 298873 if citycode == 620800 & year == 2000
replace invest = 213968 if citycode == 620800 & year == 2001
replace invest = 239007 if citycode == 620900 & year == 2000
replace invest = 350012 if citycode == 620900 & year == 2001
replace invest = 204675 if citycode == 621000 & year == 2000
replace invest = 257512 if citycode == 621000 & year == 2001
replace invest = 152718 if citycode == 621100 & year == 2000
replace invest = 167587 if citycode == 621100 & year == 2001
replace invest = 209774 if citycode == 621100 & year == 2002
replace invest = 133458 if citycode == 621200 & year == 2000
replace invest = 143789 if citycode == 621200 & year == 2001
replace invest = 174038 if citycode == 621200 & year == 2002
replace invest = 221297 if citycode == 621200 & year == 2003
replace invest = 114000 if citycode == 640400 & year == 2001
但是仍有部分缺失值,我们使用相邻值进行填补。之所以不是有线性插值,是因为部分年份会出现插值为负的情况。插值完成之后,保存为 dta 格式。
xtset citycode year
by citycode: mipolate invest year, nearest gen(invest_mi)
replace invest = invest_mi if mi(invest)
drop invest_mi
label var invest "固定资产投资 (万元)"
save "$result_data/invest_city.dta", replace
第三步:清洗固定资产投资价格指数数据
同样地,我们导入各省固定资产投资价格指数,存为 dta 格式。
* ## 4.3 固定资产投资价格指数
*****************************
copy "https://gitee.com/arlionn/ChinaCapitalStock/raw/master/data/CRE_Pi04.xlsx" ///
"CRE_Pi04.xlsx", replace
import excel "CRE_Pi04.xlsx", firstrow clear
labone, nrow(1 2)
drop in 1/2
rename (_all)(year provcode province index)
destring year provcode index, replace force
keep if inrange(year, 2000, 2017)
xtset provcode year
tsfill, full
bys provcode: fillmissing province
xtset provcode year
save "$result_data/index_2000_2017.dta", replace
5.2 计算城市资本存量
第一步:合并数据
我们先将固定资产投资与价格指数合并,由于一个省份有多个城市,我们使用多对一合并。
* ## 4.4 计算资本存量
*****************************
*- 合并数据
use "$result_data/invest_city.dta", clear
merge m:1 provcode year using "$result_data/index_2000_2017.dta", ///
keep(1 3) nogen
第二步:平减
合并数据之后,以 2000 年为基年,计算平减指数。固定资产投资除以当年的平减指数,所得即为当年实际投资。
*- 计算实际投资
xtset citycode year
gen deflator = 1 if year == 2000
bys citycode: replace deflator = index[_n] * deflator[_n-1] / 100 if mi(deflator)
gen real_invest = invest / deflator
第三步:张军法
我们先使用张军法计算资本存量,基年资本存量为基年投资除以 10%,折旧率取 9.6%。stock1 即为张军法所得的资本存量。
*- 张军法
gen stock1 = real_invest / 0.1 if year == 2000
replace stock1 = real_invest + stock1[_n-1] * (1- 0.096) if mi(stock1)
第四步:单豪杰法
单豪杰法多一个步骤,先计算出前五年 (2001-2005 年) 的投资增长率并取平均。基期资本存量为 2001 年投资除以投资增长率与折旧率之和。折旧率取 10.96%。stock2 即为单豪杰法所得资本存量。
*- 单豪杰法
bys year: egen total_invest = sum(real_invest)
xtset citycode year
gen rate = d.total_invest / total_invest[_n-1]
egen growth = mean(rate) if inrange(year, 2001, 2005)
fillmissing growth
drop total_invest rate
gen stock2 = real_invest[_n+1] / (growth + 0.1096) if year == 2000
replace stock2 = real_invest + stock2[_n-1] * (1- 0.1096) if mi(stock2)
drop growth
label var deflator "平减指数 (2000=1)"
label var real_invest "实际固定投资 (2000不变价)"
label var stock1 "资本存量 (张军法, 单位:万元)"
label var stock2 "资本存量 (单豪杰法, 单位:万元)"
save "$result_data/capital_stock_city.dta", replace
5.3 绘图比较
我们绘图比较一下这两种方法的差异:
collapse (sum)stock1 (sum)stock2, by(year)
for var stock*: replace X = X / 100000000
gen gap = stock1 - stock2
tw (scatter stock1 year, c(l)) ///
(scatter stock2 year, c(l) m(T)) ///
(scatter gap year, m(oh) mcolor(blue) yaxis(2)), ///
xlabel(2000(2)2020) xtitle("") ytitle("", axis(2)) ///
ylabel(0(50)350, nogrid) ///
ylabel(0(3)18, axis(2)) ///
legend(ring(0) rows(3) position(5) ///
order(1 "张军方法" 2 "单豪杰方法" 3 "资本存量差")) ///
graphregion(fcolor(white))
graph export "$picture/city_easy_way.png", width(1000) replace
观察下图可以发现,张军法所得的基期资本存量几乎是单豪杰法的一倍,但随着时间推移,两者差距逐渐缩小,10 年之后差距缩至最小。随后又开始增加,这可能是由于折旧率开始发挥作用,两者的差距随时间增加进一步拉大。
6. 结语与不足
张军法和单豪杰法是目前国内计算资本存量最为常见的两种方法。我们首先使用简易方法计算了中国的资本存量,发现张军法所得的基期资本存量要明显大于单豪杰法,但随着时间推移,两者差距会逐渐缩小。随后我们将基期资本存量定位 1952 年,计算了两种方法下的资本存量。发现以 1952 年为基期时,2000 年时两种方法所得的资本存量资本一致,但随着时间的推移,两者的差距开始拉大,这可能是由于折旧率不同所导致的。
当然,本文只是探讨了四种方法所得结果的差异,并没有认为各类方法之间存在任何优劣之分。在大部分情况下,资本存量只是我们的一个中间指标,我们更多的是用它去测算各类生产率。从这个角度来看,只要所得结果趋势相同即可,毕竟其他部分会被固定效应所吸收,从理论上讲并不会影响结果的显著性。
此外,本文只是简述了资本存量计算方法中最简单的几何折旧法,实际上还存在着其他经典方法,如美国、澳大利亚等过流行的双曲线折旧法。随着统计数据的不断完善,不同地区、不同行业、乃至不同设备,也可以设置异质性的折旧率。详细内容可以阅读张翠燕学姐发表于《现代财经》上的综述性文章《资本存量 K 测算的研究再评述》。至于怎么在方法复杂性与数据精确性之间进行权衡,就你自己的研究需求与时间精力了。
7. 数据和程序下载
本文的原始数、do file 和计算结果可以通过以下链接获取:
https://gitee.com/arlionn/ChinaCapitalStock
8. 参考文献
张军, 吴桂英, 张吉鹏. 中国省际物质资本存量估算: 1952—2000[J]. 经济研究, 2004(10): 35-44. 单豪杰. 中国资本存量 K 的再估算: 1952-2006 年[J]. 数量经济技术经济研究, 2008, 25(10): 17-31. 郑世林, 杨梦俊. 中国省际无形资本存量估算:2000-2016 年[J]. 管理世界, 2020, 36(09): 67-81+110+82. 王垚, 年猛, 王春华. 产业结构、最优规模与中国城市化路径选择[J]. 经济学(季刊), 2017, 16(02): 441-462. 余泳泽, 李启航. 城市房价与全要素生产率: "挤出效应"与"筛选效应"[J]. 财贸经济, 2019, 40(01): 128-143. 张翠燕, 曹廷求. 资本存量 K 测算的研究再评述[J]. 现代财经(天津财经大学学报), 2019, 39(10): 63-75.
9. 相关推文
Note:产生如下推文列表的 Stata 命令为:
lianxh 公开数据 指标测算 波动率
安装最新版lianxh
命令:
ssc install lianxh, replace
专题:数据分享 徐现祥教授团队-IRE-公开数据:官员交流、方言指数等 专题:Stata命令 Stata波动率专题:历史波动率、预测波动率、隐含波动率 专题:数据处理 穿透财务障眼法:盈余管理指标测算及 Stata 实操
New! Stata 搜索神器:
lianxh
和songbl
GIF 动图介绍
搜: 推文、数据分享、期刊论文、重现代码 ……
👉 安装:
. ssc install lianxh
. ssc install songbl
👉 使用:
. lianxh DID 倍分法
. songbl all
🍏 关于我们
连享会 ( www.lianxh.cn,推文列表) 由中山大学连玉君老师团队创办,定期分享实证分析经验。 直通车: 👉【百度一下:连享会】即可直达连享会主页。亦可进一步添加 「知乎」,「b 站」,「面板数据」,「公开课」 等关键词细化搜索。