一维数据可视化:累积分布函数(Cumulative Distribution Function)

转自:http://www.lifelaf.com/blog/?p=746

对于一维数据的可视化,直方图(Histogram)核密度估计(Kernel Density Estimates)可以很好的表示各个数据值的概率分布,但在表示数据累积分布上这两种方法就无能为力了。数据的累积分布,也即小于等于当前数据值的所有数据的概率分布,对于表示数据点在某个区间内出现的概率有很大的帮助。从数学上来说,累积分布函数(Cumulative Distribution Function, 简称CDF)是概率分布函数的积分;而在绘制累积分布函数的时候,由于真实的概率分布函数未知,因此往往定义为直方图分布的积分:
cdf_histo_relation

累积分布函数(CDF)的使用

以-4到4之间分布的10000个数据点为例,绘制成直方图与核密度估计是这样的:
10000data_histo
10000data_kde

这两张图可以很好的表示-4到4之间任意数据值的概率大小,但是在回答下面几个问题的时候就比较困难了:

  1. 所有大于2的数据点在总数据集中所占比例约有多大?
  2. 所有大于1.3而小于2的数据点在总数据集中所占比例是多少?

在上述例子中,数据集大致遵循正态分布,因此从直方图或核密度估计的结果中推测这两个问题的答案还是可能的;但是对于不规则的概率分布曲线来说,这样做就基本上行不通了。回答上述问题的通用方法是绘制累积分布函数图:
10000data_cdf
根据这张累积分布函数图,可以很方便地回答之前的两个问题:

  1. CDF中横轴上的2对应的Y值约为0.98,因此所有大于2的数据点所占比例约为2%。
  2. CDF中横轴上的1.3对应的Y值约为0.75,因此所有介于1.3和2之间的数据点所占比例约为23% (0.98-0.75)。

与直方图、核密度估计相比,累积分布函数存在以下几个特点:

  • 累积分布函数是X轴单调递增函数。
  • 累积分布函数更加平滑,图像中噪音更小。
  • 累积分布函数没有引入带宽等外部概念,因此不会丢失任何数据信息。对于给定的数据集,累积分布函数是唯一的。
  • 累积分布函数一般都经过归一化处理,单调递增且趋近于1。

R中累积分布函数(CDF)的实现

在R中,累积分布函数的绘制是通过ecdf()函数来实现的。对于任何数据分布,累积分布函数都是概率分布函数的积分;因为真实的概率分布函数未知,所以真实的累积分布函数也就无法从数据样本中精确推导出来了。ecdf()函数中的e代表Empirical,意思是根据观察值而来的,也即具体描绘出来的CDF曲线是根据各个数据点的加和而得到的。

直方图(Histogram)文章中近200个点的CPU使用率数据为例,用R绘制CDF的语句为:

cpu <- scan("cpu_data.txt")
plot(ecdf(cpu))

其结果为:
cpu_data_cdf
可以看到,累积分布函数图很好的表示了各个区间内数据分布的概率。美中不足的是,上面的图像中数据点过大,各数据点间也没有进行连接,因此在视觉效果上与“曲线”相差甚远。为了美化累积分布函数图,可以在plot()函数的调用过程中设定参数:

cpu <- scan("cpu_data.txt")
plot(ecdf(cpu), do.points=FALSE, verticals=TRUE)

从而得到更加自然的结果:
cpu_data_cdf_verticals

如果需要用平滑曲线来拟合累积分布函数,从而作出更加漂亮的图的话,可以使用sROC包中的kCDF()函数:

//安装sROC包
install.packages("sROC")
//加载sROC包
library(sROC)
plot(kCDF(cpu))

结果如下:
kCDF
上图中,中间的黑色加粗曲线是拟合的累积分布函数,而浅灰色的区域则是置信区间。

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值