我有16068个数据点,其值在150到54850(mean = 3034.22
)之间。 R代码将如何生成一组随机数,该随机数的频率在54850和150之间呈指数增长?
我尝试在R中使用rexp()
函数,但无法弄清楚如何将范围设置为150到54850之间。在我的实际数据中,lambda值为25。
set.seed(123)
myrange <- c(54850, 150)
rexp(16068, 1/25, myrange)
该调用产生错误。
Error in rexp(16068, 1/25, myrange) : unused argument (myrange)
假设的总体越接近数据值,则应呈指数增长。我有25个数据点,其值为150,只有一个数据点为54850。模拟的总体应在此范围内。
答案 0 :(得分:0)
这实际上是math.stackexchange的一个问题,但是出于好奇,我提供了此解决方案。也许足以满足您的需求。
首先,?rexp
告诉我们它只有两个参数,因此我们生成具有所需长度的随机指数分布。
set.seed(42) # for sake of reproducibility
n <- 16068
mr <- c(54850, 150) # your 'myrange' with less typing
y0 <- rexp(n, 1/25) # simulate exp. dist.
y <- y0[order(-y0)] # sort
现在,我们需要一种数学方法来重新分配分布。
# f(x) = (b-a)(x - min(x))/(max(x)-min(x)) + a
y.scaled <- (mr[1] - mr[2]) * (y - min(y)) / (max(y) - min(y)) + mr[2]
证明:
> range(y.scaled)
[1] 150.312 54850.312
还不错。
情节:
plot(y.scaled, type="l")
注意:可能存在一些数学问题,因此请参见this answer。