計量経済学の本を読んでいたら、ジニ係数の利用について記述されていたのでRで実データを使って計算してみる。
経済学の勉強でジニ係数というのは知っていたが、その利用方法としては所得の分配がどの程度平等であるかを数値で表すという理解だった。しかし実際には様々な変数に利用できる。例えば事業所の規模対従業者数のジニ係数を計算することで規模の経済が働く分野の企業が明らかになる。
ジニ係数の説明についてはこちらが詳しかった。
今回は再編が進み巨大化の一途をたどっている製薬会社についてジニ係数を計算してみる。
データはList of pharmaceutical companiesからTop49の製薬および生化学の会社を利用した。
上記ページからデータをエクセルに転記後不要なカラムを削りdata.csvを作成する。
これをrevenueに読み込む。
> revenue<-read.csv(file="data.csv", head=TRUE) > head(revenue) Company TotalRevenues 1 Pfizer[33] (with Wyeth[34]) 70,696 2 Johnson & Johnson 63,747 3 Hoffmann?La Roche 43,970 4 Novartis 41,460 5 GlaxoSmithKline 40,424 6 Sanofi-Aventis 40,328
次にジニ係数を計算するineqパッケージをインストールする。このパッケージではローレンツ曲線もプロットできる。
> install.packages("ineq")
> library(ineq)
これで準備が完了したので、実際にジニ係数を計算する。
> ineq(revenue$TotalRevenues, type="Gini") [1] 0.3265306
ジニ係数は大きくなるほど不平等、データに偏りが出てくる。今回は0.326なのでそれほど大きく不平等であるとは言えない。
ローレンツ曲線をプロットしてみる。
> plot(Lc(revenue$TotalRevenues), col="red", lwd=2)

毎度お邪魔しております。
今回の分析結果ですが,間違えているのではないでしょうか。
read.csv からの入力を revenue データフレームに代入しておられますが,もとのファイルの TotalRevenues が 3 桁ごとにカンマで区切られていますので,数値として入力されておらず,factor になっていると思います。head で最初の 6 行を書き出しておられますが,出力にカンマが含まれていると言うことは,数値として入力できていない証拠だと思います。
では,
> ineq(revenue$TotalRevenues, type=”Gini”)
[1] 0.3265306
は何を表すかと言うことですが,factor を数値演算に用いると,要素に与えられた 1 から始まる整数値の方が使われます。つまり,この場合は ineq(1:49, type=”Gini”) としたのと同じになる訳です。実際,下のように, ineq(1:49, type=”Gini”) は 0.3265306 を返します。
> ineq(1:49, type=”Gini”)
[1] 0.3265306
[…] ジニ係数にファクターと数値変換についてコメントをいただいたので調べてみた。 […]
コメントありがとうございます。gini係数の検証はまだすんでいませんが確かにread.csvの出力に問題がありました。
[…] ジニ係数について修正した。とりあえずコード。 […]