いっかくのデータサイエンティストをいく

1からプログラミングとデータサイエンスを独習したい

【経済学】ローレンツ曲線とジニ係数(R)

前回ローレンツ曲線とジニ係数をRで実装します。

今回は下のリンクからRスクリプトを拝借しました。

Rメモ

Rで実装

# Gini.index関数を作るためのソース(ローレンツ曲線を描き,ジニ係数を計算する)
Gini.index <- function( 
                              y,                # 度数ベクトル
                        main="",                # 図のタイトル(省略時は何も書かない)
                        xlab="",                # x 軸の名前(省略時は何も書かない)
                        ylab=""                 # y 軸の名前(省略時は何も書かない)
                        )                       
{
        stopifnot(y >= 0)                       # 非負データでなければならない
        n <- length(y)                          # データの個数
        y <- sort(y)                            # 小さい順に並べる
        y <- cumsum(y)                          # 累積度数をとる
        y <- c(0, y/y[n])                       # 累積相対度数(先頭に 0 を加える)
        x <- seq(0, 1, length=n+1)              # 0 ~ 1 を等間隔に区切ったベクトルを作る
        plot(x, y, type="l", col="blue",        # これを結ぶとローレンツ曲線
                main=main, xlab=xlab, ylab=ylab)
        abline(v=c(0, 1), h=c(0, 1),            # 外周と,
                coef=c(0, 1))                   # 対角線(原点を通る,傾き 1 の直線)を描く
        return(2*sum(x-y)/n)                    # ジニ係数
}

#データ
 x <- c(0, 3, 3, 5, 5, 5, 5, 7, 7, 10)

#導出
Gini.index(x, main="ローレンツ曲線", xlab="累積相対度数", ylab="累積相対所得")
#[1] 0.276

f:id:imakoto0323:20180611211555p:plain