基尼系数是国际上最常用的分析国民收入分配格局的方法,度量分配的均衡性或差异程度。常用两种计算方法,一是:拟合曲线法、二是:直接计算。
我们模拟两个列数据:累计人数占比、累计收入占比。
拟合曲线法:运用实际统计数据,借助回归方法估计出模型参数,从而实现洛伦兹曲线的函数表达。
假设:洛伦兹曲线是一个幂函数曲线,即
这里我们可以用excel来拟合散点图,估计出模型:可以看出拟合的R方等于1,说明模型拟合得很好。
洛伦兹曲线的拟合模型为:
曲线拟合法,可以借助统计回归算法和计算机实现快速省力的计算,但是模型的拟合度依赖需要足够多的样本来减少误差。
直接计算法:类似积分原理基于统计数据手动公式计算,常见的方式用梯形计算法和矩形计算法。对数据进行排序后,等分成N分来计算N个梯形面积的和(积分原理)。
这里讲一下:梯形计算法。将人按照收入单调递增的顺序排列,并等分为n组
这里我们将人分为15组(每组是等分的10人),计算出了各组的收入占比,也计算了收入等级*收入占比值。
由公式可以计算出基尼系数:
由此可见,直接计算 比 模型拟合计算的精度更高,准确性也依赖样本量及分组的数量。
直接计算我们可以用python实现一键计算:
# encoding=utf-8
#每个人的收入样本数据
inconme_sample = [1,2,3,3,4,4,4,4,5,5,5,5,6,6,7,8,9,8,11,11,11,12,13,45,88,99,100,120,120,180]
def gini_test(data,n):
data.sort()
## 需要保证样本数,能够被分组N整除。
step = int(len(data)/n)
income_map_arr = {}
for i in range(n):
income_map_arr[i]=[]
for v in range(i*step,(i+1)*step):
income_map_arr[i].append(data[v])
print(income_map_arr)
dj_yb = 0 ### 等级*收入占比
for k,v in income_map_arr.items():
dj_yb=dj_yb+1.0*(k+1)*sum(v)/sum(inconme_sample)
Gini = 1.0*2/n*dj_yb-1.0*(n+1)/n
print(dj_yb,Gini)
gini_test(inconme_sample, 5)
码字不易,辛苦点赞