2013-07-29 2 views
1

мне было интересно, если кто-то может объяснить, что следующие функции в scipy.stats сделать:питона scipy.stats PDF и ожидать функции

rv_continuous.expect 
rv_continuous.pdf 

Я прочитал документацию, но я до сих пор путают.

Вот моя задача, довольно простая в теории, но я все еще смущен тем, что делают эти функции.

Итак, у меня есть список областей, значений 16383. Я хочу найти вероятность того, что переменная область примет любое значение между меньшим значением, называемым «inf», и большим значением «sup».

Итак, что я думал, что это:

scipy.stats.rv_continuous.pdf(a) #a being the list of areas 
scipy.stats.rv_continuous.expect(pdf, lb = inf, ub = sup) 

Так что я могу получить вероятность того, что любая область находится между вир и инф.

Может ли кто-нибудь помочь мне, просто объяснив, что делают функции, и какой-либо намек на то, как вычислить интеграл от f (a) между inf и sup, пожалуйста?

Благодаря

Блез

+0

Почему вы думаете, что хотите интеграл f? Вы имеете в виду pdf? – doctorlove

+0

Да, извинения за путаницу. Мне нужен интеграл функции плотности вероятности между inf и sup. –

+0

Помогает ли это? http://blogs.ubc.ca/math105/continuous-random-variables/expected-value-variance-standard-deviation/ – doctorlove

ответ

2

Функция кумулятивный плотности может дать вам то, что вы хотите. Тогда вероятность P быть между двумя значениями P(inf < area < sup) = cdf(sup) - cdf(inf)

Там есть учебник о вероятностях here и here Все они связаны между собой. PDF - это «плотность» вероятностей. Они должны быть больше нуля и суммироваться до 1. Я думаю об этом как о том, насколько вероятно что-то. Ожидание - это обобщение идеи среднего.

E[x] = sum(x.P(x)) 
3

rv_continuous является базовым классом для всех вероятностных распределений, реализуемых в scipy.stats. Вы не вызывали бы методы на rv_continuous самостоятельно.

Ваш вопрос не совсем ясен о том, что вы хотите сделать, поэтому я предполагаю, что у вас есть массив из 16383 точек данных, полученных из неизвестного распределения вероятностей. Из необработанных данных вам нужно будет оценить кумулятивное распределение, найти значения этого кумулятивного распределения по значениям sup и inf и вычесть, чтобы найти вероятность того, что значение, полученное из неизвестного распределения.

Существует множество способов оценить неизвестное распределение из данных в зависимости от того, сколько моделирования вы хотите сделать и сколько предположений вы хотите сделать. На более сложном конце спектра вы можете попытаться сопоставить одно из стандартных параметрических распределений вероятности с данными. Например, если у вас возникло подозрение, что ваши данные были логнормально распределены, вы можете использовать scipy.stats.lognorm.fit(data, floc=0), чтобы найти параметры логарифмического распределения, соответствующие вашим данным. Затем вы можете использовать scipy.stats.lognorm.cdf(sup, *params) - scipy.stats.lognorm.cdf(inf, *params) для оценки вероятности того, что значение находится между этими значениями.

В середине представлены непараметрические формы оценки распределения, такие как гистограммы и оценки плотности ядра. Например, scipy.stats.gaussian_kde(data).integrate_box_1d(inf, sup) - простой способ сделать эту оценку с использованием оценки плотности ядра Гаусса неизвестного распределения.Однако оценки плотности ядра не всегда уместны и требуют некоторой настройки для правильного выбора.

Простейшая вещь, которую вы могли бы сделать, это просто подсчитать количество точек данных, которые находятся между inf и sup, и делить на общее количество точек данных, которые у вас есть. Это работает только с большим количеством точек (что у вас есть) и с границами, которые не слишком далеко находятся в хвостах данных.