Генерация образцов из логистического распределения - PullRequest
3 голосов
/ 18 октября 2010

Я работаю над статистическим кодом и изучаю различные способы создания выборок из случайных распределений - начиная с генератора случайных чисел, который генерирует однородные значения с плавающей запятой от 0 до 1

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

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

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

Ответы [ 3 ]

10 голосов
/ 18 октября 2010

Обратное распределение логистики не трудно найти, поэтому вы можете использовать Выборка обратного преобразования .Основной алгоритм:

for each random variate x ~ logistic
  generate a random variate y ~ Uniform(0, 1)
  x := F^-1 (y)

, где F ^ -1 - обратный CDF для логистического или требуемого распределения.Большинство языков программирования позволяют вам генерировать Uniform-переменную между 0 и 1 с помощью некоторой функции rand.

Вот некоторый код на python, который генерирует 1000 случайных изменений из логистического распределения:

from random import random
import math
import pylab

loc, scale = 0, 1

randvars = []
for i in range(1000):
    x = random()
    y = loc + scale * math.log(x / (1-x))
    randvars.append(y)

pylab.hist(randvars)
6 голосов
/ 18 октября 2010

Существует один очень распространенный способ создания случайных чисел для большинства интересующих распределений, это обратный метод cdf.

Сначала сгенерируйте обратную Кумулятивную функцию распределения для рассматриваемого распределения - поскольку cdf - это функция, которая принимает значения в области распределения и отображает их в [0,1], обратный cdf является функцией, которая принимает значения в [0,1] и отображает их на значения в области распределения с соответствующими вероятностями. Многие распространенные дистрибутивы имеют обратные cdf-файлы, полученные аналитически, но если ваш дистрибутив интрацибельный или приблизительный, вы можете создать приблизительный числовой обратный cdf.

Во-вторых, возьмите любой хороший генератор случайных чисел, который генерирует числа, равномерно распределенные по [0,1], и проведите его вывод через обратный cdf. Теперь выходные данные соответствуют распределению, с которого вы начали.

Обратный cdf логистического распределения можно найти здесь .

1 голос
/ 02 августа 2017

Логистическое распределение - это разность двух распределений Гамбеля, переменные которых являются отрицательным логарифмом экспоненциальных переменных или эквивалентно log(u/(1.0 - u)), где u - равномерная переменная.

...