静粛に、只今統計勉強中

仕事でデータ分析をすることになったバリバリ文系アラフィフのおっさんが、独学で統計の勉強を始めました。

Excel VBAで raw data からジニ係数を求める関数を作ってみた

前回、ローレンツ曲線の描画とジニ係数の計算を行うマクロを作りましたが、ジニ係数の計算について、他では見かけない独特な計算方法を紹介しているサイトを見つけました。

Excelでジニ係数を計算

ジニ係数を求める数式は、ウィキペディアでは ローレンツ曲線L(F)積分を用いて
Gini=1-2\displaystyle\int_{0}^{1}L(F)dF で表される、とあります。
これは前回VBAで計算したやり方と同じです。

一方、上記のサイトでは、サンプルサイズをn、サンプルの平均をfとして
\displaystyle g=\dfrac{1}{2n^2f}\sum_{i=1}^{n}\sum_{j=1}^{n}|y_{i}-y_{j}| と定義される由。
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

シンプルですね!
作った関数を試してみると、
f:id:cyclo-commuter:20180329093644p:plain
f:id:cyclo-commuter:20180329093735p:plain
前回と同じ値になりました!(当たり前なんでしょうけども。)

 

この関数を使って、総務省統計局のウェブサイトにある家計調査のデータからジニ係数の推移を調べてみました。
f:id:cyclo-commuter:20180329094232p:plain
f:id:cyclo-commuter:20180329094336p:plain
やっぱり、上昇傾向にあるように見えます。
厚生労働省の調査でも上昇傾向は見て取れますが、値がぜんぜん違いますね。
f:id:cyclo-commuter:20180329095550p:plain
平成26年 所得再分配調査報告書 - 厚生労働省より

厚生労働省の調査では、当初所得の格差が2014年で0.5704もあります。税と社会保障の再分配によって格差は0.3759まで縮められています(時系列的な上昇も抑えられています)が、それでも統計局のデータに基づく値よりも高くなっています。統計局の調査も税込年収のはずなのに、このべらぼうな差は一体どこから来ているのでしょうか?

国は統計法という法律を盾に、個人情報を除いたものであっても raw data を絶対に表に出しませんので、この謎が解ける日は来ないでしょうね、きっと。