泰尔指数r语言_【数学建模】泰尔指数及分解的计算方法与Matlab实现
補充更方便使用的R語言版本:張敬信:【R語言】泰爾指數及其分解?zhuanlan.zhihu.com
前言
最近查一點泰爾指數的資料,發現無論是公式還是軟件實現,都說的特別亂,看不出所以然。
特整理了該內容,并用Matlab軟件給出了實現的代碼。
一.泰爾指數
泰爾指數(Theil index)或者泰爾熵標準(Theil’s entropy measure)泰是由泰爾(Theil,1967)利用信息理論中的熵概念來計算收入不平等而得名。
熵在信息論中被稱為平均信息量。在信息理論中,假定某事件E將以某概率p發生,而后收到一條確定消息證實該事件E的發生,則此消息所包含的信息量用公式可以表示為:
設某完備事件組由各自發生概率依次為
, 由n個事件
構成,則有
, 熵或者期望信息量等于各事件的信息量與其相應概率乘積的總和:
將信息理論中的熵指數概念用于收入差距的測度時,可將收入差距的測度解釋為將人口份額轉化為收入份額(類似于洛倫茲曲線中將人口累計百分比信息轉化為收入累計百分比)的消息所包含的信息量。而泰爾指數只是熵指數中的一個應用最廣泛的特例。泰爾指數的表達式為:
其中,
為收入差距程度的測度泰爾指數,
表示第
個體的收入,
表示所有個體的平均收入。
對于分組數據,泰爾指數有另一種表達式:
其中,
表示第
組收入占總收入的比重,
表示第
組人口數占總人口數的比重。
例1.
(I) 按公式(2)計算:
functionT=Theil2(x)%函數Theil2()計算泰爾指數, 反映收入水平的差異
%其中,x為n個個體的收入
xx=x./mean(x);
T=mean(xx.*log(xx));
主程序:
y2=[10 10 8 8 8 8 6 6 6 6 6 6 4 4 4 4 2 2];
%每個個體的收入(萬美元)
T2=Theil2(y2)
運行結果:
T2 = 0.0791
(II) 按公式(3)計算:
functionT=Theil(y,p)%函數Theil()計算泰爾指數, 反映收入水平的差異
%其中,y為各組的平均收入; p為各組包含的個體數
w=y.*p/sum(y.*p);
e=p./sum(p);
T=sum(w.*log(w./e));
主程序:
y=[10 8 6 4 2]; %各組的平均收入(萬美元)
p=[2 4 6 4 2]; %各組包含的個體數
T=Theil(y,p)
運行結果:
T = 0.0791
二. 泰爾指數分解法
泰爾指數作為收入不平等程度的測度指標具備良好的可分解性質,即將樣本分為多個群組時,泰爾指數可以分別衡量組內差距與組間差距對總差距的貢獻。假設包含
個個體的樣本被分為
個群組,每組分別為
,第
組
中的個體數目為
,則有
.
用
表示個體
的收入份額(占總收入的比例),
表示第
組的收入份額(占總收入的比例)
記
與
分別為組間差距和組內差距,則可將泰爾指數分解如下:
在上式中組間差距與組內差距分別有如下表達式:
其中,
為第k組的組內差距(k=1,...K).
進一步,可以計算第k組組內差距的貢獻率和組間差距的貢獻率:
另外,值得注意的是組內差距項分別由各組的組內差距之和構成,各組的組內差距的計算公式與樣本總體的計算公式并無二致,只是將樣本容量控制在第k組的個體數目。
例2還是例1的數據,計算組間差距與組內差距,驗證泰爾指數
function[Tb,Tw,T,z,Db,Dw]=TbTw(x,n)%函數TbTw()計算泰爾指數分解
%返回Tb為組間差距, Tw為組內差距, z為各個組內差距,
%返回T為泰爾指數, Db為組間貢獻率, Dw為各個組內貢獻率
%泰爾指數T=Tb+Tw
%x為N個個體的收入向量, 依次分為K個分組, n=[n1,...,nK]為各分組的個體數向量, sum(n)=N
K=length(n);
s=[0,cumsum(n)];
for k=1:K
X{k}=x(s(k)+1:s(k+1))./sum(x); %X{k}為第k個分組的nk個個體的收入份額(占總收入的比例)
y(k)=sum(X{k}); %y(k)為第k組的收入份額(占總收入的比例)
end
Tb=sum(y.*log(y./(n./length(x)))); %組間差距
for k=1:K
z(k)=sum((X{k}./y(k)).*log(n(k)*X{k}./y(k))); %第k組的組內差距
end
Tw=sum(y.*z); %總的組內差距為各分組組內差距的加權和
T=Tb+Tw; %泰爾指數
Db=Tb/T; %組間貢獻率
Dw=y.*z/T; %各分組內的組內貢獻率
主程序:
x=[10 10 8 8 8 8 6 6 6 6 6 6 4 4 4 4 2 2];
%每個個體的收入(萬美元)
n=[2 4 6 4 2]; %各分組的個體數
[Tb,Tw,T,z,Db,Dw]=TbTw(x,n)
運行結果:
Tb
= 0.0791
Tw
= -3.7007e-17
T
= 0.0791
z
= 1.0e-15 *
0 0
-0.1110 0 0
Db
= 1.0000
Dw
= 1.0e-15 *
0 0
-0.4680 0 0
說明:由于該例中,每個分組內各個個體的收入是相同的,故每個分組的組內差距為0,總的組內差距Tw也為0,結果中的-3.7007e-17是由于Matlab中的雙精度誤差造成的,相當于是0.
例3 修改例1中的數據,讓各分組的個體收入不相等,繼續測試上述算法。
原第1組:10、10,改為9.5、10.5
原第2組:8、8、8、8,改為7、9、7.5、8.5
原第3組:6、6、6、6、6、6改為5、7、5.5、6.5、6、6
原第4組:4、4、4、4改為3、5、3.5、4.5
原第5組:1.5、2.5
主程序:
x2=[9.5 10.5 7 9 7.5 8.5 5 7 5.5 6.5 6 6 3 5 3.5 4.5 1.5 2.5]; %每個個體的收入(萬美元)
n=[2 4 6 4 2]; %各分組的個體數
[Tb,Tw,T,z,Db,Dw]=TbTw(x2,n)
運行結果:
Tb
= 0.0791
Tw
= 0.0077
T
= 0.0868
z
= 0.0013 0.0049
0.0058 0.0197 0.0316
Db
= 0.9112
Dw
= 0.0027 0.0167
0.0223 0.0336 0.0135
作者:張敬信
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
總結
以上是生活随笔為你收集整理的泰尔指数r语言_【数学建模】泰尔指数及分解的计算方法与Matlab实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: “顶梁柱”落地青川,救助一个人,撑起一个
- 下一篇: 我用Fedora19 办公