Я хочу сделать выборку в соответствии с плотностью где и строго положительны. (Мотивация: это может быть полезно для выборки Гиббса, когда параметр формы гамма-плотности имеет одинаковый априор.)
Кто-нибудь знает, как легко сделать выборку из этой плотности? Может быть, это стандарт и просто то, о чем я не знаю?
Я могу думать о глупом алгоритме сэмплирования отклонения, который будет более или менее работать (найти режим of f , sample (a, u) из равномерного в большой коробке [0,10a ^ *] \ times [0, f (a ^ *)] и отклонить, если u> f (a) ), но (i) это совсем не эффективно, и (ii) f (a ^ *) будет слишком большим для компьютера, чтобы его можно было легко обрабатывать даже для умеренно большой с и д . (Обратите внимание, что режим для больших c и d приблизительно равен a = cd .)
Заранее благодарю за любую помощь!
Ответы:
Выборка отклонения будет работать исключительно хорошо, когда и является разумной для c d ≥ exp ( 2 ) .cd≥exp(5) cd≥exp(2)
Чтобы немного упростить математику, пусть , напишите x = a и отметьте, чтоk=cd x=a
для . Установка х = у +3 / 2 даетx≥1 x=u3/2
для . Когда k ≥ exp ( 5 ) , это распределение очень близко к нормальному (и становится ближе с увеличением k ). В частности, вы можетеu≥1 k≥exp(5) k
Найти режим численно (используя, например, Ньютона-Рафсона).f(u)
Разверните до второго порядка о его режиме.logf(u)
Это дает параметры близко приближенного нормального распределения. С высокой точностью этот аппроксимирующий нормаль доминирует над за исключением крайних хвостов. (Когда k < exp ( 5 ) , вам может понадобиться немного увеличить Normal pdf, чтобы обеспечить доминирование.)f(u) k<exp(5)
Выполнив эту предварительную работу для любого заданного значения и оценив постоянную M > 1 (как описано ниже), получение случайной переменной зависит от:k M>1
Нарисуйте значение из доминирующего нормального распределения g ( u ) .u g(u)
Если или если новая равномерная переменная X превышает f ( u ) / ( M g ( u ) ) , вернитесь к шагу 1.u<1 X f(u)/(Mg(u))
Набор .x=u3/2
Ожидаемое число оценок из - за несоответствия между г и е лишь немногим больше , чем 1. ( В некоторых дополнительных оценок будет происходить из - за отклонений от случайных величин меньше , чем 1 , но даже тогда , когда к столь же низко как 2 частота таких вхождения малы.)f g f 1 k 2
Этот график показывает логарифмов о г и е в зависимости от функции и для . Поскольку графики очень близки, нам нужно проверить их соотношение, чтобы увидеть, что происходит:k=exp(5)
Это показывает логарифмическое отношение ; коэффициент M = exp ( 0,004 ) был включен, чтобы обеспечить положительный логарифм по всей основной части распределения; то есть, чтобы обеспечить M g ( u ) ≥ f ( u ), за исключением, возможно, в областях незначительной вероятности. Делая M достаточно большим, вы можете гарантировать, что M ⋅ glog(exp(0.004)g(u)/f(u)) M=exp(0.004) Mg(u)≥f(u) M M⋅g доминирует во всех, кроме самых экстремальных хвостов (у которых практически нет шансов быть выбранными в симуляции в любом случае). Однако чем больше М , тем чаще будут происходить отклонения. Поскольку k становится большим, M можно выбирать очень близко к 1 , что практически не влечет за собой штрафов.f M k M 1
Подобный подход работает даже для , но достаточно большие значения M могут потребоваться, когда exp ( 2 ) < k < exp ( 5 ) , потому что f ( u ) заметно асимметрична. Например, при k = exp ( 2 ) , чтобы получить достаточно точное значение g, нам нужно установить M = 1 :k>exp(2) M exp(2)<k<exp(5) f(u) k=exp(2) g M=1
Верхняя красная кривая - это график а нижняя синяя кривая - это график log ( f ( u ) ) . Отказ от выборки f по отношению к exp ( 1 ) g приведет к отклонению примерно 2/3 всех пробных розыгрышей, утроив усилие: все еще неплохо. Правый хвост ( у > 10 или х > 10 3 / 2 ~ 30log(exp(1)g(u)) log(f(u)) f exp(1)g u>10 x>103/2∼30 ) будет недостаточно представлен в выборке отклонения (потому что больше не доминирует в f ), но этот хвост составляет менее exp ( - 20 ) ∼ 10 - 9 от общей вероятности.exp(1)g f exp(−20)∼10−9
Подводя итог, можно сказать, что после первоначальных попыток вычисления режима и оценки квадратичного члена степенного ряда вокруг режима - усилия, требующего не более нескольких десятков оценок функций, - вы можете использовать выборку отклонения в ожидаемая стоимость от 1 до 3 (или около того) оценок за вариант. Множитель стоимости быстро падает до 1, когда k = c d увеличивается за пределы 5.f(u) k=cd
Даже если требуется только одна ничья от , этот метод является разумным. Это становится само собой разумеющимся, когда для одного и того же значения k требуется много независимых отрисовок , и тогда накладные расходы на начальные вычисления амортизируются на протяжении многих отрисовок.f k
добавление
@Cardinal довольно разумно попросил поддержать некоторые из анализа размахивающих рук в последующем. В частности, почему бы преобразование делает распределение приблизительно Нормальным?x=u3/2
В свете теории преобразований Бокса-Кокса естественно стремиться к некоторому степенному преобразованию в форме (для константы α , мы надеемся, не слишком отличающегося от единицы), которое сделает распределение «более» нормальным. Напомним, что все нормальные распределения просто характеризуются: логарифмы их pdf являются чисто квадратичными, с нулевым линейным членом и без членов более высокого порядка. Поэтому мы можем взять любой pdf и сравнить его с нормальным распределением, расширив его логарифм в виде степенного ряда вокруг его (самого высокого) пика. Мы ищем значение α, которое делает (по крайней мере) третьимx=uα α α сила исчезает, по крайней мере, приблизительно: это самое большее, на что мы можем разумно надеяться, что один свободный коэффициент будет достигнут. Часто это работает хорошо.
Но как справиться с этим конкретным дистрибутивом? После преобразования мощности его pdf
Возьмите его логарифм и использовать асимптотическое разложение Стирлинга из :log(Γ)
(для малых значений , которые не постоянны). Это работает при условии, что α положительно, что мы и будем считать случайным (иначе мы не можем пренебречь оставшейся частью разложения).c α
Вычислите его третью производную (которая при делении на Будет коэффициентом третьей степени u в степенном ряду) и используйте тот факт, что на пике первая производная должна быть равна нулю. Это значительно упрощает третью производную, давая (приблизительно, потому что мы игнорируем производную от c )3! u c
Когда не слишком мало, вы действительно будете большими на пике. Поскольку α является положительным, доминирующим членом в этом выражении является степень 2 α , которую мы можем установить на ноль, сделав его коэффициент равным нулю:k u α 2α
Вот почему работает так хорошо: с этим выбором, коэффициент кубического члена вокруг пика ведет себя как U - 3 , что близко к ехр ( - 2 к ) . Когда k превышает 10 или около того, вы можете об этом практически забыть, и он достаточно мал даже для k до 2. Более высокие степени, начиная с четвертого, играют все меньше и меньше роль, когда k становится большим, потому что их коэффициенты растут тоже пропорционально меньше. Кстати, такие же расчеты (на основе второй производной от l o g ( fα=3/2 u−3 exp(−2k) k k k на своем пике) показывают, что стандартное отклонение этого нормального приближения немного меньше 2log(f(u)) , с погрешностью, пропорциональнойexp(-k/2).23exp(k/6) exp(−k/2)
источник
Мне очень нравится ответ @ whuber; это, вероятно, будет очень эффективным и имеет прекрасный анализ. Но это требует некоторого глубокого понимания в отношении этого конкретного распределения. Для ситуаций, когда у вас нет такого понимания (например, для разных распределений), мне также нравится следующий подход, который работает для всех распределений, где PDF имеет двойную дифференциацию и эта вторая производная имеет конечное число корней. Это требует много работы для настройки, но затем у вас есть движок, который работает для большинства дистрибутивов, которые вы можете использовать.
По сути, идея состоит в том, чтобы использовать кусочно-линейную верхнюю границу PDF, которую вы адаптируете, когда делаете выборку отклонения. В то же время у вас есть кусочно-линейный нижнийограниченный для PDF, который мешает вам оценивать PDF слишком часто. Верхние и нижние границы задаются хордами и касательными к графику PDF. Начальное деление на интервалы таково, что на каждом интервале PDF-файл либо вогнутый, либо выпуклый; всякий раз, когда вам нужно отклонить точку (x, y), вы делите этот интервал на x. (Вы также можете сделать дополнительное подразделение в точке x, если вам нужно было вычислить PDF, потому что нижняя граница действительно плохая.) Это делает подразделения особенно частыми, когда верхняя (и нижняя) границы плохие, так что вы получите действительно хорошее аппроксимация вашего PDF по существу бесплатно. Детали немного сложно понять, но я попытался объяснить большинство из них в этой серии постов в блоге - особеннопоследний .
Этот метод реализован в Maple как метод по умолчанию для пользовательских непрерывных распределений. (Полное раскрытие - я работаю на Maplesoft.)
Я сделал примерный прогон, сгенерировав 10 ^ 4 балла для c = 2, d = 3, указав [1, 100] в качестве начального диапазона значений:
Было 23 отклонения (красным), 51 пункт «на испытательном сроке», который находился в то время между нижней границей и фактическим PDF, и 9949 пунктов, которые были приняты после проверки только линейных неравенств. Это всего 74 оценки PDF, или примерно одна оценка PDF на 135 баллов. Соотношение должно улучшаться по мере того, как вы генерируете больше точек, поскольку приближение становится все лучше и лучше (и наоборот, если вы генерируете только несколько точек, соотношение ухудшается).
источник
Вы можете сделать это численно выполнив метод инверсии, который говорит, что если вы вставите равномерные (0,1) случайные величины в обратный CDF, вы получите ничью из распределения. Ниже я включил некоторый код R, который делает это, и из нескольких проверок, которые я сделал, он работает хорошо, но немного небрежно, и я уверен, что вы могли бы его оптимизировать.
Если вы не знакомы с R, lgamma () - это журнал гамма-функции; integrate () вычисляет определенный 1-D интеграл; uniroot () вычисляет корень функции, используя 1-D деление пополам.
Главная произвольная вещь, которую я делаю здесь, предполагает, что( 1 , 10000 ) является достаточной скобкой для деления пополам - мне было лень об этом, и, возможно, есть более эффективный способ выбрать эту скобку. Для очень больших значений, численный расчет CDF (скажем,> 100000 ) не получается, поэтому скобка должна быть ниже этого. CDF фактически равен 1 в этих точках (еслис , д являются очень большой), так что - то, вероятно , может быть включен , что бы не допустить просчет ВПР для очень больших входных значений.
Редактировать: Когдас д очень большой, численная проблема возникает с этим методом. Как указывает Уабер в комментариях, после того, как это произошло, распределение в его режиме существенно вырождено, что делает его тривиальной проблемой выборки.
источник