没有步进功能的python中的ECDF?

Rob*_*ith 2 python scipy statsmodels

我一直在使用statsmodels.distributions的ECDF(经验累积分布函数)绘制一些数据的CDF.然而,ECDF使用阶梯函数,因此我得到锯齿状的图.

在此输入图像描述

所以我的问题是:scipy或statsmodels是否有没有步进功能的ECDF烘焙?

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

hist, bin_edges = histogram(b_oz, normed=True)
plot(np.cumsum(hist))
Run Code Online (Sandbox Code Playgroud)

但我没有得到正确的尺度.

谢谢!

Jos*_*sef 9

如果您只想更改绘图,则可以让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()
Run Code Online (Sandbox Code Playgroud)

或者对原始数据和图进行排序

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

这与直接绘图相同

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

注意:根据您希望ecdf在边界处的行为以及它将如何居中的方式,对于常用的"绘制位置"有不同的标准化,例如a我添加的参数,例如a = 1是常见的选择.

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