R如何从中断的倒置钟形曲线中采样
R How to sample from an interrupted upside down bell curve
我问过相关的,之前成功得到了答复。现在我想从倒置的钟形曲线中采样值,但排除落在它中间的一系列值,如下图所示:
我目前可以使用此代码:
min <- 1
max <- 20
q <- min + (max-min)*rbeta(10000, 0.5, 0.5)
我如何调整它才能获得所需的输出?
假设您想要从您的分布中获取 10,000 个样本,但不希望样本中有 5 到 15 之间的任何数字。为什么不这样做:
q <- min + (max-min)*rbeta(50000, 0.5, 0.5);
q <- q[!(q > 5 & q < 15)][1:10000]
这给了你这个:
hist(q)
但尺寸仍然正确:
length(q)
#> [1] 10000
与正态分布相比的“颠倒钟形曲线”,排除了一定的间隔,可以使用以下算法进行采样。我用伪代码写的,因为我不熟悉 R。我从另一个 .
改编的
请注意,此采样器在截断间隔内采样(此处为间隔 [x0
、x1
],不包括 [x2
、x3
] ) 因为不可能将延伸到无穷大的倒钟形曲线积分为 1(这是对概率密度的要求之一)。
在伪代码中,RNDU01()
是一个uniform(0, 1)随机数。
x0pdf = 1-exp(-(x0*x0))
x1pdf = 1-exp(-(x1*x1))
ymax = max(x0pdf, x1pdf)
while true
# Choose a random x-coordinate
x=RNDU01()*(x1-x0)+x0
# Choose a random y-coordinate
y=RNDU01()*ymax
# Return x if y falls within PDF
if (x<x2 or x>x3) and y < 1-exp(-(x*x)): return x
end
我问过相关的
我目前可以使用此代码:
min <- 1
max <- 20
q <- min + (max-min)*rbeta(10000, 0.5, 0.5)
我如何调整它才能获得所需的输出?
假设您想要从您的分布中获取 10,000 个样本,但不希望样本中有 5 到 15 之间的任何数字。为什么不这样做:
q <- min + (max-min)*rbeta(50000, 0.5, 0.5);
q <- q[!(q > 5 & q < 15)][1:10000]
这给了你这个:
hist(q)
但尺寸仍然正确:
length(q)
#> [1] 10000
与正态分布相比的“颠倒钟形曲线”,排除了一定的间隔,可以使用以下算法进行采样。我用伪代码写的,因为我不熟悉 R。我从另一个
请注意,此采样器在截断间隔内采样(此处为间隔 [x0
、x1
],不包括 [x2
、x3
] ) 因为不可能将延伸到无穷大的倒钟形曲线积分为 1(这是对概率密度的要求之一)。
在伪代码中,RNDU01()
是一个uniform(0, 1)随机数。
x0pdf = 1-exp(-(x0*x0))
x1pdf = 1-exp(-(x1*x1))
ymax = max(x0pdf, x1pdf)
while true
# Choose a random x-coordinate
x=RNDU01()*(x1-x0)+x0
# Choose a random y-coordinate
y=RNDU01()*ymax
# Return x if y falls within PDF
if (x<x2 or x>x3) and y < 1-exp(-(x*x)): return x
end