我发现了我认为在R
使用种子rbinom()
时会出现的不稳定行为(但我希望有一个简单的解释) prob=0.5
。总体思路:对我来说,如果我设置种子,运行rbinom()
一次(即执行一个随机过程),不管prob
设置什么值,随机种子应该改变一个增量。然后,如果我再次将种子设置为相同的值,并运行另一个随机过程(例如rbinom()
再次,但可能使用不同的值prob
),种子应该再次更改为与之前的单个随机过程相同的值.
我发现R
只要我使用rbinom()
any就可以做到这一点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 与 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
and的值,但size
这种模式仍然成立。谁能给我解释一下这个谜?这引起了相当大的问题,因为应该相同的结果会出现不同的结果,因为由于某种原因,种子的使用/计算方式不同,prob=0.5
但在其他情况下没有。