我想在给定的时间间隔内生成一些 Weibull 随机数。例如,来自 Weibull 分布的 20 个随机数,形状为 2,尺度为 30,区间为 (0, 10)。
rweibull
R 中的函数从具有给定形状和比例值的 Weibull 分布生成随机数。有人可以建议一种方法吗?先感谢您。
使用distr
包。它允许很容易地做这种事情。
require(distr)
#we create the distribution
d<-Truncate(Weibull(shape=2,scale=30),lower=0,upper=10)
#The d object has four slots: d,r,p,q that correspond to the [drpq] prefix of standard R distributions
#This extracts 10 random numbers
d@r(10)
#get an histogram
hist(d@r(10000))
使用基数 R,您可以生成随机数,过滤掉到目标区间的随机数,如果它们的数量似乎少于您的需要,则生成更多。
rweibull_interval <- function(n, shape, scale = 1, min = 0, max = 10) {
weib_rnd <- rweibull(10*n, shape, scale)
weib_rnd <- weib_rnd[weib_rnd > min & weib_rnd < max]
if (length(weib_rnd) < n)
return(c(weib_rnd, rweibull_interval(n - length(weib_rnd), shape, scale, min, max))) else
return(weib_rnd[1:n])
}
set.seed(1)
rweibull_interval(20, 2, 30, 0, 10)
[1] 9.308806 9.820195 7.156999 2.704469 7.795618 9.057581 6.013369 2.570710 8.430086 4.658973
[11] 2.715765 8.164236 3.676312 9.987181 9.969484 9.578524 7.220014 8.241863 5.951382 6.934886