r - R 中的种子限制

标签 r random-seed

R 中关于 set.seed 的共识是它有效地生成一长串由种子预先确定的伪随机数。然后,您对该序列进行的第一次调用(使用您使用的第一个非确定性函数)从该序列中获取第一批,第二次调用获取下一批,依此类推。

我想知道这有什么限制。具体来说,当你到达那个长序列的末尾时会发生什么?比方说,设置种子后,您会重复从前 100 个整数中采样。是否会出现一个点,您开始生成与开始时看到的相同的样本(以相同的顺序)?这需要多长时间? (它取决于种子吗?)如果不是,如何到达序列的“结尾”并大概绕回开头 list ?

最佳答案

R 中的 ?RNGkind 帮助页面提供了有关默认随机数生成器“Mersenne Twister”算法的更多详细信息:

"Mersenne-Twister": From Matsumoto and Nishimura (1998); code updated in 2002. A twisted GFSR with period 2^19937 - 1 and equidistribution in 623 consecutive dimensions (over the whole period). The ‘seed’ is a 624-dimensional set of 32-bit integers plus a current position in that set.

如此处所述,“周期”(返回开始并开始重复值所需的时间长度为 2^19937-1,或大约 10^(19937/log2(10)) = 10^6001。

  • 如果您的“批处理”大小恰好与周期完全一致,那么您确实会再次开始获得相同的批处理。
  • 我不确定 R 使用多少伪随机样本从集合中选择大小为 1 的样本。理想情况下,它仅为 1(因此您的“批量大小”将为 1),但它可能更多地取决于采样算法的普遍性/复杂性。
  • 我知道 runif() 或多或少直接从 PRNG 转换而来,因此一系列 runif() 调用确实会完全重复。

关于r - R 中的种子限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61923723/

相关文章:

r - 按组划分的 stat_summary 问题

c++ - 如何在不同线程中随机播种

c - 如何仅为一个随机数生成器生成不同的随机数并保持其他随机数生成器相同

javascript - 在 Javascript 中播种随机数生成器

python - 使用 tf.set_random_seed 在 Tensorflow 中可重现结果

R:有什么方法可以让我在 Windows 中自动更新我的 R 吗?

使用正则表达式通过 readr 读取列

R - 测试 string1 第一次出现后是否跟着 string2

python - 为什么 numpy 随机种子没有保持固定但 RandomState 在并行运行时是?

r - 使用另一个逻辑矩阵在矩阵中设置NA