如何在一定的指数增长范围内生成随机数总体

时间:2019-01-29 04:12:26

标签: r statistics

我有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。模拟的总体应在此范围内。

1 个答案:

答案 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")

enter image description here

注意:可能存在一些数学问题,因此请参见this answer