是什么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?,但它看起来不回答我的问题。
也让我尝试做一个简短的简单的答案。我确实相信这两个评论是有用的。
有时我们需要在我们的程序随机数。计算机依靠算法生成随机数。因此,我们可以选择重新生成随机数序列。这对于复制某些作品非常有用。在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
软件包中的nextRNGStream
和nextRNGSubStream
函数。这些旨在生成.Random.seed
值,从而产生独立的随机数字流。
哎哟...这很难回答,因为它取决于潜在的PRNG。通常你会希望任何2颗种子都是两个不同的PRNG路径......如果用独特的种子播种(无论是1和2还是1和1000),这对两个独立的流也是足够的......但实际上播种是困难的,而纯粹的MersenneTwister实现可能会惩罚你获得独立的流使用2种不同的种子(同时保持每个其他参数;可能隐藏在R中,不变)。你的问题也非常非正式且很难对待(*在比赛之前产生... *)更精确! – sascha
这也可能有其他帮助:https://stats.stackexchange.com/questions/86285/random-number-set-seedn-in-r – stringsn88keys