Как мне сложить и вычесть вероятностные распределения как реальные числа? - PullRequest
9 голосов
/ 08 июня 2011

Я хотел бы получить ваш совет: не могли бы вы порекомендовать библиотеку, которая позволяет вам добавлять / вычитать / умножать / делить PDF-файлы (вероятностные функции плотности) как действительные числа?

За кулисами, чтобы получить результат, нужно было бы провести Монте-Карло, поэтому я бы предпочел что-то быстрое и эффективное, которое может использовать любой графический процессор в системе.

Обновление:

Это код C #, который я ищу:

  var a = new Normal(0.0, 1.0); // Creates a PDF with mean=0, std. dev=1.0.
  var b = new Normal(0.0, 2.0); // Creates a PDF with mean=0, std. dev=2.0.
  var x = a + b; // Creates a PDF which is the sum of a and b.
                 // i.e. perform a Monte Carlo by taking thousands of samples 
                 // of a and b to construct the resultant PDF.

Обновление:

То, что я ищу, - это метод реализации алгебры «вероятностных форм» в Недостаток средних Сэма Сэвиджа. Видео Моделирование Монте-Карло в Matlab объясняет эффект, который я хочу - библиотека для выполнения математических вычислений в серии входных распределений.

Обновление:

При поиске следующего будет получена информация о соответствующих библиотеках:

  • "Библиотека Монте-Карло"
  • "Монте-Карло C ++"
  • "Монте-Карло Матлаб"
  • "Монте-Карло .NET"

Ответы [ 3 ]

2 голосов
/ 08 июня 2011

Комплект @ Risk Developer позволяет начать с набора функций плотности вероятности, а затем выполнить алгебру на входах для получения некоторого результата, т. Е. P = A + B.

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

  • "имитационная модель Монте-Карло C ++"
  • "Монте-Карлоимитационная модель .NET "
  • " Инструментарий анализа рисков "
  • " Распределение возможностей фитинга ".

Не так уж сложно написать код на таком языкекак C ++ или .NET.Часть Монте-Карло, вероятно, содержит всего около 50 строк кода:

  • Прочитайте « Недостаток средних значений» »Сэма Сэвиджа, чтобы понять, как можно использовать алгебру в« формах вероятности ».
  • Есть какой-то метод генерации "формы вероятности", либо путем начальной загрузки из некоторых выборочных данных, либо из заранее определенной функции плотности вероятности, либо с использованием библиотеки вероятностей Math.NET .
  • Возьмите 10000 выборок из входных вероятностных фигур.
  • Выполните алгебру на выборках, то есть +, -, /, * и т. Д., Чтобы получить 1000 выходных данных.Вы также можете сформировать дерево вероятностей, которое подразумевает и, или, и т. Д. На входах.
  • Объедините эти 10000 выходов в новую «форму вероятности», поместив результаты в 100 дискретных «сегментов».
  • Теперь, когда у нас есть новая «форма вероятности», мы можем использовать ее в качестве входных данных для нового дерева вероятностей или выполнить интегрирование для получения области, которая преобразует ее обратно в число с твердой вероятностью при некотором пороговом значении.
  • Видео Моделирование Монте-Карло в Matlab объясняет весь этот процесс гораздо лучше, чем я.
1 голос
/ 08 июня 2011

@ Gravitas - Исходя из этого обмена с @ user207442, звучит так, будто вы просто хотите, чтобы объект абстрагировался от свертки для сложения и вычитания.Конечно, существует решение в виде замкнутой формы для произведения двух случайных величин, но оно может зависеть от распределения.

Горячая новая сводная сестра C #, F #, давайте немного поработаем с техникой FP, и она легко интегрируется с C #.Ваша цель абстрагировать тип «случайной величины», который может быть «суммирован» (свернут) или «умножен» (??), кажется, что он кричит для монады .Вот простой пример .

Редактировать: вам нужно заново изобрести mcmc в c #?мы используем winbugs для этого в моей школе ... это библиотека win ++ c ++ использует: http://darwin.eeb.uconn.edu/mcmc++/mcmc++.html. вместо того, чтобы заново изобретать колесо, не могли бы вы просто обернуть свой код в c ++ (опять же, кажется, что монады будут в рукахздесь)

0 голосов
/ 08 июня 2011

Взгляните на библиотеку Math.NET Numerics. Здесь - страница, относящаяся к поддержке распределения вероятностей.

...