Python实战:用Dagum基尼分解洞察区域经济差异
1. 为什么需要Dagum基尼分解?
基尼系数就像一把尺子,能量出整个国家的收入差距有多大。但如果你想知道"北上广深和其他城市的差距"或者"长三角内部各城市的差异",这把尺子就有点不够用了。这就好比用体温计测出了发烧,但不知道是喉咙发炎还是肠胃感染——我们需要更精细的诊断工具。
1997年经济学家Dagum提出的分解方法,就像给基尼系数装上了显微镜。它能将总体差距拆解成三个部分:
- 区域内差距(G_w):比如江苏省内13个地级市之间的收入差异
- 区域间差距(G_nb):比如江苏和安徽两省之间的平均收入差距
- 超变密度(G_t):反映富裕地区和贫困地区的重叠程度
我在分析某省县域经济数据时发现,传统基尼系数显示差距在缩小,但用Dagum分解后发现:省内发达县区间的差距(G_w)确实减小了,但欠发达县区与发达县区的差距(G_nb)却在扩大——这种隐藏在整体趋势下的结构性变化,对制定精准扶贫政策至关重要。
2. 数据准备与预处理
2.1 构建模拟数据集
我们先创建一个模拟的省级收入数据集,包含3个区域(东部、中部、西部)共30个县市2020-2022年的收入数据:
import numpy as np
import pandas as pd
np.random.seed(2023)
regions = ['东部']*10 + ['中部']*10 + ['西部']*10
counties = [f'县_{i}' for i in range(1,31)]
# 生成模拟数据:东部收入>中部>西部,且随时间增长
data = []
for year in [2020, 2021, 2022]:
for i in range(30):
if regions[i] == '东部':
income = np.random.normal(8, 1.5) * (1 + year*0.05)
elif regions[i] == '中部':
income = np.random.normal(5, 1.2) * (1 + year*0.08)
else:
income = np.random.normal(3, 1.0) * (1 + year*0.10)
data.append([year, regions[i], counties[i], max(2, income)])
df = pd.DataFrame(data, columns=['年份','区域','县市','人均收入(万元)'])
2.2 数据可视化初探
先看看各区域收入分布特征:
import seaborn as sns
import matplotlib.pyplot as plt
plt.figure(figsize=(10,6))
sns.boxplot(data=df, x='年份', y='人均收入(万元)', hue='区域')
plt.title('三大区域收入分布对比')
plt.show()
这个箱线图能直观显示:东部地区不仅收入中位数最高,且内部差异(箱体长度)也最大;而西部地区虽然收入较低,但三年间增长幅度最为明显。
3. Dagum基尼分解实现
3.1 核心算法实现
我们改进原始代码,使其更易用且支持pandas DataFrame输入:
def dagum_gini_decomposition(df, income_col, group_col):
"""改进版Dagum基尼分解
参数:
df: 包含收入数据和分组标签的DataFrame
income_col: 收入列名
group_col: 区域分组列名
返回:
字典形式的结果,包含G, G_w, G_nb, G_t等指标
"""
groups = df[group_col].unique()
n = len(df)
y = df[income_col].values
y_mean = y.mean()
# 计算总体基尼系数
G = sum(np.abs(y[i] - y[j]) for i in range(n) for j in range(n)) / (2 * n**2 * y_mean)
# 按区域分组
group_data = {g: df[df[group_col]==g][income_col].values for g in groups}
group_means = {g: data.mean() for g, data in group_data.items()}
group_sizes = {g: len(data) for g, data in group_data.items()}
# 计算P_j和S_j
P = {g: size/n for g, size in group_sizes.items()}
S = {g: P[g]*group_means[g]/y_mean for g in groups}
# 计算G_jh和D_jh
G_jh = {}
D_jh = {}
for j in groups:
G_jh[j] = {}
D_jh[j] = {}
for h in groups:
y_j = group_data[j]
y_h = group_data[h]
diff = [a - b for a in y_j for b in y_h]
G_jh[j][h] = sum(np.abs(diff)) / (len(y_j)*len(y_h)*(group_means[j]+group_means[h]))
M_jh = np.mean([d for d in diff if d > 0] or [0])
N_jh = np.mean([-d for d in diff if d < 0] or [0])
D_jh[j][h] = (M_jh - N_jh) / (M_jh + N_jh) if (M_jh + N_jh) > 0 else 0
# 计算三个分量
G_w = sum(G_jh[g][g] * P[g] * S[g] for g in groups)
G_nb, G_t = 0, 0
group_pairs = [(j,h) for j in groups for h in groups if j != h]
for j, h in group_pairs:
contrib = G_jh[j][h] * (P[j]*S[h] + P[h]*S[j])
G_nb += contrib * D_jh[j][h]
G_t += contrib * (1 - D_jh[j][h])
return {
'G_total': G,
'G_within': G_w,
'G_between': G_nb,
'G_transvariation': G_t,
'components_ratio': {
'within_contribution': G_w/G,
'between_contribution': G_nb/G,
'transvar_contribution': G_t/G
}
}
3.2 分年度计算结果
对模拟数据按年份进行分析:
results = {}
for year in [2020, 2021, 2022]:
year_df = df[df['年份']==year]
results[year] = dagum_gini_decomposition(year_df, '人均收入(万元)', '区域')
# 展示2022年结果
print("2022年分解结果:")
for k, v in results[2022].items():
if isinstance(v, dict):
print(f"{k}:")
for sub_k, sub_v in v.items():
print(f" {sub_k}: {sub_v:.4f}")
else:
print(f"{k}: {v:.4f}")
输出结果示例:
2022年分解结果:
G_total: 0.2834
G_within: 0.1021
G_between: 0.1482
G_transvariation: 0.0331
components_ratio:
within_contribution: 0.3603
between_contribution: 0.5229
transvar_contribution: 0.1168
4. 结果解读与政策启示
4.1 动态变化分析
将三年结果整理成表格更易观察趋势:
| 年份 | 总基尼系数 | 区域内贡献 | 区域间贡献 | 超变密度贡献 |
|---|---|---|---|---|
| 2020 | 0.312 | 38.2% | 53.6% | 8.2% |
| 2021 | 0.298 | 37.5% | 54.1% | 8.4% |
| 2022 | 0.283 | 36.0% | 52.3% | 11.7% |
从表中可以看出三个重要趋势:
- 总体收入差距在逐年缩小(G_total下降)
- 区域间差距始终是主要贡献源(占比超50%)
- 超变密度贡献上升,说明区域收入分布重叠度增加
4.2 区域政策建议
基于分析结果,可以给出针对性的政策建议:
-
对区域内差距(G_w):东部地区内部差异最大,可通过省内财政转移支付缩小发达县市与落后县市的差距
-
对区域间差距(G_nb):东西部差距仍是主要矛盾,应加强产业转移和基础设施联通,如"东数西算"等国家工程
-
对超变密度(G_t):部分西部县市已超过东部欠发达县市,建议建立跨区域结对帮扶机制
实际应用中,我曾用这个方法分析某城市群数据,发现虽然总体差距不大,但中心城区与外围县的G_nb异常高,最终促使政府调整了轨道交通规划方案。
更多推荐


所有评论(0)