В чем заключается истинное различие между множеством.семя (n) и множество.семя (n+1)


Я пытаюсь выяснить, как set.seed() функция работает в R.

Мне интересно, если set.seed( 3 ) и set.seed( 4 ) они с большей вероятностью будут генерировать дубликаты образцов, чем если set.seed( 3 ) и set.seed( 100 )?

Если да, то сколько уникальных выборок может сгенерировать set.seed( 3 ), Прежде чем появится совпадение в выборках, сгенерированных set.seed( 4 )?

Если нет, то могу ли я заключить, что другой n в set.seed( n ) ничего не значит, пока они есть по-другому?

Я слышал что-то связанное с независимым случайным потоком? Это n связано с этим?

Если да , то как я могу определить независимый случайный поток? Я уже читал Что означает целое число при установке семени?, но это, похоже, не отвечает на мои вопросы.

2 2

2 ответа:

Позвольте мне также попытаться дать краткий простой ответ. Я действительно считаю эти два замечания полезными.

Иногда нам нужны случайные числа в наших программах. Компьютер полагается на алгоритм для генерации случайных чисел. Из-за этого у нас есть возможность воссоздать последовательность генерируемых случайных чисел. Это очень полезно при воспроизведении чьей-то работы. В 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 Mersenne-Twister действует следующим образом:

> 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
Я не заметил такого поведения ни для одной другой пары исходных значений, но этого было достаточно, чтобы отпугнуть меня от предположений.

Если вам не все равно об этих проблемах вы должны прочитать о функциях nextRNGStream и nextRNGSubStream в пакете parallel. Они предназначены для генерации значений .Random.seed, которые приводят к независимым потокам случайных чисел.