有没有人知道如何从以下概率密度函数(pdf)模拟随机变量:
其中g(x)是标准正态分布N(0,1)的pdf。 我知道从自定义分布中模拟随机变量涉及找到累积密度函数并使用均匀分布(因为在该平台中也有关于该主题的类似问题)。但是,我在这里的pdf看起来比我之前遇到的其他例子复杂一点。例如,我认为找到累积密度函数(需要整合)并不是那么简单。谁能给我建议如何解决这个问题?或者是否有另一种更简单的方法来模拟上述分布? 期待您的建议。谢谢!
答案 0 :(得分:0)
您可以尝试马尔可夫链蒙特卡罗方法,例如Metropolis-Hastings算法。 https://en.wikipedia.org/wiki/Metropolis%E2%80%93Hastings_algorithm
答案 1 :(得分:0)
这不起作用吗?
special <- function(x) {
if (x <= -1) {
val <- dnorm(x) / (1+exp(-x-1))
} else if ((x > -1) & (x < 1)) {
val <- dnorm(x) / 2
} else {
val <- dnorm(x) / (1+exp(-x+1))
}
return(val)
}
special(-2)
[1] 0.01452041
special(-0.5)
[1] 0.1760327
答案 2 :(得分:0)
您可以使用sample
...
#define some x values
x <- seq(-5, 5, 0.001)
#define the pdf as above
f <- function(x) {
if (x <= -1) {
y <- dnorm(x)/(1+exp(-x-1))
} else if (x >= 1) {
y <- dnorm(x)/(1+exp(-x+1))
} else {
y <- dnorm(x)/2
}
return(y)
}
#calculate values of pdf for all x
fx <- f(x)
#create sample using these probabilities
samp <- sample(x, size=10000, replace=TRUE, prob=fx)
hist(samp, breaks=50)