2

我一直在使用 statsmodels.distributions 中的 ECDF(经验累积分布函数)来绘制一些数据的 CDF。但是,ECDF 使用阶跃函数,因此我得到了锯齿状的图。

在此处输入图像描述

所以我的问题是:scipy 或 statsmodels 是否有一个没有阶跃函数的 ECDF 烘焙?

顺便说一句,我知道我可以这样做:

hist, bin_edges = histogram(b_oz, normed=True)
plot(np.cumsum(hist))

但我没有得到正确的秤。

谢谢!

4

1 回答 1

10

如果您只想更改绘图,那么您可以让 matplotlib 在观察值之间进行插值。

>>> xx = np.random.randn(nobs)
>>> ecdf = sm.distributions.ECDF(xx)
>>> plt.plot(ecdf.x, ecdf.y)
[<matplotlib.lines.Line2D object at 0x07A872D0>]
>>> plt.show()

或对原始数据进行排序并绘图

>>> xx.sort()
>>> plt.plot(xx, ecdf(xx))
[<matplotlib.lines.Line2D object at 0x07A87090>]
>>> plt.show()

这与直接绘制它相同

>>> a=0; plt.plot(xx, np.arange(1.,nobs+1)/(nobs+a))
[<matplotlib.lines.Line2D object at 0x07A87D30>]
>>> plt.show()

注意:根据您希望 ecdf 在边界处的行为方式以及居中方式,常用的“绘图位置”有不同的规范化,a例如我添加的参数 a=1 是常见的选择。

作为使用经验 cdf 的替代方法,您还可以使用插值或平滑 ecdf 或直方图,或内核密度估计。

于 2012-12-23T01:00:57.783 回答