【问题标题】:Multiple random values between specific ranges in R?R中特定范围之间的多个随机值?
【发布时间】:2021-06-22 07:06:31
【问题描述】:

我想从(截断)正态分布(高斯)中选取 50 个样本,范围为 15-85,均值 = 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 之间。我怎样才能做到这一点?

更新:有些人在评论部分提出了很好的观点,认为这个问题无法解决,因为这将不再是高斯分布。我在原始帖子中添加了 TRUNCATED 这个词,这样它更有意义(截断正态分布)。

【问题讨论】:

  • 如果限制从正态分布采样的数据的范围,无论范围相对于均值和 sd 有多宽,它都不再是正态分布。您提出的问题没有解决方案。
  • library('MCMCglmm') rtnorm(n = 50, mean = mu, sd = std, lower = 15, upper = 85) 可以帮到你吗?

标签: r random gaussian normal-distribution


【解决方案1】:

正如 Limey 在 cmets 中所说,通过施加有界区域,分布不再是正态的。有几种方法可以实现这一点。

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 链接的方法的价值在于它确保了“正态”分布,其中模拟和限制结果向量将导致边界与正态分布相比具有额外的质量。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-02
    • 2016-01-03
    • 1970-01-01
    相关资源
    最近更新 更多