gpt4 book ai didi

r - 使用逆采样从分布函数生成随机变量

转载 作者:行者123 更新时间:2023-12-04 12:29:52 24 4
gpt4 key购买 nike

我有一个特定的密度函数,我想生成知道密度函数表达式的随机变量。

例如,密度函数为:

df=function(x) { - ((-a1/a2)*exp((x-a3)/a2))/(1+exp((x-a3)/a2))^2 }

从这个表达式我想生成 1000 个具有相同分布的随机元素。

我知道我应该使用逆采样方法。为此,我使用我的 PDF 的 CDF 函数,计算如下:
cdf=function(x) { 1 - a1/(1+exp((x-a3)/a2))

这个想法是生成均匀分布的样本,然后用我的 CDF 函数映射它们以获得逆映射。像这样的东西:
random.generator<-function(n) sapply(runif(n),cdf) 

然后使用要生成的所需数量的随机变量调用它。
random.generator(1000) 

这种方法是否正确?

最佳答案

第一步是取你的 cdf 函数的倒数,在这种情况下可以用简单的算术来完成:

invcdf <- function(y) a2 * log(a1/(1-y) - 1) + a3

现在你想用标准均匀分布的随机变量调用逆 cdf 来采样:
set.seed(144)
a1 <- 1 ; a2 <- 2 ; a3 <- 3
invcdf(runif(10))
# [1] -2.913663 4.761196 4.955712 3.007925 1.472119 4.138772 -3.568288
# [8] 4.973643 -1.949684 6.061130

这是 10000 个模拟值的直方图:
hist(invcdf(runif(10000)))

enter image description here

这是pdf的情节:
x <- seq(-20, 20, by=.01)
plot(x, df(x))

enter image description here

关于r - 使用逆采样从分布函数生成随机变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35148658/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com