set.seed(n) 和 set.seed(n+1) 之间的真正区别是什么

What is the true difference between set.seed(n) and set.seed(n+1)

我正在尝试了解 set.seed() 函数在 R 中的工作原理。

我很好奇 set.seed( 3 )set.seed( 4 ) 是否比 set.seed( 3 )set.seed( 100 ) 更可能生成重复样本?

如果是,set.seed( 4 ) 生成的样本中出现匹配之前,set.seed( 3 ) 可以生成多少个独特样本?

如果不是, 我可以得出结论,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) 的流,反之亦然。

因此,一般来说,可以将不同种子生成的随机数序列视为独立的。

我认为对两个不同种子产生的随机数流之间的关系做出任何假设都是一个坏主意,除非底层随机数生成器记录了这种关系。例如,我惊讶地发现默认的 Mersenne-Twister 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 值,从而产生独立的随机数流。