是什么set.seed(n)和set.seed(N + 1)

问题描述:

我想弄清楚的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

也让我尝试做一个简短的简单的答案。我确实相信这两个评论是有用的。

有时我们需要在我们的程序随机数。计算机依靠算法生成随机数。因此,我们可以选择重新生成随机数序列。这对于复制某些作品非常有用。在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)流。

所以,在一般情况下,人们可以治疗由不同的种子产生的是独立的随机数的序列。

对于由两种不同的种子产生的随机数字流之间的关系作出任何假设,除非底层随机数发生器记录了这种关系,否则这是一个坏主意。例如,我很惊讶地得知,默认梅森,倍捻机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值,从而产生独立的随机数字流。