前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >手撕-基尼系数

手撕-基尼系数

作者头像
herain
发布2022-06-21 15:53:58
5510
发布2022-06-21 15:53:58
举报
文章被收录于专栏:数据指象数据指象

基尼系数是国际上最常用的分析国民收入分配格局的方法,度量分配的均衡性或差异程度。常用两种计算方法,一是:拟合曲线法、二是:直接计算。

我们模拟两个列数据:累计人数占比、累计收入占比。

拟合曲线法:运用实际统计数据,借助回归方法估计出模型参数,从而实现洛伦兹曲线的函数表达。

假设:洛伦兹曲线是一个幂函数曲线,即

这里我们可以用excel来拟合散点图,估计出模型:可以看出拟合的R方等于1,说明模型拟合得很好。

洛伦兹曲线的拟合模型为:

曲线拟合法,可以借助统计回归算法和计算机实现快速省力的计算,但是模型的拟合度依赖需要足够多的样本来减少误差。

直接计算法:类似积分原理基于统计数据手动公式计算,常见的方式用梯形计算法和矩形计算法。对数据进行排序后,等分成N分来计算N个梯形面积的和(积分原理)。

这里讲一下:梯形计算法。将人按照收入单调递增的顺序排列,并等分为n组

这里我们将人分为15组(每组是等分的10人),计算出了各组的收入占比,也计算了收入等级*收入占比值。

由公式可以计算出基尼系数:

由此可见,直接计算 比 模型拟合计算的精度更高,准确性也依赖样本量及分组的数量。

直接计算我们可以用python实现一键计算:

代码语言:javascript
复制
# 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)

码字不易,辛苦点赞

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-05-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据指象 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档