【发布时间】:2018-09-10 18:28:28
【问题描述】:
我有一组数据值,我想获取该数据集的 CDF(累积分布函数)。
由于这是一个连续变量,我们不能使用 (How to get cumulative distribution function correctly for my data in python?) 中提到的分箱方法。所以我想出了以下方法。
import scipy.stats as st
def trapezoidal_2(ag, a, b, n):
h = np.float(b - a) / n
s = 0.0
s += ag(a)[0]/2.0
for i in range(1, n):
s += ag(a + i*h)[0]
s += ag(b)[0]/2.0
return s * h
def get_cdf(data):
a = np.array(data)
ag = st.gaussian_kde(a)
cdf = [0]
x = []
k = 0
max_data = max(data)
while (k < max_data):
x.append(k)
k = k + 1
sum_integral = 0
for i in range(1, len(x)):
sum_integral = sum_integral + (trapezoidal_2(ag, x[i - 1], x[i], 2))
cdf.append(sum_integral)
return x, cdf
这就是我使用这种方法的方式。
b = 1
data = st.pareto.rvs(b, size=10000)
data = list(data) x_cdf, y_cdf = get_cdf(data)
理想情况下,我应该在 y_cdf 列表的末尾得到一个接近 1 的值。但我得到的值接近 0.57。
这里出了什么问题?我的方法正确吗?
谢谢。
【问题讨论】:
标签: python statistics