Генерация гауссовского распределения только с положительными числами

Есть ли способ случайного генерации набора положительных чисел, чтобы они имели желаемое среднее и стандартное отклонение?

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

EDIT: В ответах была некоторая путаница, поэтому я попытаюсь уточнить.

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

Алгоритм, который я ищу, не обязательно должен быть гауссовским (судя по комментариям, это, вероятно, не должно быть) и не обязательно быть идеальным. Не имеет значения, имеет ли результирующий набор чисел несколько другое среднее/стандартное отклонение - я просто хочу что-то, что обычно будет на стадионе.

Ответ 1

Вы можете искать лог-нормальное распределение, как предположил Дэвид Норман, или, может быть, exponential, binomial или какой-либо другой дистрибутив. Если у вас есть алгоритм для генерации одного дистрибутива, он, вероятно, не подходит для генерации чисел, соответствующих другому дистрибутиву. Но только вы знаете, как ваши номера действительно распределены.

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

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

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

Ответ 2

Во-первых, вы не можете генерировать только положительные значения из гауссовского распределения.

Во-вторых, правильно ли я понимаю, что вы пытаетесь создать случайное распределение с заданным средним и стандартным отклонением? Будет ли какое-либо распространение? Если это так, пусть среднее value = m и стандартное отклонение = s. Я предполагаю, что m - s > 0.

let n = random integer modulo 2;
if n equals 0 return m - s
else return m + s

Значения, возвращаемые этим процессом, будут иметь значение m и стандартное отклонение s.

Ответ 3

Вы можете использовать log-normal.

Ответ 4

Я не мог устоять - мне очень нравится угол Джейсона, но он не был доволен, что его ответ охватывает только случаи, когда m > s, поэтому я разработал общее решение, следуя его идее. Наиболее простым распределением с заданными m, s и положительными членами является

с вероятностью p, return 0
с вероятностью (1-p), return m/(1-p)
где (1-p) = m ^ 2/(m ^ 2 + s ^ 2)

Доказательство. Для распределения X с двумя результатами lowX с вероятностью p и highX с вероятностью (1-p),
m = E [X] = p x lowX + (1-p) x highX
s ^ 2 = разность (X) = E [X ^ 2] - E [X] ^ 2 = p x lowX ^ 2 + (1-p) x highX ^ 2 - m ^ 2

Установите lowX в 0 и разрешите в highX и p.

Ответ 5

Почему бы не использовать метод передискретизации? Если у вас есть n чисел в вашем примере, просто возьмите n случайных ничьей из образца с заменой. Полученный набор будет иметь ожидаемое среднее значение и дисперсию примерно так же, как и исходный образец, но он обычно будет немного отличаться.

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

Ответ 6

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

  • однопараметрические распределения не будут работать вообще. Например, хи-квадрат не будет работать, если ваше отклонение всегда удваивает его среднее значение. Аналогично экспоненциальная функция не будет работать, если ваша дисперсия не равна среднему квадрату.
  • некоторые двухпараметрические распределения не будут работать в некоторых случаях. Биномиальное распределение не будет работать, если дисперсия меньше вашего значения. Точно так же нецентральный хи-квадрат не будет работать, если ваше отклонение больше, чем в 2 раза больше вашего среднего значения и менее чем в 4 раза больше вашего значения!
  • Однако log-normal и gamma будут работать во всех случаях.

Ответ 7

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

chi-square: http://en.wikipedia.org/wiki/Chi-square_distribution (это всего лишь сумма двух квадратов гауссиан)

Все ассиметричное распределение (экспоненциальное, weibull, парето, обратное гауссовское, log-нормальное, гамма)

Все распределения от перекоса familly (skew-normal, skew-student,...)

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

Ответ 8

о чём вы говорите, клоуны? стандартная нормаль имеет ноль, но это частный случай распределения Гаусса, который имеет средние значения и стандартное отклонение. при увеличении среднего с постоянной sd вероятность генерации любых чисел ниже нуля уменьшается до нуля. вы можете получить гауссовское распределение без отрицательных чисел.