Я нашел то, что я считаю неустойчивым поведением (но для которого я надеюсь, что есть простое объяснение) в R
использовании семян в сочетании с rbinom()
, когда используется prob=0.5
. Общая идея. Для меня, если я установил семя, запустите rbinom()
один раз (т.е. Выполните один случайный процесс), несмотря на то, что установлено значение prob
, случайный
семя должно меняться на один шаг. Затем, если я снова установил семя в одно и то же значение и запустил еще один случайный процесс (например, rbinom()
снова, но, возможно, с другим значением prob
), семя снова должно измениться до того же значения, что и для предыдущего одиночного случайного процесса.
Я нашел, что R
делает именно это, пока я использую rbinom()
с любым prob!=0.5
. Вот пример:
Сравните вектор-семестр, .Random.seed
, для двух вероятностей, отличных от 0,5:
set.seed(234908)
x <- rbinom(n=1,size=60,prob=0.4)
temp1 <- .Random.seed
set.seed(234908)
x <- rbinom(n=1,size=60,prob=0.3)
temp2 <- .Random.seed
any(temp1!=temp2)
> [1] FALSE
Сравнить вектор-семпл, .Random.seed
, для prob = 0.5 vs. prob!= 0.5:
set.seed(234908)
x <- rbinom(n=1,size=60,prob=0.5)
temp1 <- .Random.seed
set.seed(234908)
x <- rbinom(n=1,size=60,prob=0.3)
temp2 <- .Random.seed
any(temp1!=temp2)
> [1] TRUE
temp1==temp2
> [1] TRUE FALSE TRUE TRUE TRUE TRUE TRUE
> [8] TRUE TRUE TRUE TRUE TRUE TRUE TRUE
...
Я нашел это для всех сравнений prob=0.5
против всех других вероятностей
в множестве {0,1, 0,2,..., 0,9}. Аналогично, если я сравню любые значения prob
с
{0,1, 0,2,..., 0,9}, кроме 0,5, вектор .Random.seed
всегда является поэтапным. Эти факты справедливы и для нечетного или даже size
в пределах rbinom()
.
Чтобы сделать его еще более странным (я извиняюсь, что это немного запутанно - это имеет отношение к тому, как моя функция написана), когда я использую вероятности, сохраненные как элементы в векторе, у меня такая же проблема, если 0.5 является первым элементом, но не второй. Вот пример для этого случая:
Первый случай: 0.5 - первая вероятность, на которую ссылается вектор
set.seed(234908)
MNAR <- c(0.5,0.3)
x <- rbinom(n=1,size=60,prob=MNAR[1])
y <- rbinom(n=1,size=50,prob=MNAR[2])
temp1 <- .Random.seed
set.seed(234908)
MNAR <- c(0.1,0.3)
x <- rbinom(n=1,size=60,prob=MNAR[1])
y <- rbinom(n=1,size=50,prob=MNAR[2])
temp2 <- .Random.seed
any(temp1!=temp2)
> [1] TRUE
any(temp1!=temp2)
> [1] TRUE FALSE TRUE TRUE TRUE TRUE TRUE
> [8] TRUE TRUE TRUE TRUE TRUE TRUE TRUE
Второй случай: 0.5 - вторая вероятность, указанная в векторе
set.seed(234908)
MNAR <- c(0.3,0.5)
x <- rbinom(n=1,size=60,prob=MNAR[1])
y <- rbinom(n=1,size=50,prob=MNAR[2])
temp1 <- .Random.seed
set.seed(234908)
MNAR <- c(0.1,0.3)
x <- rbinom(n=1,size=60,prob=MNAR[1])
y <- rbinom(n=1,size=50,prob=MNAR[2])
temp2 <- .Random.seed
any(temp1!=temp2)
> [1] FALSE
Опять же, я считаю, что, несмотря на значения, используемые для prob
и size
, этот шаблон сохраняется. Может ли кто-нибудь объяснить эту тайну мне? Это вызывает проблему, потому что результаты, которые должны быть одинаковыми, различаются, потому что семя по какой-либо причине используется/вычисляется по-разному, когда prob=0.5
, но ни в каком другом экземпляре.