Scipy - метод обратной выборки из пользовательской функции плотности вероятности - PullRequest
3 голосов
/ 30 ноября 2011

Я пытаюсь выполнить обратную выборку из пользовательской функции плотности вероятности (PDF). Мне просто интересно, возможно ли это вообще, то есть интегрировать PDF, инвертировать результат и затем решить его для заданного равномерного числа. PDF имеет форму f (x, альфа, среднее (x)) = (1 / гамма (альфа + 1) (x)) ((x * (альфа + 1) / среднее (x)) ^ (альфа + 1 )) exp (- (alpha + 1) * (x / mean (x)), где x> 0. Из фигуры актуальны только значения до 150, и для чего я пытаюсь сделать значения до 80 достаточно хорошо. Расширение диапазона не должно быть слишком сложным.

Я пытался сделать метод инверсии, но нашел только численный способ сделать интеграл, который не обязательно полезен, учитывая, что мне нужно инвертировать функцию для решения:

u = интеграл (f (x, alpha, среднее (x)) dx) от 0 до y, где y неизвестен, а u - равномерная случайная величина между 0 и 1.

Интеграл имеет гамма-функцию и неполную гамма-функцию, поэтому попытка инвертировать его - своего рода беспорядок. Любая помощь приветствуется.

Заранее большое спасибо.

Приветствия

1 Ответ

4 голосов
/ 30 ноября 2011

Если вы имеете в виду, что вы пытаетесь случайным образом выбрать значения, которые будут распределены в соответствии с вашим PDF, тогда да, это возможно.Это описано в Википедии как выборка обратного преобразования .По сути, это именно то, что вы сказали: интегрируйте PDF для создания кумулятивного распределения (CDF), инвертируйте его (что можно сделать заранее), а затем выберите случайное число и пропустите его через инвертированный CDF.

Если ваш домен имеет значение от 0 до положительной бесконечности, ваш дистрибутив, по-видимому, соответствует гамма-распределению , встроенному в Numpy и Scipy, с theta = 1/alpha и k = alpha+1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...