Dagum Gini Decomposition,Dagum基尼系数分解的python实例

1 篇文章 3 订阅
订阅专栏

背景

基尼系数(Gini index or Gini Coefficient),是国际上通用的、用以衡量一个国家内或地区内总体居民收入差距的常用指标之一。

但是其全局性的特征也意味着缺少了局部的收入(或发展等)的相对区域化的信息。在97年Camilo Dagnum介绍了一种对Gini系数进行区域化分解的方法,用以将基尼系数这个相对宏观的数值描述分解为子区域内差距、子区域间差距等相对细节的描述以及超变密度。而这样的“总体的结果由局部的影响综合而来”的过程也是符合直觉的。

因本文作者非经济学学生,故不对超变密度的意义做深究。

分解过程

基尼系数:

代码实例

由于测试输入涉及未发表数据,故暂不公开,目前仅可通过邮件索要包含人为错误信息的测试输入

'''
    Dagum Gini coefficient decomposition.

    @author:    Xian Yuehui, <xianyuehui@stu.xjtu.edu.cn>
    @date:      2022.07.10
    @licence:   GPL clause
'''

from itertools import permutations, product, combinations
from typing import Dict, List
import numpy as np

# return (Dict[year_id, Dict[subgroup_id, List[gini_coeff]], subgroup_ids_set)
def read_data(file_path: str = 'gini.txt') -> Dict[int, Dict[int, List[float]]]:
    with open(file_path, 'rt') as f:
        _ = f.readline().strip().split('\t')    # provinces
        subgroup_ids = list(map(int, f.readline().strip().split('\t')))
        data = {}
        while True:
            year_data_str = f.readline()
            if year_data_str == '':
                break
            year_data_raw = list(map(float, year_data_str.strip().split('\t')))
            year_id = int(year_data_raw[0])
            # allocate memory
            data.update({year_id: {}})
            for subgroup_id in set(subgroup_ids):
                data[year_id].update({subgroup_id: []})
            # read year data
            for idx in range(len(year_data_raw) - 1):
                subgroup_id = subgroup_ids[idx]
                data[year_id][subgroup_id].append(year_data_raw[idx + 1])

    return data, set(subgroup_ids)

# return sum of abs_diff of permuation of 2 lists
def sum_abs_product(a: List[float], b:List[float]) -> float:
    return sum([abs(item[0] - item[-1]) for item in list(product(a, b))])

# return Gini coefficient of two groups (lists)
def Gini(a: List[float], b:List[float]) -> float:
    n_a, n_b = len(a), len(b)
    avg_a, avg_b = sum(a) / n_a, sum(b) / n_b
    return sum_abs_product(a, b) / ((avg_a + avg_b) * n_a * n_b)

