繁体   English   中英

当下边界接近零时生成均匀的随机变量

[英]Generate uniform random variable when lower boundary is close to zero

当我在R中运行

runif(100,max=0.1, min=1e-10)

我得到100个均匀分布的随机变量,范围在0.1到0.0001之间 因此,在0.0001和最小值( min=1e-10 )之间没有随机值。

如何在整个区间(最小值和最大值之间)生成统一的随机变量?

也许您没有生成足够多的东西来使它看起来像您已经看到的那样:

> range(runif(100,max=0.1,min=exp(-10)))
[1] 0.00199544 0.09938462
> range(runif(1000,max=0.1,min=exp(-10)))
[1] 0.0002407759 0.0999674631
> range(runif(10000,max=0.1,min=exp(-10)))
[1] 5.428209e-05 9.998912e-02

它们多久发生一次?

> sum(runif(10000,max=0.1,min=exp(-10)) < .0001)
[1] 5

在10000个样本中有5个。因此,在100个样本中得到1个的机会是...(实际上,您可以从均匀分布的数量和性质中精确地得出)。

编辑以将exp(-10)替换为1e-10

给定您的最大值0.1和最小值1e-10 ,则给定值小于1e-4的概率为

(1e-4 - 1e-10) / (0.1 - 1e-10) = 9.99999e-04

来自此分布的100个随机值都大于1e-4的概率为

(1 - 9.99999e-04) ^ 100 = 0.90479

大约90.5% 因此,从此分布中抽出100个数字时,您看到的1e-4以上不会让您感到惊讶。 从理论上讲,这有望超过90.5%的时间。 我们甚至可以在仿真中验证这一点:

set.seed(47) # for replicability
# 100,000 times, draw 100 numbers from your uniform distribution
d = replicate(n = 1e5, runif(100, max = 0.1, min = 1e-10))
# what proportion of the 100k draws have no values less than 1e-4?
mean(colSums(d < 1e-4) == 0)
# [1] 0.90557
# 90.56% - very close to our calculated 90.48%

为了获得更高的精度,我们可以重复进行更多的重复

# same thing, 1 million replications
d2 = replicate(n = 1e6, runif(100, max = 0.1, min = 1e-10))
mean(colSums(d2 < 1e-4) == 0)
# [1] 0.90481

因此,对于1MM复制, runif()几乎可以完全满足期望。 偏离预期0.90481 - 0.90479 = 0.00002 我要说的是,绝对没有证据表明runif已损坏。

我们甚至可以为某些重复绘制直方图。 以下是前20个:

par(mfrow = c(4, 5), mar = rep(0.4, 4))
for (i in 1:20) {
    hist(d[, i], main = "", xlab  = "", axes = F, 
         col = "gray70", border = "gray40")
}

看起来很均匀

直方图每个显示10条,因此每个条的宽度约为.01 (因为总范围约为0.1)。 您感兴趣的范围约为0.0001宽。 要在直方图中看到这一点,我们需要绘制每个图1,000条,是条数的100倍。 当只有100个值时,使用1,000个bin并没有多大意义。 当然,几乎所有的垃圾箱都是空的,尤其是最低的垃圾箱,如我们上面计算的,大约90%的时间都是空的。

要获得更低的随机值,您的两个选择是(a)从均匀分布中抽取更多数字,或(b)将权重分布更改为权重更接近于0的数字。您可以尝试指数分布吗? 也许,如果您也想要一个硬上限,那么可以扩展beta分布? 您的另一选择是根本不使用随机值,也许您想要均匀分布的值,而seq是您要寻找的东西?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM