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

StackOverflow https://stackoverflow.com/questions/1683461

Вопрос

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

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

РЕДАКТИРОВАТЬ: В ответах была некоторая путаница, поэтому я постараюсь уточнить.

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

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

Это было полезно?

Решение

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

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

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

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

Другие советы

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

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

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

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

Вы можете использовать логарифмический распределение.

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

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

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

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

Доказательство: для распределения x с двумя результатами Lowx с вероятностью P и Highx с вероятностью (1-P),
m = e [x] = px lowx + (1-p) x highx
s^2 = дисперсия (x) = e [x^2] - e [x]^2 = px lowx^2 + (1 -p) x highx^2 - m^2

Установите Lowx до 0 и решите в Highx и P.

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

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

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

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

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

Все распределения от Skew Familly (академическая, агрегатная, ... ...)

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top