if __name__ == '__main__':
    result_save_path = 'dagum_gini_coef_decomp.txt'
    data, subgroup_ids = read_data()

    # for debug
    # year = list(data.keys())[0]
    # data = {year: data[year]}

    # formating
    sub_group_ids = sorted(subgroup_ids)
    G_idx_list = []
    G_idx_list.extend([(idx, idx) for idx in sub_group_ids])
    G_idx_list.extend([idxs for idxs in combinations(sub_group_ids, 2)])
    D_idx_list = [idxs for idxs in permutations(sub_group_ids, 2)]

    with open(result_save_path, 'wt') as f:
        # result file header
        # macro
        f.write('#year\tGini\tG_nb\tG_w\tG_t\tG_nb+G_w+G_t')
        f.write('\tG_nb/Gini\tG_w/Gini\tG_t/Gini')
        # micro
        for idxs in G_idx_list:
            f.write('\tG_{}_{}'.format(idxs[0], idxs[1]))
        for idxs in D_idx_list:
            f.write('\tD_{}_{}'.format(idxs[0], idxs[1]))
        f.write('\n')

        for year, year_data in data.items():
            # iteration body
            sort_list = []
            for k_j, v_j in year_data.items():
                sort_list.append((k_j, sum(v_j) / len(v_j)))
            sort_list.sort(key = lambda x: x[-1], reverse = True)
            sorted_keys = [item[0] for item in sort_list]

            year_data_list = []
            for key in sorted_keys:
                v_j = year_data[key]
                year_data_list.extend(v_j)
            
            # G: Gini
            G = Gini(year_data_list, year_data_list)
            
            # G_jh
            G_jh = {}
            for key_j, key_h in product(sorted_keys, sorted_keys):
                G_jh_temp = Gini(year_data[key_j], year_data[key_h])
                if key_j not in G_jh.keys():
                    G_jh.update({key_j: {}})
                G_jh[key_j].update({key_h: G_jh_temp})

            # P_j, S_j
            P_j, S_j = {}, {}
            Y_avg = sum(year_data_list) / len(year_data_list)
            for k_j, v_j in year_data.items():
                P_j.update({k_j: len(v_j) / len(year_data_list)})
                y_j_avg = sum(v_j) / len(v_j)
                S_j.update({k_j: P_j[k_j] * y_j_avg / Y_avg})

            # D_jh
            D_jh = {}
            for key_j in sorted_keys:
                D_jh.update({key_j: {}})
            for key_j, key_h in product(sorted_keys, sorted_keys):
                v_j, v_h = year_data[key_j], year_data[key_h]
                M_jh_tmp = np.array([item[0] - item[-1] if item[0] - item[-1] > 0 else 0 for item in list(product(v_j, v_h))]).mean()
                N_jh_tmp = np.array([item[-1] - item[0] if item[-1] - item[0] > 0 else 0 for item in list(product(v_j, v_h))]).mean()
                D_jh_tmp = (M_jh_tmp - N_jh_tmp) / (M_jh_tmp + N_jh_tmp)
                D_jh[key_j].update({key_h: D_jh_tmp})

            # G_w
            G_w = sum([G_jh[idx][idx] * P_j[idx] * S_j[idx] for idx in year_data.keys()])

            # G_nb, G_t
            G_nb, G_t = 0., 0.
            for idx in range(0, len(sorted_keys)):
                j = sorted_keys[idx]
                for h in sorted_keys[idx + 1:]:
                    G_nb += G_jh[j][h] * D_jh[j][h] * (P_j[j] * S_j[h] + P_j[h] * S_j[j])
                    G_t += G_jh[j][h] * (P_j[j] * S_j[h] + P_j[h] * S_j[j]) * (1 - D_jh[j][h])

            f.write('{}\t{}\t{}\t{}\t{}\t{}'.format(year, G, G_nb, G_w, G_t, G_nb + G_w + G_t))
            f.write('\t{}\t{}\t{}'.format(G_nb / G, G_w / G, G_t / G))
            for idxs in G_idx_list:
                f.write('\t{}'.format(G_jh[idxs[0]][idxs[1]]))
            for idxs in D_idx_list:
                f.write('\t{}'.format(D_jh[idxs[0]][idxs[1]]))
            f.write('\n')

            # for debug
            # print('{}'.format(year).center(50, '-'))
            # print('Gini: ', G)
            # print('G_nb: ', G_nb)
            # print('G_w: ', G_w)
            # print('G_t: ', G_t)
            # print('G_nb + G_w + G_t:', G_nb + G_w + G_t)

版权声明

禁止未进行原文章地址声明的文章转载。使用本文代码时请在适当位置给予感谢声明。

参考资料

1. Dagum C. A new approach to the decomposition of the Gini income inequality ratio[M]//Income Inequality, Poverty, and Economic Welfare. Physica-Verlag HD, 1998: 47-63.

