Min*_*ark 0 r normal-distribution
我想生成一个范围为 [1, 3] 的正态分布随机变量。
具体来说,我尝试了以下 R 代码:
x1 <- runif(100, 1, 2)
x2 <- rnorm(100, 0, 0.3)
V <- 1 + x1 + x2
Run Code Online (Sandbox Code Playgroud)
然后,V服从正态分布(以 为条件x1)并且大致集中在 [1, 3] 上。
但是,我想让V范围为 [1, 3]。也就是说,所有元素都应该在 [1, 3] 中,而不是粗略地在 [1, 3] 中:
min(V)
[1] 1
max(V)
[1] 3
Run Code Online (Sandbox Code Playgroud)
我不知道该怎么办。有完成这项任务的技术吗?
由于任何正态分布的支持都是整个实数轴,因此获得所需内容的唯一方法是抽取样本,然后将其归一化到指定的范围内。正如 r2evans 指出的那样,任何此类方法都存在理论上的问题。然而,它的一个简单实现是
rnorm_limits <- function(n, min = 1, max = 3) {
x <- rnorm(n)
x <- (max - min) * x/diff(range(x))
return(x - min(x) + min)
}
Run Code Online (Sandbox Code Playgroud)
测试,我们有:
set.seed(1)
hist(rnorm_limits(100))
Run Code Online (Sandbox Code Playgroud)

当然,范围将与指定的完全相同:
range(rnorm_limits(100))
#> [1] 1 3
Run Code Online (Sandbox Code Playgroud)