У меня есть конкретная функция плотности, и я хочу сгенерировать случайные величины, зная выражение функции плотности.
Например, функция плотности:
df=function(x) { - ((-a1/a2)*exp((x-a3)/a2))/(1+exp((x-a3)/a2))^2 }
Из этого выражения я хочу сгенерировать 1000 случайных элементов с таким же распределением.
Я знаю, что мне следует использовать метод обратной выборки. Для этого я использую функцию CDF моего PDF-файла, которая рассчитывается следующим образом:
cdf=function(x) { 1 - a1/(1+exp((x-a3)/a2))
Идея состоит в том, чтобы сгенерировать равномерно распределенные образцы, а затем сопоставить их с моими функциями CDF, чтобы получить обратное сопоставление. Что-то вроде этого:
random.generator<-function(n) sapply(runif(n),cdf)
а затем вызовите его с желаемым количеством случайных величин для генерации.
random.generator(1000)
Это правильный подход?