利用python计算基尼系数
嘤嘤的博客
04-01 3124
代码实现 套用公式: def gini(a: int, b: int) -> float: return 1-pow(a/(a+b), 2)-pow(b/(a+b), 2) def gini_total(a: int, b: int, c: int, d: int) -> float: return (a+b)/(a+b+c+d) * gini(a, b) + (c+d)/(a+b+c+d) * gini(c, d) print(gini(13, 98)) print(g
matlab画基尼系数,Dagum基尼系数分解的MATLAB程序代码(更新)
weixin_30738065的博客
03-17 5839
很多同学在初次使用Dagum基尼系数法做研究时苦于找不到计算软件,手动计算又耗时费力。去年写论文时,参考Dagum(1997)论文中提供的算例,自己编写了一个MATLAB版的计算程序,在这里分享给大家。转载和使用请注明出处!一、Dagum基尼系数分解简介1、总体基尼系数2、子群内部基尼系数3、子群内差异对总体基尼系数的贡献4、子群h和子群j之间的基尼系数5、子群间净值差距对总体基尼系数的贡献度6、...
中国全国30省份各省地级市Dagum基尼系数+夜间灯光测算matlab+测算do(2000-2020年)
最新发布
2401_86676745的博客
08-30 331
中国全国30省份各省地级市Dagum基尼系数+夜间灯光测算matlab+测算do。平等程度的一种指标,其值范围在0到1之间,值越大,表示地区内的不平等程度越高。数据参考Dagum(1997)的方法,根据夜间灯光数据和人均GDP来计算中国各省。份和地级市的基尼系数。它可以帮助研究人员更准确地了解中国各省份和地级市的财富分配。称:中国省份、地级市Dagum基尼系数+夜间灯光测算(2000-2020年)样本范围:全国30省份省级数据(不含西藏)主要包括3个,即地区、年份、基尼系数。(2000-2020年)
使用Python计算基尼系数
热门推荐
Cyber的博客
12-19 1万+
import numpy as np def gini(data_list): '''获得列表中的gini系数''' data_length = len(data_list) total_sum = np.sum(data_list) total_gini = 0 for i in range(data_length): temp_deno...
基尼系数分解算法
09-15
计算基尼系数,通过对于基尼系数算法了解在各个计算环节
Dagum基尼系数分解工具
weixin_46103165的博客
06-30 841
Dagum基尼系数分解工具,可以一键生成所有相关参数。 见下图: 获取工具,访问网站:工具视界
dagum基尼系数分解工具
weixin_52338842的博客
07-11 3514
dagum基尼系数分解工具相比于传统的基尼系数而言,Dagum 基尼系数能够将其分解为地区内差距、地区间差距以及超变密度。Dagum基尼系数的相关计算公式如下:1、总体基尼系数:2.子群内部基尼系数3.子群之间基尼系数 4.子群内差异对总体基尼系数贡献5.子群间差异对总体基尼系数的贡献 6.超变密度的贡献 网上目前计算dagum基尼系数分解的方法,一般是matlab代码,该方法要求首先要把数据按子群划分为不同的列,同时要把列按照平均值从大到小的顺序依次排列,且每次只能计算一年的数据,有些则对分组有限制,
Dagum基尼系数分解R语言实现
shine4869的博客
04-01 4018
基于R语言的Dagum基尼系数分解
stata测Dagum基尼系数及其分解(教程和代码)
04-13
老师同学们大家好,现将stata测Dagum基尼系数及其分解给大家分享! 此资料 包括stata测Dagum基尼系数及其分解的教程和代码,并且参照文献讲的,大家一 看就会,一看就懂 参考文献:章激扬.长三角城市群创新发展空间...
2000-2020年中国省份、地级市Dagum基尼系数
05-09
利用Dagum(1997)基尼系数方法计算出基尼系数,并将基尼系数按照子群分解的方法分解为三部分:地区内差距、地区间差距和超变密度。 所需软件:stata、matlab 数据来源:乡镇夜间灯光数据、地级市灯光数据、地级市...
Dagum基尼系数matlab程序
06-02
Dagum基尼系数是一种衡量收入分配不平等的统计指标,由Pablo A. Dagum在1970年代提出。这个系数介于0和1之间,0表示完全的收入平等,每个人收入相同;1则表示最大程度的不平等,所有收入都集中在一个人手中。在经济...
基尼系数的计算与分解方法比较分析
01-31
基尼系数的计算与分解方法比较分析,赵光华,,:基尼系数的计算方法,比较有代表性的方法有直接计算法、回归曲线法、等分法和人口分组法等;基尼系数分解方法有人口分组分解
一段求解基尼系数的matlab代码
10-31
一段关于基尼系数的求解代码在matlab中运行 一段关于基尼系数的求解代码在matlab中运行
基尼系数计算程序.txt
06-18
此程序为计算基尼系数的快捷程序,内容翔实,语句简练,可供广大学生和科技工作者学习使用,当然还会有许多不足,望指正
基尼系数matlab编码
09-20
x1为累计家庭数百分比,y为累计收入百分比,替换一下,还可以画出洛伦兹曲线
stata基尼系数算法
11-27
基尼系数作为经济研究中一个重要指标,其计算用代码较为简便。这是用stata来计算基尼系数的指导说明,其中包括代码和数据。
dagum基尼系数stata实现
04-08
系数是传统基尼gini系数的升级,其可分解为组内系数、组间系数和超变密度系数, 即Dagum =组内Gw +组间Gb + 超变密度Gt。 组内Gw分别反映各地区 内部水平的差距、组间Gb反映各地区之间水平的差距,以及超变密度Gt...
dagum基尼系数分析全流程
m0_37228052的博客
12-29 5179
上表格可以看到,从组内基尼系数Gw来看,整体上,华东地区、华北地区和华南地区的组内基尼系数值较大,意味着华东地区、华北地区和华南这3个区域,他们内部各省份之间的收入不均匀现象较为严重。从上表可知:整体上看,总体基尼系数有着一定的下降趋势,但是下降趋势不明显,2012年为0.227,2021年为0.215,以及整体对比可知,收不均的主要来源为组间GB,近10年来组间贡献率值均大于60%,相对来看组内贡献率值约在12%左右。如果不放入Group项,则此时组间Gb为0,更不会有两两组别之间的PK。
基尼系数双维度分解计算工具
weixin_52338842的博客
01-19 585
今天推出的是一个基尼系数双维度分解工具,之前的基尼系数分解,要么是基不同的子群,或者基于不同的分项,但是有时候我们需要同时基于分组和分项来研究,如GDP,既需要根据区域分组研究区域差异,也需要揭示总体差异的产业来源,这时候常用的泰尔指数、Dagum基尼系数分解就不再适用了。上式表明基尼系数分解成 q 个部分,每个部分就是该指标各分项指标对于总体差异的贡献。我们这个工具特点之一,就是可以在结果中指明对应分组的名称,而非用数字代替,简洁明了。基尼系数可以用下面的公式来计算,其中,个子群,每个子群可以表示为。
Dagum基尼系数分解python实例
05-22
Dagum基尼系数分解是一种用于分析收入不平等的方法,它将总体基尼系数分解为个人贡献和组成贡献两部分。下面是一个用Python实现Dagum基尼系数分解的示例: ```python import numpy as np # 计算Dagum基尼系数分解 def dagum_gini_decomposition(data): n = len(data) mean = np.mean(data) gini_total = 0 gini_indiv = 0 for i in range(n): for j in range(n): gini_total += np.abs(data[i] - data[j]) if data[i] < mean: gini_indiv += np.abs(data[i] - data[j]) gini_indiv /= 2 * (n * np.mean(data)) gini_comp = 1 - gini_indiv return gini_total / (2 * n * np.mean(data)), gini_indiv, gini_comp # 示例数据 data = [5000, 6000, 7000, 8000, 9000, 10000] # 计算Dagum基尼系数分解 gini_total, gini_indiv, gini_comp = dagum_gini_decomposition(data) # 输出结果 print("总Gini系数: {:.4f}".format(gini_total)) print("个人贡献: {:.4f}".format(gini_indiv)) print("组成贡献: {:.4f}".format(gini_comp)) ``` 输出结果为: ``` 总Gini系数: 0.2381 个人贡献: 0.0685 组成贡献: 0.9315 ``` 其中,`gini_total`为总Gini系数,`gini_indiv`为个人贡献,`gini_comp`为组成贡献。
写文章

分类专栏

  • 计量金融 1篇
  • PAT 11篇
  • 光学工程 1篇
  • GPLT 1篇

最新评论

  • Dagum Gini Decomposition,Dagum基尼系数分解的python实例

    2201_76048201: 博主您好,给您发邮件啦,期待您的回复~

  • Dagum Gini Decomposition,Dagum基尼系数分解的python实例

    YSHsihan: 博主你好,给您发邮件啦,期待您的回复!表情包

  • Dagum Gini Decomposition,Dagum基尼系数分解的python实例

    wsxyh1071652438: 应该昨天就给你发过去了

  • Dagum Gini Decomposition,Dagum基尼系数分解的python实例

    pai__da_xing: 博主你好,给您发邮件啦,期待您的回复!

  • Dagum Gini Decomposition,Dagum基尼系数分解的python实例

    今天做数学题了吗966: 已经收到 非常感谢!

最新文章

  • PAT 甲级 1149 Dangerous Goods Packaging(25 分)
  • PAT 甲级 1151 LCA in a Binary Tree(30 分)
  • 2018年 9月份 PAT 甲级随想
2022年1篇
2018年13篇

目录

目录

评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家福建通道商场美陈销售铜川卡通玻璃钢雕塑安装绥化玻璃钢雕塑设计雕塑材料玻璃钢哪家好广州兵马俑人物玻璃钢雕塑广西园林景观玻璃钢雕塑艺术摆件顺德玻璃钢动物雕塑个旧市玻璃钢雕塑设计公司嘉兴玻璃钢雕塑哪家便宜河北玻璃钢雕塑摆件多少钱梅州品质玻璃钢雕塑黄山定制玻璃钢雕塑报价郑州多彩玻璃钢雕塑供应商上海户外商场美陈供应商合肥玻璃钢雕塑公司盐城商场圣诞美陈山东周年庆典商场美陈怎么样浙江卡通雕塑玻璃钢中高端玻璃钢雕塑厂家服务介绍玻璃钢主题雕塑价格气球商场美陈哪里不错江苏人物玻璃钢雕塑制作天水玻璃钢动物雕塑哪家好湖北个性化玻璃钢雕塑制作实用的宁夏玻璃钢雕塑青海抽象人物玻璃钢雕塑定制河南欧式玻璃钢雕塑哪家便宜中山定制玻璃钢动物雕塑玻璃钢艺术雕塑厂家订制信阳市玻璃钢雕塑香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化