マトリョーシカ的日常

ワクワクばらまく明日のブログ。

話題のジニ係数をmatlabをつかって求める

The Great Wall of China - 無料写真検索fotoq
photo by Steve Webel

 久しぶりにmatlabネタ。

 中国のジニ係数がとんでもない異常値な件 - 木走日記

 今朝の新聞にジニ係数についての記事がありました。結構簡単な数式で求まるみたいですね。
今日はmatlabをつかってジニ係数を求めてみます。
ソースコード

%ジニ係数を求めるプログラム
%Aは一人一人の所得が格納されているベクトル。
n=length(A);
average=sum(A)/n;

A2=repmat(A,n);%Aベクトルをn行分複製する。A2はn×nの行列になる。
B=zeros(n,n);

for j=2:n-1
B(j,:)=horzcat(A(1,n-j+1:1:n),A(1,1:n-j)); % A1,A2...AnをAn,A1,...,An-1 に入れ替え。
end
B(1,:)=horzcat(A(1,n),A(1,1:n-1));
B(n,:)=A;

C=abs(B-A);
D=sum(sum(C))/n^2; %これが平均差。

gini=D/(average*2);
disp(gini);

平均差を求めるところを工夫しました。for文を多用してもできますが、Aのサイズが大きくなると計算にかなり時間がかかると思うので。(n^2回とn回の差。n=10ならその差は1024-10=1014回!)