我要生成100在区间[-50,50]正态分布的随机数。然而,在产生的随机数范围内的下面的代码是[-50,50]。
n <- rnorm(100, -50,50)
plot(n)
你的问题是atrangely问,因为它似乎你不完全了解rnorm
功能。
rnorm(100, -50,50)
产生的由中心-50正态分布给出100分的样本,用50所以你需要specifiy你想要的一个标准偏差:100 normally distributed random number in interval [-50,50]
。在正态分布你不给一个上限和下限:图纸的概率是从不0,但作为与平均值的离几个标准差时,仅仅是非常低的。所以:
rnorm(100, 0,50)
,但你必须高于50和低于-50值。
sd <- 50
n <- data.frame(draw = rnorm(1000, 0,sd))
final <- sample(n$draw[!with(n, draw > 50 | draw < -50)],100)
这里是做什么的2不同sd
一个例子:
sd <- 10
n1 <- data.frame(draw = rnorm(1000, 0,sd))
final1 <- sample(n$draw[!with(n, draw > 50 | draw < -50)],100)
sd <- 50
n2 <- data.frame(draw = rnorm(1000, 0,sd))
final2 <- sample(n$draw[!with(n, draw > 50 | draw < -50)],100)
par(mfrow = c(1,2))
hist(final1,main = "sd = 10")
hist(final2,main = "sd = 50")
sample(-50:50,100,replace = T)
你必须做出牺牲。无论您的随机变量不是正态分布,因为尾巴被切断,或者你在边界上妥协。您可以定义随机变量“几乎”趴在一个范围内,这是你接受一个非常小的比例超出了所。也许1%的人会是你的目的,一个可以接受的选择。
my_range <- setNames(c(-50, 50), c("lower", "upper"))
prob <- 0.01 # probability to lie outside of my_range
# you have to define this, 1 % in this case
my <- mean(my_range)
z_value <- qnorm(prob/2)
sigma <- (my - my_range["lower"]) / (-1 * z_value)
# proof
N <- 100000 # large number
sim_vec <- rnorm(N, my, sigma)
chk <- 1 - length(sim_vec[sim_vec >= my_range["lower"] &
sim_vec <= my_range["upper"]]) / length(sim_vec)
cat("simulated proportion outside range:", chk, "\n")