首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在R中绘制Lorenz曲线

在R中绘制Lorenz曲线
EN

Stack Overflow用户
提问于 2016-03-28 18:19:17
回答 1查看 7.6K关注 0票数 1

我想画一个洛伦兹曲线,并计算一个基尼指数,目的是确定最受感染的20%的宿主支持多少寄生虫。

这是我的数据集:

每个宿主的寄生虫数量:

代码语言:javascript
复制
parasites = c(0,1,2,3,4,5,6,7,8,9,10)

与上述各数量寄生虫相关联的宿主数:

代码语言:javascript
复制
hosts = c(18,20,28,19,16,10,3,1,0,0,0)

要表示Lorenz曲线:

我手工计算了寄生虫和宿主的累积百分比:

代码语言:javascript
复制
cumul_parasites <- cumsum(parasites)/max(cumsum(parasites))
cumul_hosts <- cumsum(hosts)/max(cumsum(hosts))
plot(cumul_hosts, cumul_parasites, type= "l")

我还测试了函数Lc (包ineq):

代码语言:javascript
复制
Lc.p <- Lc(parasites,n=hosts)
plot(Lc.p)

为什么这两条曲线(手动和函数Lc)不同?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-07 17:17:52

这两个图是不同的,因为当你计算累积的概率(度)时,你必须用频率乘以它。

正确的解决办法是:

代码语言:javascript
复制
parasites = c(0,1,2,3,4,5,6,7,8,9,10)
hosts = c(18,20,28,19,16,10,3,1,0,0,0)
cumul_parasites <- cumsum(parasites*hosts)/max(cumsum(parasites*hosts))
cumul_hosts <- cumsum(hosts)/max(cumsum(hosts))
plot(cumul_hosts, cumul_parasites, type= "l")
lines(cumul_hosts, cumul_parasites,col = 2, lwd = 2, type = "p")
legend("topleft", c('My calc', 'LC'), col = 1:2, lty = 1, box.col = 1)

这完全符合Lc的计算。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36268402

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档