当我中的R runif(100,max=0.1, min=1e-10)
运行余得到100个均匀分布的随机变量0.1和0.0001之间。所以,在0.0001和最小值之间没有随机值(min=1e-10
)。
如何在整个区间(最小值和最大值之间)生成均匀随机变量?生成均匀随机变量时下限为接近零
回答
(编辑与1e-10
更换exp(-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个值时,使用1000个垃圾箱没有多大意义。当然,几乎所有的垃圾箱都是空的,特别是最低的垃圾箱在我们上面计算的时间里大约有90%是空的。为了得到更低的随机值,你的两个选择是(a)从统一中抽取更多的数字或(b)将分布更接近0的分布。你可以试试指数分布吗?或者,也许,如果你想要一个硬性上限,你可以扩展一个beta版本?你的另一种选择是根本不使用随机值,也许你想要均匀分布的值,seq
是你在找什么?
也许你没有产生足以令它可能不够,你见过一个:
> 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样本中的几率是...(其实你可以从准确的数量和均匀分布的特性来解决这一问题)。
运行runif(200,max = 0.1,min = exp(-10)),得到0.000451和0.09921之间非常好的分布值。我在这两个值之间做了15个块,其中每个块包含10到15个这些生成的值。并且有0个值小于0.000451。所以,我的最小 - 最大间隔的一半没有被这些数据覆盖,而另一半是非常好的填充。 如果我生成$ 1e^{6} $个随机变量,那么我将得到一些较小的值,但是...在整个区间内没有均匀分布。 – novi
“*我的最小 - 最大间隔的一半没有被覆盖*”这个平面错误。您的比例从'exp(-10)= 4.5e-5'变为'0.1',总间隔宽度为'0.0999546'。您的观测值从'0.000451'到'0.09921',观测值为'0.098759'。以观察到的总宽度的比率,你有98.8%的覆盖率!你是否想要随机值均匀分布在对数尺度*上? – Gregor
我打字不好。最小值是0.0000000001或类似的东西(而不是像我写的exp(-10))。对不起。我没有复制 - >粘贴R代码(我应该这样做)。 – novi
- 1. 非均匀随机数生成器
- 2. Omnet ++均匀随机数生成
- 3. 产生不均匀的伪随机数
- 4. 非均匀随机发生器
- 5. 为什么这个随机变量没有均匀分布?
- 6. 随机均匀分布
- 7. 随机均匀分布
- 8. 随机生成变量名?
- 9. 在接近线性时间内均匀分布的随机拓扑排序
- 10. 实时生成(泊松?)随机变量
- 11. 如何生成均匀分布的随机DFA?
- 12. 用于生成均匀分布的随机位集的方法
- 13. 在给定范围内生成均匀随机偏差
- 14. 生成500行随机数,30行,均匀分布
- 15. 生成均匀分布(逆变换)
- 16. 均匀分布的随机数
- 17. 使随机数均匀在C++
- 18. 随机均匀选择像素
- 19. 随机均匀森林回归
- 20. 非均匀分布的随机数组
- 21. 随机点不是均匀分布
- 22. 生成不同的随机变量
- 23. Java - 生成随机数,限制生成的数量
- 24. 在C++的特定范围内生成随机均匀可分的数字?
- 25. Java使用Possion/Gaussian /指数/几何/均匀分布生成随机数
- 26. 生成没有零的随机数
- 27. 生成随机长度的零
- 28. MATLAB - 生成随机向量
- 29. 通过平均5个均匀样本的正态随机数?
- 30. 长时间均匀分布的随机数
你是什么意思的“随机变量”? – Hugh
实现一个随机变量 – novi
你上一轮的编辑对我来说似乎很奇怪......“值”是复数,而不是单数......你的最后一句话是一个问题......但无论如何...... –