2017-10-28 138 views
2

我想弄清楚的set.seed()功能R.如何工作是什麼set.seed(n)和set.seed(N + 1)

我很好奇之間的真正區別時是否set.seed(3)set.seed(4)這些更可能會產生重複的樣本比如果set.seed(3)set.seed(100)

如果是的話,多少獨特的樣本set.seed(3)可以生成,樣品在比賽中通過set.seed(4)出現之前產生的?

如果沒有,可以我得出結論,在set.seed(n)不同n不只要它們是不同意味着什麼?

聽說有關獨立隨機流的東西嗎?這是n有關嗎?

如果是,我怎麼能定義一個獨立的隨機流? 我已經閱讀What does the integer while setting the seed mean?,但它看起來不回答我的問題。

+2

哎喲...這很難回答,因爲它取決於潛在的PRNG。通常你會希望任何2顆種子都是兩個不同的PRNG路徑......如果用獨特的種子播種(無論是1和2還是1和1000),這對兩個獨立的流也是足夠的......但實際上播種是困難的,而純粹的MersenneTwister實現可能會懲罰你獲得獨立的流使用2種不同的種子(同時保持每個其他參數;可能隱藏在R中,不變)。你的問題也非常非正式且很難對待(*在比賽之前產生... *)更精確! – sascha

+2

這也可能有其他幫助:https://stats.stackexchange.com/questions/86285/random-number-set-seedn-in-r – stringsn88keys

回答

4

也讓我嘗試做一個簡短的簡單的答案。我確實相信這兩個評論是有用的。

有時我們需要在我們的程序隨機數。計算機依靠算法生成隨機數。因此,我們可以選擇重新生成隨機數序列。這對於複製某些作品非常有用。在R中,如果我們使用

sed.seed(42) 
runif(5) 

在任何時候,它總會給出相同的隨機數序列。

預計不會有set.seed(n)set.seed(n+1)set.seed(n1)set.seed(n2)之間的關係。或者,預計set.seed(3)不會迭代的次數,反之亦然後產生的set.seed(4)流。

所以,在一般情況下,人們可以治療由不同的種子產生的是獨立的隨機數的序列。

0

對於由兩種不同的種子產生的隨機數字流之間的關係作出任何假設,除非底層隨機數發生器記錄了這種關係,否則這是一個壞主意。例如,我很驚訝地得知,默認梅森,倍捻機RNG就像這樣:

> set.seed(0) 
> x <- runif(10) 
> set.seed(1) 
> y <- runif(10) 
> x[2:10] == y[1:9] 
[1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE 

我還沒有發現這種用於任何其他對種子值的行爲,但是這足以嚇我遠離做出假設。

如果您關心這些問題,請閱讀parallel軟件包中的nextRNGStreamnextRNGSubStream函數。這些旨在生成.Random.seed值,從而產生獨立的隨機數字流。

相關問題