Stata:资本存量测算-张军法-单豪杰法

发布时间:2022-02-25 阅读 1834

Stata连享会   主页 || 视频 || 推文 || 知乎 || Bilibili 站

温馨提示: 定期 清理浏览器缓存,可以获得最佳浏览体验。

New! lianxh 命令发布了:
随时搜索推文、Stata 资源。安装:
. ssc install lianxh
详情参见帮助文件 (有惊喜):
. help lianxh
连享会新命令:cnssc, ihelp, rdbalance, gitee, installpkg

课程详情 https://gitee.com/lianxh/Course

课程主页 https://gitee.com/lianxh/Course

⛳ Stata 系列推文:

PDF下载 - 推文合集

作者: 陈波 (深圳大学),张翠燕 (山东大学)
邮箱: 1900123011@email.szu.edu.cnzcy1992yan@163.com


目录


致谢:在该文的撰写过程中,单豪杰老师无私分享自己计算的数据,深表谢意。当然,文责自负。

本文的原始数、do file 和计算结果可以通过以下链接获取:

1. 缘起

在测算各类效率指标的时候,一个绕不开的投入性指标就是资本存量 K 。但是,无论是统计年鉴,还是多数商业数据库,都无法直接获取这一指标,需要我们自行计算。

就国内来讲,目前最流行的两种方法无疑是张军老师 2004 年发表在《经济研究》上的测算方法 (以下简称张军法),以及单豪杰老师 2008 年发表在《数量经济技术经济研究》上的测算方法 (以下简称单豪杰法)。前者引用量高达 7265 次,后者也高达 3074 次。可以说,目前国内大多数文献,都是依循上述两种方法。

由此,也衍生出一个很有意思的问题,上述两种方法计算结果的差异在哪里?两种结果的差异大么?为明晰这一问题,我们基于 2000-2017 年中国各省数据,分别使用 张军等 (2004)单豪杰 (2008) 的方法计算资本存量,具体来看一下两者的差异。

2. 永续盘存法

首先,两位老师都是使用的永续盘存法,该方法由 Goldsmith 在 1951 年开创,是目前测算资本存量最为流行的方法。计算公式如下:

其中 K 是我们要算的资本存量,δ 是折旧率,I 是固定资产投资,P 是投资价格指数。基于上式,延伸出了四个问题,其中对前两个问题的不同处理,直接导致了两种计算方法的差异。

2.1 基期资本存量 K1 的确定

观察永续盘存法的计算公式可以发现,该方法与自回归模型在形式上十分相似,其含义上也有相似之处。在永续盘存法下,基期选择的越早,基期资本存量估计的误差对后续年份的影响就会越小。因此,在条件允许的情况下,多数学者会使用 1952 年或 1978 年作为基年。张军法和单豪杰法都使用了 1952 年作为基年。

在具体处理上,张军法是用各省市 1952 年固定资本形成总额除以 10% 作为基期资本存量,公式如下:

而单豪杰法则使用了 1953 年固定资本形成总额除以折旧率 δ 与 1953-1957 年固定资本形成总额的平均增长率之和 g,公式如下:

考虑折旧率就在 10% 左右,张军法的基期资本存量会明显大于单豪杰法。

2.2 折旧率 δ

折旧率的确定也是资本存量计算的一个核心问题,它直接决定了前期对后期影响的权重大小。在后面的对比中,我们也会发现,资本存量对折旧率的大小相当敏感。

理论上讲,折旧率是会随着时间变化而变化的,但是为了简化计算,我们都会对该指标取固定值,使其不随时间发生变化。其中张军法的折旧率为 9.6%,单豪杰法的折旧率为 10.96%。

2.3 投资 I

查阅数据,我们发现会有三个统计指标与固定资产投资相近,分别是:固定资本形成额、固定资产投资与新增固定资产投资。国家统计局对三者的定义如下:

  1. 固定资本形成额是指常住单位在一定时期内获得的固定资产减处置的固定资产的价值总额
  2. 固定资产投资又称为固定资产投资完成额,是以货币形式表现的在一 定时期内全社会建造和购买的固定资产工作量和与此有关的费用的总和
  3. 新增固定资产投资是指已经完成建造和购置过程,并已交付生产或使 用单位的固定资产的价值。

从定义上可以发现,在反映资本形成方面,固定资本形成额要优于固定资产投资,因此多数学者都采用固定资本形成总额作为投资 I。当然,在计算城市资本存量时,由于无法获取固定资本形成总额,只能退而求其次,使用固定资产投资。

2.4 投资价格指数 P

由于当年公布的数据都是名义价格,而非实际值,因此我们一般需要使用价格指数对名义量进行平减。在具体操作中,我们使用统计局公布的固定资产投资价格指数,以某一年为基期计算不变价。

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% 作为基期资本存量。

这种做法的好处显而易见,可以极大的减少工作量,丢掉 “历史包袱”。缺点是简单粗暴,直接使用基期投资的一定倍数来替代前面几十年的积累。

我们先使用这种简便方法估算一下各省资本存量。

  1. 张军法。

导入前面计算好的数据,将 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)
  1. 单豪杰法。

先计算出各年的实际投资之和,再计算出历年增长率,然后取 2001-2005 年的增长率均值作为投资增长率 g

* ## 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 年实际投资额除以增长率 g 与折旧率之和,作为基期资本存量。然后使用永续盘存法计算各年资本存量,折旧率取 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%。stock3stock4 分别是两种方法计算而来的资本存量。

* ## 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 和计算结果可以通过以下链接获取:

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

相关课程

免费公开课

最新课程-直播课

专题 嘉宾 直播/回看视频
最新专题 文本分析、机器学习、效率专题、生存分析等
研究设计 连玉君 我的特斯拉-实证研究设计-幻灯片-
面板模型 连玉君 动态面板模型-幻灯片-
面板模型 连玉君 直击面板数据模型 [免费公开课,2小时]
  • Note: 部分课程的资料,PPT 等可以前往 连享会-直播课 主页查看,下载。

课程主页

课程主页

关于我们

  • Stata连享会 由中山大学连玉君老师团队创办,定期分享实证分析经验。
  • 连享会-主页知乎专栏,700+ 推文,实证分析不再抓狂。直播间 有很多视频课程,可以随时观看。
  • 公众号关键词搜索/回复 功能已经上线。大家可以在公众号左下角点击键盘图标,输入简要关键词,以便快速呈现历史推文,获取工具软件和数据下载。常见关键词:课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法

连享会小程序:扫一扫,看推文,看视频……

扫码加入连享会微信群,提问交流更方便

✏ 连享会-常见问题解答:
https://gitee.com/lianxh/Course/wikis

New! lianxh 命令发布了:
随时搜索连享会推文、Stata 资源,安装命令如下:
. ssc install lianxh
使用详情参见帮助文件 (有惊喜):
. help lianxh