как генерировать сэмплы из CDF logisti c, используя метод inverse-CDF - PullRequest
0 голосов
/ 04 мая 2020

Мой вопрос заключается в том, как сгенерировать выборку в R из логистики c CDF с помощью обратного метода CDF. Logisti c плотность равна p (θ) = exp (θ) / (1 + exp (θ)) ^ 2

Вот алгоритм для этого метода:

1: for t = 1 to T do
2: sample q(t) ∼ Unif(0, 1)
3: θ(t) ← F^−1(q(t))
4: end for

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

1007 * Сначала определите T как число dr aws, которое вы принимаете из равномерного распределения
T<-100000
sample_q<-runif(T,0,1)

Кажется, что plogis даст вам кумулятивную функцию распределения, поэтому я полагаю, что я могу просто взять ее обратное:

generate_samples_from_logistic_CDF <- function(p) {
   for(t in length(T)) 
       cdf<-plogis((1+exp(p)/(exp(p))))
   inverse_cdf<-(1/cdf)
   return(inverse_cdf)
}

должен генерировать_samples_from_logistic_CDF (sample_q) но вместо этого он дает мне одинаковое значение для всего

1 Ответ

3 голосов
/ 04 мая 2020

Поскольку обратный CDF уже закодирован в R как qlogis(), это должно работать:

qlogis(runif(100000))

или если вы хотите сделать это «вручную», а не использовать встроенный qlogis(), вы можете использовать R <- runif(100000); log(R/(1-R))

Обратите внимание, что rlogis(100000) должно быть более эффективным.

Одно из ваших заблуждений заключается в том, что «обратный» в приведенном выше описании алгоритма не означает мультипликатив. обратная или обратная (т.е. 1 / x), а скорее функция обратная (которая в данном случае log(q/(1-q)))

...