Excel VBAで raw data からジニ係数を求める関数を作ってみた
前回、ローレンツ曲線の描画とジニ係数の計算を行うマクロを作りましたが、ジニ係数の計算について、他では見かけない独特な計算方法を紹介しているサイトを見つけました。
ジニ係数を求める数式は、ウィキペディアでは ローレンツ曲線の積分を用いて
で表される、とあります。
これは前回VBAで計算したやり方と同じです。
一方、上記のサイトでは、サンプルサイズを、サンプルの平均をとして
と定義される由。
raw data 限定ですが、計算のプロセスがぐっとシンプルになってて、そそられますね。
というわけで、さっそく実装してみました。
'ジニ係数を求める
Function Gini(参照)
Dim i, j, n, f, S
If 参照.Columns.Count = 1 Then
n = 参照.Rows.Count
f = Application.WorksheetFunction.Average(参照)
For i = 1 To n
For j = 1 To n
S = S + Abs(参照(i) - 参照(j))
Next
Next
Gini = S / (2 * n ^ 2 * f)
Else
Gini = CVErr(xlErrNA)
End If
End Function
シンプルですね!
作った関数を試してみると、
前回と同じ値になりました!(当たり前なんでしょうけども。)
この関数を使って、総務省統計局のウェブサイトにある家計調査のデータからジニ係数の推移を調べてみました。
やっぱり、上昇傾向にあるように見えます。
厚生労働省の調査でも上昇傾向は見て取れますが、値がぜんぜん違いますね。
平成26年 所得再分配調査報告書 - 厚生労働省より
厚生労働省の調査では、当初所得の格差が2014年で0.5704もあります。税と社会保障の再分配によって格差は0.3759まで縮められています(時系列的な上昇も抑えられています)が、それでも統計局のデータに基づく値よりも高くなっています。統計局の調査も税込年収のはずなのに、このべらぼうな差は一体どこから来ているのでしょうか?
国は統計法という法律を盾に、個人情報を除いたものであっても raw data を絶対に表に出しませんので、この謎が解ける日は来ないでしょうね、きっと。