原文链接:http://tecdat.cn/?p=20613
洛伦兹曲线来源于经济学,用于形容社会支出不平衡的景象。将支出降序排列,别离计算支出和人口的累积比例。
本文,咱们钻研支出和不平等。咱们从一些模仿数据开始
> (income=sort(income))
[1] 19246 23764 53237 61696 218835
为什么说这个样本中存在不平等?如果咱们看一下最贫困者领有的财产,最贫困的人(五分之一)领有 5%的财产;倒数五分之二领有 11%,依此类推
> income[1]/sum(income)
[1] 0.0510
> sum(income[1:2])/sum(income)
[1] 0.1140
如果咱们绘制这些值,就会失去 洛伦兹曲线
> plot(Lorenz(income))
> points(c(0:5)/5,c(0,cumsum(income)/sum(income))
当初,如果咱们失去 500 个观测值。直方图是可视化这些数据分布的办法
> summary(income)
Min. 1st Qu. Median Mean 3rd Qu. Max.
2191 23830 42750 77010 87430 2003000
> hist(log(income),
在这里,咱们应用直方图将样本可视化。但不是支出,而是支出的对数(因为某些离群值,咱们无奈在直方图上可视化)。当初,能够计算 基尼系数 以取得无关不平等的一些信息
> gini=function(x){+ mu=mean(x)
+ g=2/(n*(n-1)*mu)*sum((1:n)*sort(x))-(n+1)/(n-1)
实际上,没有任何置信区间的系数可能毫无意义。计算置信区间,咱们应用 boot 办法
> G=boot(income,gini,1000)
> hist(G,col="light blue",border="white"
红色局部是 90%置信区间,
5% 95%
0.4954235 0.5743917
还包含了一条具备高斯分布的蓝线,
> segments(quantile(G,.05),1,quantile(G,.95),1,
> lines(u,dnorm(u,mean(G),sd(G)),
另一个风行的办法是帕累托图(Pareto plot),咱们在其中绘制了累积生存函数的对数与支出的对数,
> plot(x,y)
如果点在一条直线上,则意味着能够应用帕累托散布来建模支出。
后面咱们曾经看到了如何取得洛伦兹曲线。实际上,也能够针对某些参数散布(例如,一些对数正态分布)取得 Lorenz 曲线,
> lines(Lc.lognorm,param=1.5,col="red")
> lines(Lc.lognorm,param=1.2,col="red")
> lines(Lc.lognorm,param=.8,col="red")
在这里,对数正态分布是一个很好的抉择。帕累托散布兴许不是:
> lines(Lc.pareto,param=1.2,col="red")
实际上,能够拟合一些参数散布。
shape rate
1.0812757769 0.0140404379
(0.0604530180) (0.0009868055)
当初,思考两种散布,伽马散布和对数正态分布(实用于极大似然办法)
shape rate
1.0812757769 0.0014040438
(0.0473722529) (0.0000544185)
meanlog sdlog
6.11747519 1.01091329
(0.04520942) (0.03196789)
咱们能够可视化密度
> hist(income,breaks=seq(0,2005000,by=5000),
+ col=rgb(0,0,1,.5),border="white",
+ fit_g$estimate[2])/1e2
+ fit_ln$estimate[2])/1e2
> lines(u,v_g,col="red",lwd=2)
> lines(u,v_ln,col=rgb(1,0,0,.4),lwd=2)
在这里,对数正态仿佛是一个不错的抉择。咱们还能够绘制累积散布函数
`> plot(x,y,type="s",col="black",xlim=c(0,250000))
+ fit_g$estimate[2])
+ fit_ln$estimate[2])
> lines(u,v_g,col="red",lwd=2)`
当初,思考一些更事实的状况,在这种状况下,咱们没有来自考察的样本,但对数据进行了合并,
对数据进行建模,
fit(ID=rep("Data",n),
Time difference of 2.101471 secs
for LNO fit across 1 distributions
咱们能够拟合对数正态分布(无关该办法的更多详细信息,请参见 从合并支出估算不平等 的办法)
`> y2=N/sum(N)/diff(income_binned$low)
+ fit_LN$parameters[2])
> plot(u,v,col="blue",type="l",lwd=2)
> for(i in 1:(n-1)) rect(income_binned$low[i],0,
+ income_binned$high[i],y2[i],col=rgb(1,0,0,.2),`
在此,在直方图上(因为已对数据进行分箱,因而很天然地绘制直方图),咱们能够看到拟合的对数正态分布很好。
> v <- plnorm(u,fit_LN$parameters[1],
+ fit_LN$parameters[2])
> for(i in 1:(n-1)) rect(income_binned$low[i],0,
> for(i in 1:(n-1)) rect(income_binned$low[i],
+ y1[i],income_binned$high[i],c(0,y1)[i],
对于累积散布函数,我思考了最坏的状况(每个人都处于较低的支出中)和最好的状况(每个人都具备最高可能的支出)。
也能够拟合狭义 beta 散布
GB_family(ID=rep("Fake Data",n),
为了获得最佳模型,查看
> fits[,c("gini","aic","bic")]
后果很好,接下来看下实在数据:
fit(ID=rep("US",n),
+ distribution=LNO, distName="LNO"
Time difference of 0.1855791 secs
for LNO fit across 1 distributions
同样,我尝试拟合对数正态分布
> v=dlnorm(u,fit_LN$parameters[1],
> plot(u,v,col="blue",type="l",lwd=2)
> for(i in 1:(n-1)) rect(data$low[i],
然而在这里,拟合度很差。同样,咱们能够估算狭义 beta 散布
>
GB_family(ID=rep("US",n),
+ ID_name="Country")
能够失去基尼指数,AIC 和 BIC
gini aic bic
1 4.413431 825368.5 825407.3
2 4.395080 825598.8 825627.9
3 4.451881 825495.7 825524.8
4 4.480850 825881.7 825910.8
5 4.417276 825323.6 825352.7
6 4.922122 832408.2 832427.6
7 4.341036 827065.2 827084.6
8 4.318667 826112.8 826132.2
9 NA 831054.2 831073.6
10 NA NA NA
看到最好的散布仿佛是 狭义伽玛散布。
最受欢迎的见解
1.R 语言泊松 Poisson 回归模型剖析案例
2.R 语言进行数值模仿:模仿泊松回归模型
3.r 语言泊松回归剖析
4.R 语言对布丰投针(蒲丰投针)试验进行模仿和动静可视化
5. 用 R 语言模仿混合制排队随机服务排队零碎
6.GARCH(1,1),MA 以及历史模拟法的 VaR 比拟
7.R 语言做简单金融产品的几何布朗运动的模仿
8.R 语言进行数值模仿:模仿泊松回归模型
9.R 语言对巨灾危险下的再保险合同定价钻研案例:狭义线性模型和帕累托散布 Pareto distributions