繁体   English   中英

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( 3 )可以产生,所产生的样品在比赛之前set.seed( 4 )出现?

如果不是这样,我可以断定,不同nset.seed( n )不,只要它们是不同意味着什么?

我听到了与独立随机流相关的内容吗? 这个n与此有关吗?

如果是 ,如何定义独立的随机流? 我已经读过设置种子的整数是什么意思? ,但看起来并不能回答我的问题。

让我也尝试给出一个简单的答案。 我相信这两个评论是有用的。

有时我们的程序中需要随机数。 计算机依靠一种算法来生成随机数。 因此,我们可以选择重新创建所生成的随机数序列。 这对于复制某人的作品非常有用。 在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)在多次迭代后不会生成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值,这些值导致独立的随机数流。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM