洛倫茨曲線和基尼系數
1905年,統計學家洛倫茨提出了洛倫茨曲線,如圖一。將社會總人口按收入由低到高的順序平均分為10個等級組,每個等級組均占10%的人口,再計算每個組的收入占總收入的比重。然后以人口累計百分比為橫軸,以收入累計百分比為縱軸,繪出一條反映居民收入分配差距狀況的曲線,即為洛倫茨曲線。
為了用指數來更好的反映社會收入分配的平等狀況,1912年,意大利經濟學家基尼根據洛倫茨曲線計算出一個反映收入分配平等程度的指標,稱為基尼系數(G)。在上圖中,基尼系數定義為:
當A為0時,基尼系數為0,表示收入分配絕對平等;當B為0時,基尼系數為1,表示收入分配絕對不平等。基尼系數在0~1之間,系數越大,表示越不均等,系數越小,表示越均等。
基尼系數的計算方法詳解
式(1)雖然是一個極為簡明的數學表達式,但它並不具有實際的可操作性。為了尋求具有可操作性的估算方法,自基尼提出基尼比率以來,許多經濟學家和統計學家都進行了這方面的探索。主要有以下四種計算方法
1.直接計算法
直接計算法在基尼提出收入不平等的一種度量時,就已經給出了具體算法,而且這種算法並不依賴於洛倫茨曲線,它直接度量收入不平等的程度。定義
式中,△是基尼平均差,∣Yj-Yi∣是任何一對收入樣本差的絕對值,n是樣本容量,u是收入均值。定義
將公式帶入后可得到基尼系數的計算方法為:
直接計算法只涉及居民收入樣本數據的算術運算,很多學者認為理論上看,只要不存在來源於樣本數據方面的誤差,就不存在產生誤差的環節。
2.擬合曲線法
擬合曲線法計算基尼系數的思路是采用數學方法擬合出洛倫茨曲線,得出曲線的函數表達式,然后用積分法求出B的面積,計算基尼系數。通常是通過設定洛倫茨曲線方程,用回歸的方法求出參數,再計算積分。例如,設定洛倫茨曲線的函數關系式為冪函數: 式(5)
根據選定的樣本數據,用回歸法求出洛倫茨曲線,例如,α=m,β=n.求積分
計算
式(7)
擬合曲線法的在兩個環節容易產生謬誤:一是擬合洛倫茨曲線,得出函數表達式的過程中,可能產生誤差;二是擬合出來的函數應該是可積的,否則就無法計算。
擬合曲線法的在兩個環節容易產生謬誤:一是擬合洛倫茨曲線,得出函數表達式的過程中,可能產生誤差;二是擬合出來的函數應該是可積的,否則就無法計算。
3.分組計算法
這種方法的思路有點類似用幾何定義計算積分的方法,在X軸上尋找n個分點,將洛倫茨曲線下方的區域分成n部分,每部分用以直代曲的方法計算面積,然后加總求出面積。分點越多,就越准確,當分點達到無窮大時,則為精確計算。
假設分為n組,每組的收入為Yi,則每個部分P的面積為:
加總得到
基尼系數案例
基尼系數計算步驟:
1、將已知樣本數據(收入數值)在EXCEL表中按照從小到大自動排序,形成第一列數據,字段名稱“收入排序”
2、第二列數據字段名稱設為“人數累計”,即從1開始逐個向下累加,每次累加1人
3、第三列數據字段名稱設為“收入累計”,使用EXCEL公式表示:
本單元格數據=上單元格數據+同行的“收入排序”單元格數據
4、第四列數據字段名稱設為“人數百分比”,用同行的“人數累計”單元格數據除以人員總數
5、第五列數據字段名稱設為“收入百分比”,用同行的“收入累計”單元格數據除以收入總數
6、第六列數據字段名稱設為“梯形面積”,以S2為例,S2=1/2*(收入百分比1+收入百分比2)*(人數百分比2-人數百分比1),按照前述的計算原理編輯公式即可,通過以上步驟,最后將“梯形面積”字段的數值累加,即為前文所述的B面積
7.用直角三角形面積(工資百分比*人數百分比)減去B面積即得A面積,則基尼系數可得。
下面是基尼系數的測試案例,具體Excle公式參看附件
使用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)
運行結果為:
計算結果為:0.370254081731