Значение cdf в x является интегралом pdf между -inf и x, но вы вычисляете его между 0 и x. Возможно, вы предполагаете, что pdf равен 0 для x <0, но это не так: </p>
rs = np.random.RandomState(seed=52221829)
b = 1
data = st.pareto.rvs(b, size=10000, random_state=rs)
ag = st.gaussian_kde(data)
x = np.linspace(-100, 100)
plt.plot(x, ag.pdf(x))
Так что, вероятно, здесь происходит что-то не так: вы не проверяете свои предположения.
Ваш код для вычисления интеграла мучительно медленный, есть лучшие способы сделать это с помощью scipy
, но gaussian_kde
предоставляет метод integrate_box_1d
для интеграции pdf. Если вы берете интеграл из -inf, все выглядит правильно.
cdf = np.vectorize(lambda x: ag.integrate_box_1d(-np.inf, x))
plt.plot(x, cdf(x))
Интегрируя от 0 до x, вы получаете то же, что вы видите сейчас (справа от 0), но это совсем не cdf:
wrong_cdf = np.vectorize(lambda x: ag.integrate_box_1d(0, x))
plt.plot(x, wrong_cdf(x))