Обратная выборка CDF для смешанного распределения


9

Вне контекста короткая версия

Пусть будет случайной величиной с CDF y

F(){θ y = 0 θ+(1θ)×CDFlog-normal(;μ,σ) y > 0

Допустим, я хотел смоделировать отрисовки используя метод обратного CDF. Это возможно? Эта функция не имеет обратного. Опять же, есть выборка обратного преобразования для смешанного распределения двух нормальных распределений, которая предполагает, что есть известный способ применить выборку обратного преобразования здесь.y

Мне известен двухэтапный метод, но я не знаю, как применить его к моей ситуации (см. Ниже).


Длинная версия с фоном

Я применил следующую модель для векторного ответа, , используя MCMC (в частности, Stan):yi=(y1,,yK)i

θkilogit1(αkxi),μkiβkxiσk22F(){θ y = 0 θ+(1θ)×CDFlog-normal(;μ,σ) y > 0ukF(yk),zkΦ1(uk)zN(0,R)×kf(yk)(α,β,σ,R)priors

где индексирует наблюдений, - матрица корреляции, а - вектор предикторов / регрессоров / признаков.N R xiNRx

То есть моя модель представляет собой регрессионную модель, в которой условное распределение ответа предполагается гауссовой связкой с логарифмически-нормальными маргиналами, равными нулю. Я уже писал об этой модели; Оказывается, что Сонг, Ли и Юань (2009, gated ) разработали его, и они называют его вектором GLM, или VGLM. Ниже приведена их спецификация, максимально приближенная к дословной: MyF K G

f(y;μ,φ,Γ)=c{G1(y1),,Gm(ym)|Γ}i=1mg(yi;μi,φi)c(u|Γ)=|Γ|1/2exp(12qT(ImΓ1)q)q=(q1,,qm)T,qi=Φ1(ui)
FKсоответствует их , мой соответствует их , а мой соответствует их ; подробности приведены на странице 62 (страница 3 файла PDF), но в остальном они идентичны тому, что я написал здесь. z q R ΓGmzqRΓ

Часть с накачкой нулями примерно соответствует спецификации Лю и Чана (2010, без шлюза ).

Теперь я хотел бы смоделировать данные из оценочных параметров, но меня немного смущает вопрос о том, как это сделать. Сначала я подумал, что могу просто смоделировать (в коде R):y

for (i in 1:N) {
    for (k in 1:K) {
        Y_hat <- rbinom(1, 1, 1 - theta[i, k])
        if (Y_hat == 1)
            Y_hat <- rlnorm(1, mu[i, k], sigma[k])
    }
}

который не использует на всех. Я хотел бы попытаться использовать оценочную матрицу, которую я оценил.R

Моя следующая идея состояла в том, чтобы взять ничьи и затем преобразовать их обратно в . Похоже, что это также совпадает с ответами в разделе « Генерация выборок из Копулы в R» и « Двусторонняя выборка для распределения», выраженными в теореме Скулы о копуле? , Но какого черта мой здесь? Выборка обратного преобразования для смешанного распределения двух нормальных распределений делает звучание так, как это возможно, но я понятия не имею, как это сделать.y F - 1zyF1


@ Сиань - это гауссова связка, для оценки зависимости между компонентами . y
Shadowtalker

1
Поток, на который вы ссылаетесь о выборке из смесей нормалей, относится непосредственно к вашей проблеме без существенных изменений: вместо использования обратных CDF нормалей используйте обратные CDF двух ваших компонентов. Обратный CDF атома при является постоянной функцией, всегда равной . 0y=00
whuber

@whuber Я просто не понимаю, как использовать обратные CDF двух компонентов: что я рисую, из чего я рисую, и затем, к чему я подключаю каждую вещь?
Shadowtalker

1
@ Сиань прекрасно объясняет это в своем ответе на вопрос о нормальной смеси: вы используете унифицированную переменную для выбора компонента смеси, а затем вы берете значение из этого компонента (любым способом, который вам нравится). В вашем случае чрезвычайно просто получить значение из первого компонента: всегда ! Чтобы извлечь значение из второго компонента, используйте любой логнормальный генератор случайных чисел, который вам нравится. В каждом случае вы получаете номер: нет «подключения» для выполнения; вся цель генерации случайных чисел состоит в том, чтобы получить это число. 0
whuber

@whuber новый ответ прояснил это для меня. Спасибо вам обоим.
Shadowtalker

Ответы:


5

Ответ на длинную версию с фоном:

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

Для цель состоит в том, чтобы моделировать векторы , чтобы при условии ковариации , с . Следовательно, если кто-то хочет смоделировать данные из этой модели, можно сделать следующее:1iIyi=(y1i,,yKi)xi

yki={0 with probability logit1(αkxi)log(σkzki+βkxi) with probability 1logit1(αkxi)
zi=(z1i,,zKi)NK(0,R)

Для ,1iI

  1. Создатьzi=(z1i,,zKi)NK(0,R)
  2. Создайтеu1i,,uKiiidU(0,1)
  3. Получите дляyki=I{uki>logit1(αkxi)}log{σkzki+βkxi}1kK

Если кто-то заинтересован в генерации с задней стороны учетом , это более сложная проблема, хотя и возможная с помощью выборки Гиббса или ABC.(α,β,μ,σ,R)yki


1
Я знал, что что-то упустил. «Все очевидно задним числом». Мое намерение: меня интересует значение , так что да, я заинтересован в том, чтобы рисовать из совместных задних параметров. Я хочу, чтобы смоделированные 's увидели, подходит ли модель. yF(yi|xi)y
Shadowtalker

1
Чем сложнее вторая проблема? Я уже оценил модель, и у меня есть задние ничьи. Мы можем продолжить чат, если хотите, чтобы не загромождать комментарии здесь.
Shadowtalker

1
Ох, в общем, да. К счастью, у меня есть Стэн и сэмплер без поворотов, которые делают для меня тяжелую работу.
Shadowtalker

7

Ответ на короткую версию вне контекста:

«Инвертировать» файл cdf, который не является обратимым в математическом смысле (например, ваше смешанное распределение), возможно, как описано в большинстве учебников Монте-Карло. (Как и наша , см. Лемму 2.4.) Если вы определите обобщенное обратное тогда Это означает, что когда имеет скачок при , для . Другими словами, если вы рисуете форму и она заканчивается меньше, чем , ваше поколение X F  эквивалентно  X = F - ( U ),  когда  U U ( 0 , 1 )

F(u)=inf{xR; F(x)u}
XF is equivalent to X=F(U) when UU(0,1).
F(y)θy=0F(u)=0uθU(0,1)θXэто . Иначе, когда , вы в конечном итоге генерируете из непрерывной части, а именно, log-normal в вашем случае. Это означает использование второй равномерной случайной генерации , независимой от первой равномерной отрисовки, и установку для получения логарифмически нормальной генерации.x=0u>θvy=exp(μ+σΦ1(v))

Это почти то, что ваш код R

Y_hat <- rbinom(1, 1, theta[i, k]) if (Y_hat == 1) Y_hat <- rlnorm(1, mu[i, k], sigma[k])

делается. Вы генерируете Бернулли с вероятностью и, если оно равно , вы превращаете его в нормальное логарифмическое число. Так как он равен 1 с вероятностью вы должны вместо этого превратить его в лог-нормальное моделирование, когда оно вместо этого равно нулю , и в конечном итоге получить модифицированный код R: 1 θ i kθki1θki

Y_hat <- rbinom(1, 1, theta[i, k])
    if (Y_hat == 0)
        Y_hat <- rlnorm(1, mu[i, k], sigma[k])

Итак, все вместе, моя процедура моделирования будет: 1) рисовать , 2) вычислять , затем 3) вычислять если и противном случае. Правильный? u k = Φ ( z k ) y k = 0 u kθ y k = F - 1 log-normal ( uzuk=Φ(zk)yk=0ukθyk=Flog-normal1(uk)
Shadowtalker

Нет, неверно Вы рисуете первую униформу, чтобы выбрать между и log-normal, затем вторую форму, если вы выбрали log-normal. Смотрите отредактированную версию моего ответа. 0
Сиань

Но это игнорирует компонент ; отсюда мой вопрос. Я внес уточняющее изменение, а также исправил ошибку в своем псевдокоде. z
Shadowtalker

Мой ответ - для короткой версии и для предоставленного вами кода R. Я надеюсь, что это поможет для длинной версии, но ваша формула для совместной модели все еще неверна. Вы должны определить модель на без использования униформы ...y
Сиань

Как эта модель неверна? Я просто подключил свои к формуле, представленной в цитируемой мной статье (соответствует в их обозначениях). Это неверно? G 1 , , G мF1,,FKG1,,Gm
Shadowtalker
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.