Создание вероятности из PDF?

У меня есть некоторые данные, которые обычно распространяются и к которым я подогнал pdf. Тем не менее, я хочу получить вероятность вероятности возникновения данного значения из набора данных. Насколько я понимаю, это область корзины под pdf, где находится значение x. Есть ли функция numpy или scipy.stats для ее создания? Я смотрел, но либо я не видел этого, либо мое непонимание сдерживает меня. Пока у меня есть:

import h5py
import numpy as np
from matplotlib import pyplot as plt
import matplotlib.mlab as mlab
import scipy.stats as stats
import numpy
import math


a = 'data.h5'
f = h5py.File(a,'r')
dset = f['/DATA/DATA/']
values = dset[...,0]

Затем я могу создать гистограмму этих данных и подогнать к ней PDF:

n, bins, patches = plt.hist(values, 50, normed=1)
mu = np.mean(values)
sigma = np.std(values)

plt.plot(bins, mlab.normpdf(bins, mu, sigma))

plt.show()

И я могу получить f(x) для заданного значения x (в данном случае 0,65)

print(stats.norm.pdf(0.65, np.mean(mb1), np.std(mb1)))  

Может ли кто-нибудь помочь мне сгенерировать мою вероятность из этого?

Я прикрепил полученную гистограмму в формате pdf.

гистограмма с наложенным PDF


person Nathan Thomas    schedule 11.03.2014    source источник


Ответы (1)


В идеале вы хотели бы проинтегрировать функцию плотности вероятности в диапазоне события, для которого вы хотите получить вероятность. Вот код:

import numpy as np
import scipy.stats as ss

a = ss.norm.rvs(4, 2, 40)
hist(a, normed=True)

xs = np.linspace(0, 10, 30)
plot(xs, ss.norm.pdf(xs, 4, 2), label='pdf')
plot(xs, ss.norm.cdf(xs, 4, 2), label='cdf')

Это дает нормальное распределение с центром в значении 4 со значением сигмы 2. На рисунке ниже прослеживается pdf с красной линией и cdf с фиолетовой линией. CDF — это просто интеграл PDF от отрицательной бесконечности до значения, при котором он рассчитывается. Таким образом, чтобы получить интеграл PDF по диапазону, вам просто нужно вычесть значения cdf в двух конечных точках диапазона.

введите здесь описание изображения

Теперь вы можете спросить, какова вероятность увидеть значение от -100 до 4?

print  ss.norm.cdf(4, 4, 2) - ss.norm.cdf(-100, 4, 2)

Что приведет к ожидаемому ответу 0.5, что соответствует (почти) половине всего распределения. Итак, в вашем случае вас может заинтересовать вероятность увидеть значение от 0,60 до 0,70:

print  ss.norm.cdf(0.70, 4, 2) - ss.norm.cdf(0.60, 4, 2)

Что должно привести к небольшой вероятности:

0.00490600527511

Я должен отметить, что сама «вероятность» 0,65 не имеет смысла, поскольку у вас есть непрерывное распределение вероятностей, а точное значение 0,65 является бесконечно малой его частью, поэтому его вероятность равна 0.

person juniper-    schedule 11.03.2014