Объединение двух нормальных случайных величин - PullRequest
2 голосов
/ 15 декабря 2010

предположим, у меня есть следующие 2 случайные величины:

X, где среднее = 6 и stdev = 3,5
Y, где среднее = -42 и stdev = 5

Я бы хотелсоздайте новую случайную переменную Z на основе первых двух и зная, что: X происходит в 90% случаев, а Y - в 10% случаев.

Среднее значение для Z легко вычислить: 0,9 * 6+ 0,1 * -42 = 1,2

Но возможно ли генерировать случайные значения для Z в одной функции?Конечно, я мог бы сделать что-то в этом роде:

if (randIntBetween(1,10) > 1)
    GenerateRandomNormalValue(6, 3.5);
else
    GenerateRandomNormalValue(-42, 5);

Но мне бы очень хотелось иметь одну функцию, которая действовала бы как функция плотности вероятности для такой случайной величины (Z), которая не нужнанормальный.

извините за дерьмовый псевдокод

Спасибо за вашу помощь!

Edit : вот один конкретный запрос:

Допустим, мы добавляем результат 5 последовательных значений из Z. Какова вероятность того, что число будет заканчиваться числом больше 10?

Ответы [ 5 ]

4 голосов
/ 15 декабря 2010

Но мне бы очень хотелось иметь единственную функцию, которая действовала бы как функция плотности вероятности для такой случайной величины (Z), которая не является нормальной нормой.

Хорошо, есливам нужна плотность, вот она:

rho = 0.9 * density_of_x + 0.1 * density_of_y

Но вы не можете сделать выборку из этой плотности, если вы не 1) вычислите ее CDF (громоздкий, но не выполнимый) 2) инвертируйте ее (вам понадобитсячисленный решатель для этого).Или вы можете сделать выборку отклонения (или варианты, например, выборку по важности).Это дорого и громоздко, чтобы получить право.

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

2 голосов
/ 16 декабря 2010

Это форма распространения:

ListPlot[BinCounts[Table[If[RandomReal[] < .9,
    RandomReal[NormalDistribution[6, 3.5]], 
    RandomReal[NormalDistribution[-42, 5]]], {1000000}], {-60, 20, .1}], 
    PlotRange -> Full, DataRange -> {-60, 20}]

alt text

Это НЕ нормально, поскольку вы не добавляете переменные Normal, а просто выбираете одну или другую с определенной вероятностью.

1009 ** * Редактировать 1010 ** * 1011

Это кривая для добавления пяти переменных с таким распределением:

alt text

Верхний и нижний пики представляют собой одно из распределений, а средний пик учитывает смешивание.

2 голосов
/ 15 декабря 2010

Если случайная величина обозначена как x = (mean, stdev), то применяется следующая алгебра

number * x = ( number*mean, number*stdev )

x1 + x2 = ( mean1+mean2, sqrt(stdev1^2+stdev2^2) )

, поэтому для случая X = (mx, sx), Y = (my, sy) линейная комбинация равна

Z = w1*X + w2*Y = (w1*mx,w1*sx) + (w2*my,w2*sy) = 
    ( w1*mx+w2*my, sqrt( (w1*sx)^2+(w2*sy)^2 ) ) =
    ( 1.2, 3.19 )

ссылка: Обычное распределение Ищите раздел Разное, позиция 1.

PS. Извините за странную запись. Новое стандартное отклонение вычисляется по чему-то похожему на теорему Пифагора. Это квадратный корень из суммы квадратов.

0 голосов
/ 15 декабря 2010

Здесь много неизвестных, но по сути вы просто хотите добавить две (или более) функции вероятности друг к другу.

Для любой данной функции вероятности вы можете рассчитать случайное число с этой плотностью, вычислив площадь под кривой вероятности (интеграл), а затем сгенерировав случайное число между 0 и этой областью. Затем двигайтесь вдоль кривой, пока область не станет равной вашему случайному числу, и используйте его в качестве значения.

Этот процесс затем может быть обобщен на любую функцию (или сумму двух или более функций).

Разработка : Если у вас есть функция распределения f (x), которая варьируется от 0 до 1. Вы можете вычислить случайное число на основе распределения, вычислив интеграл от f (x) от 0 до 1, давая вам площадь под кривой, давайте назовите это А.

Теперь вы генерируете случайное число от 0 до A, давайте назовем это число r. Теперь вам нужно найти значение t, такое что интеграл от f (x) от 0 до t равен r. т ваше случайное число.

Этот процесс можно использовать для любой функции плотности вероятности f (x). Включая сумму двух (или более) функций плотности вероятности.

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

0 голосов
/ 15 декабря 2010

Самое простое и общеприменимое решение - смоделировать проблему:

Запустите кусочную функцию, которую у вас есть 1 000 000 (просто большое количество) раз, сгенерируйте гистограмму результатов (разбив их на ячейкии разделите количество для каждого бина на ваше N (1 000 000 в моем примере). Это оставит вас с приближением для PDF Z в каждом данном бине.

...