當我中的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. Omnet ++均勻隨機數生成
- 2. 均勻分佈的隨機數生成
- 3. 非均勻隨機數生成器
- 4. 產生不均勻的僞隨機數
- 5. 非均勻隨機發生器
- 6. 爲什麼這個隨機變量沒有均勻分佈?
- 7. 隨機均勻分佈
- 8. 隨機均勻分佈
- 9. 如何生成一個接近零的隨機數?
- 10. 隨機生成變量名?
- 11. 在接近線性時間內均勻分佈的隨機拓撲排序
- 12. 生成500行隨機數,30行,均勻分佈
- 13. 從均勻分佈生成隨機數的最快方法python
- 14. 生成均勻分佈的隨機排列的算法
- 15. 生成均勻分佈的僞隨機數在C++
- 16. 用於生成均勻分佈的隨機位集的方法
- 17. 生成一個邊緣均勻分佈的隨機圖
- 18. 如何生成均勻分佈的隨機DFA?
- 19. 在矩形內(均勻地)生成隨機點?
- 20. 生成一個非均勻分佈的隨機數
- 21. 在CUDA設備上生成均勻的雙隨機數
- 22. 製作CURAND從均勻分佈生成不同的隨機數
- 23. 在給定範圍內生成均勻隨機偏差
- 24. 生成的環(環)內的均勻隨機點
- 25. 實時生成(泊松?)隨機變量
- 26. 通過Matlab創建一個均勻分佈的隨機變量
- 27. 生成均勻分佈(逆變換)
- 28. 隨機數,具有不均勻分佈
- 29. 使隨機數均勻在C++
- 30. 均勻分佈的隨機數
你是什麼意思的「隨機變量」? – Hugh
實現一個隨機變量 – novi
你上一輪的編輯對我來說似乎很奇怪......「值」是複數,而不是單數......你的最後一句話是一個問題......但無論如何...... –