Моделирование Монте-Карло из PDF с использованием Runif - PullRequest
0 голосов
/ 11 февраля 2019

Мне дали pdf для X, где f (x) = 2x, когда x находится между 0 и 1, а f (x) = 0 в противном случае.В классе мы научились выбирать из равномерного распределения и преобразовывать данные, чтобы решить для y, однако я не уверен, как применить это здесь, потому что, если я сгенерирую данные из равномерного распределения, то большая их часть будет между 0 и 1.

Я делаю эти шаги в неправильном порядке?Просто кажется странным иметь PDF, который приведет к умножению большей части данных на 2.

Ответы [ 2 ]

0 голосов
/ 11 февраля 2019

Я буду использовать соглашение R о присвоении имен PDF с начальным d и CDF с начальным p.
Это очень просто.Вычислить антипроизводное dmydist(x) = 2*x, чтобы получить pmydist = sqrt(x).Ассоциированный RNG является немедленным.

dmydist <- function(x) {
  ifelse(x >= 0 & x <= 1, 2*x, 0)
}
pmydist <- function(y) {
  ifelse(x >= 0 & x <= 1, sqrt(y), 0)
}
rmydist <- function(n) pmydist(runif(n))

set.seed(1234)
x <- rmydist(10000)

hist(x, prob = TRUE)
lines(seq(0, 1, by = 0.01), dmydist(seq(0, 1, by = 0.01)))

enter image description here

0 голосов
/ 11 февраля 2019

Есть много способов, как это сделать.Одним из способов может быть выборка отклонения https://en.wikipedia.org/wiki/Rejection_sampling. Проще говоря

  1. Выборка точки на оси X из распределения предложения.
  2. Нарисуйте вертикальную линию в этом x-положение до кривой распределения предложения.
  3. Выборка равномерно вдоль этой линии от 0 до максимума функции плотности вероятности.Если значение выборки больше значения требуемого распределения на этой вертикальной линии, вернитесь к шагу 1.

    n = 1e5
    x = runif (n)
    t = runif (n)
    исторических (х [ifelse (2 * т <2 * х, Т, F)]) </p>

...