我得到了X的pdf,其中x在0和1之间时,f(x)= 2x,否则f(x)= 0。在课堂上,我们学习了从均匀分布中采样并转换数据以求解y的问题,但是,我不确定如何在此处应用该方法,因为如果我从均匀分布中生成数据,那么大多数数据将在0到1之间。
我按错误的顺序执行这些步骤吗?有一个PDF导致大多数数据乘以2似乎很奇怪。
答案 0 :(得分:1)
有很多方法可以做到这一点。一种方法是拒绝采样https://en.wikipedia.org/wiki/Rejection_sampling。简单地说
沿着这条线从0到概率密度函数的最大值均匀采样。如果采样值大于此垂直线上的所需分布的值,请返回步骤1。
n = 1e5
x = runif(n)
t = runif(n)
hist(x [ifelse(2 * t <2 * x,T,F)])
答案 1 :(得分:1)
我将使用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)))