大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE稳定放心使用
前两天想偷个懒在网上找了好久关于求基尼系数的现成公式,结果很令人失望,于是只好奋发图强自己动手啦。
开始之前还是先脑补一些什么是基尼系数?
—————————————————————————————-
居民收入分配的差异程度,是当前人们所普遍关心的一个问题。收入分配差异的合理与否,一方面可以反映按劳分配原则的实现情况;另一方面是保障居民生活和社会稳定的重要条件。衡量收入差异状况最重要、最常用的指标是基尼系数(即吉尼系数)。
基尼系数(Gini
coefficient)是20世纪初意大利经济学家基尼根据洛伦茨曲线提出的判断分配平等程度的指标(如下图),设实际收入分配曲线和收入分配绝对平等曲线之间的面积为A,实际收入分配曲线右下方的面积为B。并以A除以(A+B)的商表示不平等程度。这个数值被称为基尼系数或称洛伦茨系数。如果A为零,基尼系数为零,表示收入分配完全平等;如果B为零则系数为1,收入分配绝对不平等。该系数可在零和1之间取任何值。收入分配越是趋向平等,洛伦茨曲线的弧度越小,基尼系数也越小,反之,收入分配越是趋向不平等,洛伦茨曲线的弧度越大,那么基尼系数也越大。
洛仑兹曲线
图中,0M为45度线,在这条线上,每10%的人得到10%的收入,表明收入分配完全平等,称为绝对平等线。OPM表明收入分配极度不平等,全部收入集中在1个人手中,称为绝对不平等线。介于二线之间的实际收入分配曲线就是洛伦茨曲线。它表明:洛伦茨曲线与绝对平等线OM越接近,收入分配越平等;与绝对不平等线OPM越接近,收入分配越不平等。
计算基尼系数,可以用收入分组数据计算,也可用分户数据计算。但要注意的是,无论分组还是分户计算,均应先对数据按收入从低到高排序,分组计算时,一般应使分组的组距相等。用分组数据计算的基尼系数要明显小于分户数据的计算值,特别是当分组的组数不多时,差距更大。用分户数据计算基尼系数时,采用的计算指标不同,也会出现不同的结果。一般有两种计算方法,一种方法是按户总收入排序,按户计算基尼系数,此时,为每户收入占总收入的比例,为调查户数的倒数;另一种计算方法是按每户家庭的人均收入排序,此时,为每户人口占全部人口的比例,为本户人均收入占人均收入之和的比例。这两种计算方法,结果是有差异的,按人均收入计算的基尼系数要大于按户收入计算的基尼数据。在用基尼系数时进行不同地区、不同时期的收入差距比较时,应注意计算方法的一致性,不同计算方法得出的基尼系数是没有可比性的。
国际上通常用基尼系数来判定收入分配均等程度。基尼系数是界于0-1之间的数值,当基尼系数为0时,表示绝对平等;基尼系数越大,不均等程度越高;当基尼系数为1时,表示绝对不平等。市场经济国家衡量收入差距的一般标准为:基尼系数在0.2以下表示绝对平均;0.2-0.3之间表示比较平均;0.3-0.4之间表示较为合理;0.4-0.5之间表示差距较大;0.5以上说明收入差距悬殊。例如:依据全国城市住户调查收入分组资料,计算出的基尼系数1978年为0.16,1988年为0.23,2000年为0.32,说明1978年我国城市居民个人收入差距不大,比较平均;1988年以后城市居民个人收入差距已经开始拉开,到2000年城市居民个人收入差距逐步拉大。
用基尼系数分析居民收入的差异,是一种比较普遍的方法。其特点:一是方法本身具有科学性,基尼系数的计算是将社会经济现象数学化了的办法,能从整体上反映居民集团内部收入分配的差异程度。二是基尼系数反映收入分配的差异程度精确、灵敏,可以反映差异程度细微的和连续的变化。三是在经济工作中可以作为一个综合经济参数纳入国家的计划管理和宏观调控之中。四是基尼系数在国际上应用广泛,便于在实际工作加强横向联系比较,学习和借鉴外地区和国外的经验。
—————————————————————————————-
如何计算基尼系数呢?过程很复杂,但是方法其实很简单
首先计算A+B的面积,结果为1/2。
其次计算B的面积。由于洛伦茨曲线是一条不规则的曲线,无法直接计算B的面积,因此采用近似梯形的面积来代替。假定全部人口平均分为n组,以累计到第i组人口总收入占全部人口总收入的比重Wi为下底,以累计到第i-1组人口总收入占全部人口总收入的比重Wi-1为上底,以每组人口占全部人口的比例即1/n为高,计算一个个小梯形的面积,并加总,即得到近似B的面积:
B = Σ[ 1/2 ×1/n
×(Wi-1
+ Wi)]
其中,i从1到n-1
最后,再将上述推导结果代入基尼系数定义式,进行推导
化简整理,即得一个简便易学易用的基尼系数计算公式:
公式中:是按收入分组后各组的人口数占总人口数的比重;是按收入分组后,各组人口所拥有的收入占收入总额的比重;是从i=1到i的累计数,如,=Y1+Y2+Y3….+Yi。
其中Wi表示从第1组累计到第i组的人口总收入占全部人口总收入的百分比。
—————————————————————————————-
总之,基尼系数其实就是用洛仑兹曲线与对角线组成图形面积与等边直角三角形面积的比。懒得自己写代码研究的同学们,下面是福利。Matlab公式源码如下,有需要的朋友可以直接copy使用啦:
function Gini=Gini_coef(NumArr)
NumArrSorted=sort([0,NumArr]);
NumArrPercent=NumArrSorted/sum(NumArrSorted);
NumArrSortedLen=length(NumArrSorted);
NumArrAcc=zeros(1,NumArrSortedLen);
for i=1:NumArrSortedLen
NumArrAcc(i)=sum(NumArrPercent(1:i));
end
x1=linspace(0,1,NumArrSortedLen);
x2=0:(1/NumArrSortedLen/10):1;
cfithandle=fit(x1′,NumArrAcc’,’smoothingspline’);
d=cfithandle(x2);
% 生产图形
% figure
% plot(x1,x1,’b-.’,x1,NumArrAcc,’*’,x2,d,’-‘)
% % plot([0,1],[0,1],x1,y,[‘-‘])
% title(‘洛伦兹曲线’)
% xlabel(‘人口百分比累计’)
% ylabel(‘收入百分比累计’)
% axis equal
% axis([0,1,0,1])
% grid on
%计算基尼系数
area1=trapz(x2,d);
area2=trapz(x1,x1);
Gini=roundn(1-area1/area2,-4);
上面代码注释部分放开可以直接生成洛仑兹曲线图形并且是已经fit过的。
我自己还另外写了一份python的,有需要的私信我吧
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/182370.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...