Stata连享会 主页 || 视频 || 推文 || 知乎 || Bilibili 站
温馨提示: 定期 清理浏览器缓存,可以获得最佳浏览体验。
New!
lianxh
命令发布了:
随时搜索推文、Stata 资源。安装:
. ssc install lianxh
详情参见帮助文件 (有惊喜):
. help lianxh
连享会新命令:cnssc
,ihelp
,rdbalance
,gitee
,installpkg
⛳ Stata 系列推文:
作者: 陈波 (深圳大学),张翠燕 (山东大学)
邮箱: 1900123011@email.szu.edu.cn,zcy1992yan@163.com
目录
致谢:在该文的撰写过程中,单豪杰老师无私分享自己计算的数据,深表谢意。当然,文责自负。
本文的原始数、do file 和计算结果可以通过以下链接获取:
在测算各类效率指标的时候,一个绕不开的投入性指标就是资本存量
就国内来讲,目前最流行的两种方法无疑是张军老师 2004 年发表在《经济研究》上的测算方法 (以下简称张军法),以及单豪杰老师 2008 年发表在《数量经济技术经济研究》上的测算方法 (以下简称单豪杰法)。前者引用量高达 7265 次,后者也高达 3074 次。可以说,目前国内大多数文献,都是依循上述两种方法。
由此,也衍生出一个很有意思的问题,上述两种方法计算结果的差异在哪里?两种结果的差异大么?为明晰这一问题,我们基于 2000-2017 年中国各省数据,分别使用 张军等 (2004) 和 单豪杰 (2008) 的方法计算资本存量,具体来看一下两者的差异。
首先,两位老师都是使用的永续盘存法,该方法由 Goldsmith 在 1951 年开创,是目前测算资本存量最为流行的方法。计算公式如下:
其中
观察永续盘存法的计算公式可以发现,该方法与自回归模型在形式上十分相似,其含义上也有相似之处。在永续盘存法下,基期选择的越早,基期资本存量估计的误差对后续年份的影响就会越小。因此,在条件允许的情况下,多数学者会使用 1952 年或 1978 年作为基年。张军法和单豪杰法都使用了 1952 年作为基年。
在具体处理上,张军法是用各省市 1952 年固定资本形成总额除以 10% 作为基期资本存量,公式如下:
而单豪杰法则使用了 1953 年固定资本形成总额除以折旧率
考虑折旧率就在 10% 左右,张军法的基期资本存量会明显大于单豪杰法。
折旧率的确定也是资本存量计算的一个核心问题,它直接决定了前期对后期影响的权重大小。在后面的对比中,我们也会发现,资本存量对折旧率的大小相当敏感。
理论上讲,折旧率是会随着时间变化而变化的,但是为了简化计算,我们都会对该指标取固定值,使其不随时间发生变化。其中张军法的折旧率为 9.6%,单豪杰法的折旧率为 10.96%。
查阅数据,我们发现会有三个统计指标与固定资产投资相近,分别是:固定资本形成额、固定资产投资与新增固定资产投资。国家统计局对三者的定义如下:
从定义上可以发现,在反映资本形成方面,固定资本形成额要优于固定资产投资,因此多数学者都采用固定资本形成总额作为投资
由于当年公布的数据都是名义价格,而非实际值,因此我们一般需要使用价格指数对名义量进行平减。在具体操作中,我们使用统计局公布的固定资产投资价格指数,以某一年为基期计算不变价。
由于 2017 年之后国家不再统计资本形成总额数据,而 2000 年之前的数据又存在一定缺失值,因此我们将计算区间定于 2000-2017 年,以 2000 年为基期计算不变价。
固定资本形成总额和固定资产投资价格指数来源于 CSMAR,张军老师的数据来自于其发表在《经济研究》上的文章《中国省际物质资本存量估算: 1952—2000》,该文表 2 的最后一列 (2000b) 即为 2000 年价格计算的资本存量。单豪杰老师的数据则是以邮件形式向其求取,感谢单老师对学术后进的无私帮助。
第一步:新建数据文件
为方便后续数据处理,我们先使用 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
最后,将合并文件保存,用于接下来的计算。
在实际操作中,囿于数据可得性,或者简单化的需要,部分学者在计算基期资本存量时,会直接使用第一期投资除以 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 年实际投资额除以增长率
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 万亿的差距。但是随着时间增长,两者的差距在逐渐收敛,并最终保持相对稳定。
另外一种较为复杂的方法将基期前置,因为在永续盘存法下,基期选择的越早,基期资本存量估计的误差对后续年份的影响就会越小。基于此,在数据允许的情况下,部分学者会选尽可能早的时间点。例如余泳泽、李启航 (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))
所得结果如下。可以发现,张军法所得的资本存量要相对高一下,这主要是由于其基期较大和折旧率较小所致。长期来看,四种方法所得结果都会趋于收敛,其中张军法的收敛速度慢一些,而单豪杰法收敛速度则相对较快。这可能是因为单豪杰法的基期相对较小,其折旧率也取得更大一些。
接下来,我们依循上文的思路,计算城市层面的固定资本存量。城市资本存量有两点需要注意。一是统计部门未统计城市层面的固定资本形成总额,因而我们只能退而求其次,使用当年的固定资产投资;二是缺乏城市层面的投资价格指数,依据惯例,我们使用城市所在省份的固定资产投资价格指数进行平减。
第一步:新建数据文件
我们先用 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
第一步:合并数据
我们先将固定资产投资与价格指数合并,由于一个省份有多个城市,我们使用多对一合并。
* ## 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
我们绘图比较一下这两种方法的差异:
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 年之后差距缩至最小。随后又开始增加,这可能是由于折旧率开始发挥作用,两者的差距随时间增加进一步拉大。
张军法和单豪杰法是目前国内计算资本存量最为常见的两种方法。我们首先使用简易方法计算了中国的资本存量,发现张军法所得的基期资本存量要明显大于单豪杰法,但随着时间推移,两者差距会逐渐缩小。随后我们将基期资本存量定位 1952 年,计算了两种方法下的资本存量。发现以 1952 年为基期时,2000 年时两种方法所得的资本存量资本一致,但随着时间的推移,两者的差距开始拉大,这可能是由于折旧率不同所导致的。
当然,本文只是探讨了四种方法所得结果的差异,并没有认为各类方法之间存在任何优劣之分。在大部分情况下,资本存量只是我们的一个中间指标,我们更多的是用它去测算各类生产率。从这个角度来看,只要所得结果趋势相同即可,毕竟其他部分会被固定效应所吸收,从理论上讲并不会影响结果的显著性。
此外,本文只是简述了资本存量计算方法中最简单的几何折旧法,实际上还存在着其他经典方法,如美国、澳大利亚等过流行的双曲线折旧法。随着统计数据的不断完善,不同地区、不同行业、乃至不同设备,也可以设置异质性的折旧率。详细内容可以阅读张翠燕学姐发表于《现代财经》上的综述性文章《资本存量 K 测算的研究再评述》。至于怎么在方法复杂性与数据精确性之间进行权衡,就你自己的研究需求与时间精力了。
本文的原始数、do file 和计算结果可以通过以下链接获取:
Note:产生如下推文列表的 Stata 命令为:
lianxh 公开数据 指标测算 波动率
安装最新版lianxh
命令:
ssc install lianxh, replace
免费公开课
最新课程-直播课
专题 | 嘉宾 | 直播/回看视频 |
---|---|---|
⭐ 最新专题 | 文本分析、机器学习、效率专题、生存分析等 | |
研究设计 | 连玉君 | 我的特斯拉-实证研究设计,-幻灯片- |
面板模型 | 连玉君 | 动态面板模型,-幻灯片- |
面板模型 | 连玉君 | 直击面板数据模型 [免费公开课,2小时] |
⛳ 课程主页
⛳ 课程主页
关于我们
课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法
等
连享会小程序:扫一扫,看推文,看视频……
扫码加入连享会微信群,提问交流更方便
✏ 连享会-常见问题解答:
✨ https://gitee.com/lianxh/Course/wikis
New!
lianxh
命令发布了:
随时搜索连享会推文、Stata 资源,安装命令如下:
. ssc install lianxh
使用详情参见帮助文件 (有惊喜):
. help lianxh