R中特定范围之间的多个随机值?

Multiple random values between specific ranges in R?

我想从 15-85 范围内的 (TRUNCATED) 正态分布(高斯分布)中选取 50 个样本,均值 = 35,sd = 30。对于再现性:

num = 50 # number of samples
rng = c(15, 85) # the range to pick the samples from
mu = 35 # mean
std = 30 # standard deviation

以下代码给出了 50 个样本:

rnorm(n = num, mean = mu, sd = std)

但是,我希望这些数字严格在 15-85 之间。我怎样才能做到这一点?

更新:一些人在评论部分提出了重要观点,这个问题无法解决,因为这将不再是高斯分布。我在原来的 post 中添加了 TRUNCATED 这个词,所以它更有意义(截断正态分布)。

正如 Limey 在评论中所说,通过强加一个有界区域,分布不再正常。有几种方法可以实现这一点。

library("MCMCglmm")
rtnorm(n = 50, mean = mu, sd = std, lower = 15, upper = 85)

是一种方法。如果您想要更手动的方法,您可以在范围内使用均匀分布进行模拟并应用正态分布函数

bounds <- c(pnorm(15, mu, std), pnorm(50, mu, std))
samples <- qnorm(runif(50, bounds[1], bounds[2]), mu, std)

这个想法非常基本:模拟结果的分位数,然后在给定分布的情况下估计特定数量的值。这种方法而不是 GKi 链接的方法的价值在于它确保了“正态分布”,其中模拟和界定结果向量将导致边界与正态分布相比具有额外的质量。

注意结果正常,因为它是有界的。