【基尼係數】基尼係數的計算方法與計算案例

洛倫茨曲線和基尼係數

1905年,統計學家洛倫茨提出了洛倫茨曲線,如圖一。將社會總人口按收入由低到高的順序平均分爲10個等級組,每一個等級組均佔10%的人口,再計算每一個組的收入佔總收入的比重。而後以人口累計百分比爲橫軸,以收入累計百分比爲縱軸,繪出一條反映居民收入分配差距情況的曲線,即爲洛倫茨曲線。 python

image

爲了用指數來更好的反映社會收入分配的平等情況,1912年,意大利經濟學家基尼根據洛倫茨曲線計算出一個反映收入分配平等程度的指標,稱爲基尼係數(G)。在上圖中,基尼係數定義爲: 算法

 Q                                                  式(1) 數組

當A爲0時,基尼係數爲0,表示收入分配絕對平等;當B爲0時,基尼係數爲1,表示收入分配絕對不平等。基尼係數在0~1之間,係數越大,表示越不均等,係數越小,表示越均等。 app

基尼係數的計算方法詳解

式(1)雖然是一個極爲簡明的數學表達式,但它並不具備實際的可操做性。爲了尋求具備可操做性的估算方法,自基尼提出基尼比率以來,許多經濟學家和統計學家都進行了這方面的探索。主要有如下四種計算方法函數

1.直接計算法測試

直接計算法在基尼提出收入不平等的一種度量時,就已經給出了具體算法,並且這種算法並不依賴於洛倫茨曲線,它直接度量收入不平等的程度。定義 spa

2                          式(2) code

式中,△是基尼平均差,∣Yj-Yi∣是任何一對收入樣本差的絕對值,n是樣本容量,u是收入均值。定義 orm

3                                 式(3) blog

將公式帶入後可獲得基尼係數的計算方法爲:

4                  式(4)

直接計算法只涉及居民收入樣本數據的算術運算,不少學者認爲理論上看,只要不存在來源於樣本數據方面的偏差,就不存在產生偏差的環節。

2.擬合曲線法

擬合曲線法計算基尼係數的思路是採用數學方法擬合出洛倫茨曲線,得出曲線的函數表達式,而後用積分法求出B的面積,計算基尼係數。一般是經過設定洛倫茨曲線方程,用迴歸的方法求出參數,再計算積分。例如,設定洛倫茨曲線的函數關係式爲冪函數:
5                                                                    式(5)

根據選定的樣本數據,用迴歸法求出洛倫茨曲線,例如,α=m,β=n.求積分

6                                           式(6)

計算

  式(7)

擬合曲線法的在兩個環節容易產生謬誤:一是擬合洛倫茨曲線,得出函數表達式的過程當中,可能產生偏差;二是擬合出來的函數應該是可積的,不然就沒法計算。

 

7    式(7)

擬合曲線法的在兩個環節容易產生謬誤:一是擬合洛倫茨曲線,得出函數表達式的過程當中,可能產生偏差;二是擬合出來的函數應該是可積的,不然就沒法計算。

3.分組計算法

這種方法的思路有點相似用幾何定義計算積分的方法,在X軸上尋找n個分點,將洛倫茨曲線下方的區域分紅n部分,每部分用以直代曲的方法計算面積,而後加總求出面積。分點越多,就越準確,當分點達到無窮大時,則爲精確計算。

image

假設分爲n組,每組的收入爲Yi,則每一個部分P的面積爲:

8                    式(8)

加總獲得

9            式(9)

詳細解答參看附件

基尼係數案例

基尼係數計算步驟:

一、將已知樣本數據(收入數值)在EXCEL表中按照從小到大自動排序,造成第一列數據,字段名稱「收入排序」

二、第二列數據字段名稱設爲「人數累計」,即從1開始逐個向下累加,每次累加1人

三、第三列數據字段名稱設爲「收入累計」,使用EXCEL公式表示:

本單元格數據=上單元格數據+同行的「收入排序」單元格數據

四、第四列數據字段名稱設爲「人數百分比」,用同行的「人數累計」單元格數據除以人員總數

五、第五列數據字段名稱設爲「收入百分比」,用同行的「收入累計」單元格數據除以收入總數

六、第六列數據字段名稱設爲「梯形面積」,以S2爲例,S2=1/2*(收入百分比1+收入百分比2)*(人數百分比2-人數百分比1),按照前述的計算原理編輯公式便可,經過以上步驟,最後將「梯形面積」字段的數值累加,即爲前文所述的B面積

7.用直角三角形面積(工資百分比*人數百分比)減去B面積即得A面積,則基尼係數可得。

 

下面是基尼係數的測試案例,具體Excle公式參看附件

image

 

使用Python代碼實現以下:

#-*- coding:utf-8 -*- #!/usr/bin/python
from scipy.integrate import odeint import numpy as np from matplotlib import pyplot as pl #解決matplotlib顯示中文亂碼問題
pl.rcParams['font.sans-serif'] = ['SimHei'] pl.rcParams['axes.unicode_minus'] = False fig, ax = pl.subplots() #計算基尼係數
def Gini(): # 計算數組累計值,從 0 開始
    wealths = [1.5, 2, 3.5, 10, 4.2, 2.1, 1.1, 2.2, 3.1, 5.1, 9.5, 9.7, 1.7, 2.3, 3.8, 1.7, 2.3, 5, 4.7, 2.3, 4.3, 12] cum_wealths = np.cumsum(sorted(np.append(wealths, 0))) # 取最後一個,也就是原數組的和
    sum_wealths = cum_wealths[-1] # 人數的累積佔比
    xarray = np.array(range(0, len(cum_wealths))) / np.float(len(cum_wealths) - 1) # 均衡收入曲線
    upper = xarray # 收入累積佔比
    yarray = cum_wealths / sum_wealths # 繪製基尼係數對應的洛倫茲曲線
 ax.plot(xarray, yarray) ax.plot(xarray, upper) ax.set_xlabel(u'人數累積佔比') ax.set_ylabel(u'收入累積佔比') pl.show() # 計算曲線下面積的通用方法
    B = np.trapz(yarray, x=xarray) # 總面積 0.5
    A = 0.5 - B G = A / (A + B) return G a=Gini() print(a)

 

運行結果爲:

Figure_1

計算結果爲:0.370254081731

相關文章
相關標籤/搜索