泰尔指数深度实战:从理论到Stata,透视区域经济差异的分解艺术
如果你正在研究长三角、粤港澳大湾区或者任何一个多区域经济体,你肯定不止一次被“发展不平衡”这个问题困扰。我们能看到宏观的GDP总量,也能看到微观的城市数据,但如何精确地量化“区域内部”和“区域之间”的差距,并追踪其随时间的变化?这不仅仅是学术问题,更是政策制定和投资决策的基石。今天,我们不谈空泛的理论,直接切入一个在区域经济研究中经久不衰的利器——泰尔指数,特别是它的可分解特性。我将以江苏省苏南、苏中、苏北长达28年的面板数据为战场,带你用Stata一步步实现从数据清洗、指数计算到结果解读的全过程。你会发现,选择用GDP加权还是人口加权,得出的结论可能截然不同,而这背后的经济学直觉,才是我们真正要掌握的。
1. 泰尔指数:不止于一个数字,而是一把解剖刀
当我们谈论地区差距时,基尼系数可能是最出名的指标。但基尼系数像一张拍立得照片,它给出了不平等的瞬间快照,却难以告诉我们这张照片里的阴影部分来自哪里。泰尔指数,源于信息论中的熵概念,它的强大之处在于可分解性。简单说,它能把总体差异(比如江苏省13个地级市的经济差异)干净利落地劈成两半:一部分是区域之间的差异(比如苏南和苏北之间的差距),另一部分是区域内部的差异(比如苏南内部南京、苏州、无锡之间的差距)。
这种分解能力,让泰尔指数从单纯的“测量仪”升级为“诊断仪”。政策制定者可以清晰地看到:总体差距的扩大,究竟是源于板块之间的“马太效应”加剧了,还是板块内部出现了新的分化?这对于精准施策至关重要。
注意:泰尔指数家族有两位主要成员:T指数(GE(1))和L指数(GE(0)),或称平均对数离差。它们核心的区别在于权重的选择。T指数用经济份额(如GDP占比)加权,更关注“钱”的不平等;L指数用人口份额加权,更关注“人”的不平等。在区域分析中,这直接对应了你是从“经济产出分布”还是“人均福利分布”的视角看问题。
为了更直观地理解,我们可以看下面这个简单的对比:
| 特性维度 | 泰尔T指数 (Theil T, GE(1)) | 泰尔L指数 (平均对数离差, GE(0)) |
|---|---|---|
| 加权核心 | 以各单元的经济指标比重(如GDP份额)为权重 | 以各单元的人口比重为权重 |
| 经济学解释 | 衡量经济总量在不同单元间分布的不平等程度 | 衡量人均经济指标(如人均GDP)分布的不平等程度 |
| 敏感度 | 对高经济份额地区的变化更敏感 | 对人口大地区的变化更敏感 |
| 典型应用场景 | 分析经济总量、产业产出的空间集聚度 | 分析居民收入、人均福利的均衡性 |
在接下来的实战中,我们将主要使用泰尔T指数,因为它能更好地反映经济活动的空间分布。但请务必记住,当你换用L指数时,故事可能会是另一个版本。
2. 实战准备:理解数据与Stata环境搭建
工欲善其事,必先利其器。我们的“战场”是江苏省1990-2017年共28年的面板数据,涵盖13个地级市,并预先归类到苏南、苏中、苏北三大区域。每行数据代表一个城市在特定年份的观测值,核心变量通常包括:
city: 城市名称(如“南京市”、“苏州市”)area: 所属区域(“苏南”、“苏中”、“苏北”)year: 年份(1990-2017)gdp: 该城市的国内生产总值(单位:亿元)pop: 该城市的年末常住人口(单位:万人)
假设你的数据已经整理在一个名为jiangsu_data.xlsx的Excel文件中,工作表名是Sheet1。我们的第一步,就是干净利落地把它请进Stata。
* 清除Stata内存中的所有数据,确保一个干净的工作环境 clear all * 导入Excel数据。假设数据从第1行开始,且第1行就是变量名(英文)。 * cellrange(A1)可以省略,因为默认从A1开始。firstrow选项指明首行是变量名。 import excel "你的文件路径/jiangsu_data.xlsx", sheet("Sheet1") firstrow clear * 快速浏览一下数据结构和前几行,确保导入无误 describe list in 1/5数据导入后,一个良好的习惯是检查是否存在缺失值,并对关键变量进行初步描述性统计,建立直观印象。
* 检查gdp和pop变量是否有缺失值 misstable summarize gdp pop * 对核心变量进行描述性统计,了解数据范围 summarize gdp pop * 按区域简单查看一下GDP均值,建立初步认知 tabstat gdp, by(area) stat(mean sd) format(%12.0f)如果一切顺利,你将看到一个包含city,area,year,gdp,pop等变量的数据集,共13城市 * 28年 = 364个观测值(如果面板是平衡的)。现在,舞台已经搭好。
3. 核心计算:手把手分解泰尔指数
泰尔指数的计算本质上是加权求和。我们目标是得到三个时间序列:总泰尔指数、区域内差异贡献、区域间差异贡献。下面,我们分步拆解。
3.1 计算区域层面和全省层面的汇总数据
这是所有计算的基础。我们需要知道每一年,每个区域的GDP总和、人口总和,以及全省的GDP总和、人口总和。Stata的bysort和egen组合拳在这里大显神威。
* 第一步:生成区域级汇总数据 * bys是bysort的缩写,意为“按...分组执行” bysort area year: egen region_gdp = total(gdp) // 计算每年每个区域的GDP总和 bysort area year: egen region_pop = total(pop) // 计算每年每个区域的人口总和 * 第二步:生成省级(整体)汇总数据 bysort year: egen total_gdp = total(gdp) // 计算每年全省GDP总和 bysort year: egen total_pop = total(pop) // 计算每年全省人口总和 * 查看一下1990年的数据,验证计算是否正确 list city gdp pop region_gdp region_pop total_gdp total_pop if year==1990, sepby(area)执行完上述代码,你的数据中每个城市观测值都附带了其所属区域和全省当年的汇总值。这就像给每个士兵配发了其所属军团和整个战场的总人数、总火力信息。
3.2 计算每个区域内部的“城市间”泰尔指数
这是分解的第一步:先衡量三大区域各自内部的“不均衡度”。对于区域i在年份t,其内部泰尔指数T_i的计算公式为:
T_i = Σ_j ( (y_ij / Y_i) * ln( (y_ij / Y_i) / (p_ij / P_i) ) )
其中,j代表该区域内的城市,y_ij和p_ij是城市j的GDP和人口,Y_i和P_i是区域i的GDP和人口总和。
在Stata中,我们可以利用已经生成的汇总变量,逐行计算每个城市对区域内部指数的贡献,然后按区域-年份加总。
* 计算每个城市对其所属区域内部指数的贡献份额 gen city_share_gdp = gdp / region_gdp // 城市GDP占区域GDP份额 gen city_share_pop = pop / region_pop // 城市人口占区域人口份额 * 核心计算:贡献值 = 经济份额 * ln(经济份额/人口份额) gen city_contribution = city_share_gdp * ln(city_share_gdp / city_share_pop) * 现在,按区域和年份,将这些贡献值加总,得到每个区域每年的内部泰尔指数(T_i) bysort area year: egen T_region_internal = total(city_contribution) * 查看苏南地区1990-1992年的内部差异指数 list area year T_region_internal if area=="苏南" & inrange(year,1990,1992), sepby(year)至此,我们得到了一个关键中间变量T_region_internal,它衡量了苏南、苏中、苏北各自内部的经济发展不均衡程度。
3.3 计算总体差异的分解:区域内差异与区域间差异
现在,我们站到全省的视角。总差异的泰尔指数可以分解为两部分之和:
区域内差异 (T_within, TWR):是各区域内部差异的加权平均,权重是该区域经济占全省的比重(Y_i / Y)。T_within = Σ_i ( (Y_i / Y) * T_i )
区域间差异 (T_between, TBR):直接把三大区域视为三个“超级单元”,计算它们之间的泰尔指数。公式类似于内部指数,只是计算单元从城市变成了区域。T_between = Σ_i ( (Y_i / Y) * ln( (Y_i / Y) / (P_i / P) ) )
首先,我们需要将数据聚合到“区域-年份”层面,因为后续计算不再需要城市级细节。
* 删除城市级的中间变量,只保留区域级和省级变量,然后去重 keep area year region_gdp region_pop total_gdp total_pop T_region_internal duplicates drop // 每个区域-年份组合只保留一行现在数据变“瘦”了,每年只有3行(苏南、苏中、苏北各一行)。接下来进行全省层面的计算:
* 计算区域经济份额和人口份额 gen region_share_gdp = region_gdp / total_gdp gen region_share_pop = region_pop / total_pop * 计算区域间差异的贡献:经济份额 * ln(经济份额/人口份额) gen between_contribution = region_share_gdp * ln(region_share_gdp / region_share_pop) * 计算区域内差异的贡献:经济份额 * 区域内部指数 gen within_contribution = region_share_gdp * T_region_internal * 按年份加总,得到每年的区域间差异(TBR)和区域内差异(TWR) bysort year: egen T_between = total(between_contribution) bysort year: egen T_within = total(within_contribution) * 总泰尔指数 = 区域内差异 + 区域间差异 gen Theil_total = T_within + T_between * 最终,我们只需要每年一行数据,再次去重(保留每个年份的唯一值) keep year T_within T_between Theil_total duplicates drop现在,你的数据集中应该只剩下28行(1990-2017年),每行包含该年份的T_within,T_between,Theil_total三个核心指标。大功告成!
4. 结果可视化与深度解读:讲述数据背后的故事
计算出数字只是第一步,让数字“说话”才是关键。我们首先将结果导出,并利用Stata的绘图功能进行可视化。
* 将最终结果保存为Stata数据文件,方便后续调用 save "jiangsu_theil_decomposition.dta", replace * 导出到Excel,便于用其他软件做图或报告 export excel using "江苏泰尔指数分解结果.xlsx", firstrow(variables) replace * 在Stata中绘制趋势图 * 设定时间序列 tsset year * 绘制总泰尔指数、区域内差异、区域间差异的趋势线 twoway (line Theil_total year, lwidth(medium)) /// (line T_within year, lpattern(dash)) /// (line T_between year, lpattern(dot)), /// title("江苏省区域经济差异泰尔指数分解(1990-2017)") /// ytitle("泰尔指数值") xtitle("年份") /// legend(label(1 "总差异") label(2 "区域内差异") label(3 "区域间差异") ring(0) pos(11)) /// scheme(s1color)生成图表后,我们进入最重要的解读环节。你需要像侦探一样审视这条趋势线。通常,你会发现一些有趣的模式:
- 总体趋势是上升还是下降?这反映了江苏省区域经济差异是在扩大还是收敛。
- 区域内差异和区域间差异,谁占主导?比较
T_within和T_between的大小。如果区域内差异贡献大部分,说明问题主要出在三大板块内部(比如苏南内部核心与边缘城市的差距);如果区域间差异贡献大,则说明苏南、苏中、苏北之间的“断层”是主要矛盾。 - 转折点在哪里?关注趋势发生明显变化的年份(如2001年中国加入WTO,2008年金融危机,2010年后产业转移政策等),尝试将宏观事件与数据拐点联系起来,提出合理的假设性解释。
例如,你的图表可能显示,在2005年之前,区域间差异是总差异的主要来源,这与“苏南崛起、苏北相对滞后”的宏观印象吻合。而2005年之后,区域内差异的贡献率可能持续上升,这可能意味着即使在发达的苏南板块内部,苏州、南京与镇江、常州之间的发展动能也在分化,出现了“核心城市极化”效应。
提示:解读时一定要结合具体的权重选择。我们用的是GDP加权的T指数,结果反映的是“经济总量”分布的不平等。如果你关心“人均”层面的公平,就应该用人口加权的L指数重算一遍,对比两者结论的异同,这本身就是一项深刻的洞察。
5. 进阶探讨:权重选择的玄机与模型稳健性检验
行文至此,我们已经完成了一套标准的泰尔指数分解流程。但对于一个严谨的研究者来说,工作才刚刚开始。最核心的进阶问题就是:权重选择真的那么重要吗?
让我们动手验证一下。重新加载原始城市级数据,这次我们计算人口加权的泰尔L指数(GE(0))。流程类似,但所有加权环节的权重从(Y_i/Y)换成了(P_i/P)。
* 重新导入原始数据 use "你的原始数据.dta", clear * 计算区域和全省的人口总和(GDP总和也需要,用于计算份额) bysort area year: egen region_gdp_L = total(gdp) bysort area year: egen region_pop_L = total(pop) bysort year: egen total_gdp_L = total(gdp) bysort year: egen total_pop_L = total(pop) * 计算L指数下的区域内部差异(公式略有不同,核心是权重和log内部项) gen city_share_pop_L = pop / region_pop_L gen city_contribution_L = city_share_pop_L * ln( (gdp/pop) / (region_gdp_L/region_pop_L) ) bysort area year: egen L_region_internal = total(city_contribution_L) * 聚合到区域-年份层面并计算分解 keep area year region_gdp_L region_pop_L total_gdp_L total_pop_L L_region_internal duplicates drop gen region_share_pop_L = region_pop_L / total_pop_L gen between_contribution_L = region_share_pop_L * ln( (region_gdp_L/region_pop_L) / (total_gdp_L/total_pop_L) ) gen within_contribution_L = region_share_pop_L * L_region_internal bysort year: egen L_between = total(between_contribution_L) bysort year: egen L_within = total(within_contribution_L) gen Theil_L_total = L_within + L_between keep year L_within L_between Theil_L_total duplicates drop * 将T指数和L指数的结果合并对比 merge 1:1 year using "jiangsu_theil_decomposition.dta"合并后,你可以绘制两条总指数曲线进行对比。你可能会发现,T指数(GDP加权)的数值和波动幅度可能大于L指数(人口加权)。这是因为GDP加权更放大经济规模大的地区的影响。如果某个经济大市(如苏州)发生剧烈波动,在T指数中会得到强烈体现,而在L指数中则被其庞大的人口基数平摊了一部分。这种差异本身就富有启发性:从“产出分布”角度看的不平等,与从“人均福利”角度看的不平等,演进路径可能并不一致。
此外,还可以进行一些稳健性检验:
- 改变区域分组:不按传统的苏南苏中苏北,而是按沿江、沿海、或者经济发展水平重新聚类,看看分解结果是否稳定。
- 分析贡献率动态:计算每年
T_within / Theil_total和T_between / Theil_total的比例,观察主导力量的变迁。 - 添加控制变量:在更复杂的模型中,可以尝试将泰尔指数作为因变量,引入固定资产投资、FDI、政策虚拟变量等,做简单的时序回归,探究差异变化的驱动因素。
最后,别忘了数据本身。确保你的GDP数据是以可比价计算的,消除了价格因素影响;人口数据最好使用常住人口而非户籍人口,这在新一线城市人口大幅流入流出的背景下尤为关键。处理完这些,你的泰尔指数分析才真正具备了扎实的根基和说服力。