当前位置: 首页 > 知识库问答 >
问题:

rbinom(Prob=0.5)在R中的不稳定种子行为

糜宜民
2023-03-14

我发现,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

比较seed vector.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
...
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

同样,我发现尽管probsize使用了值,但这种模式仍然有效。有人能给我解释一下这个谜吗?这造成了一个很大的问题,因为本应相同的结果却出现了不同,因为在prob=0.5时,种子的使用/计算方式不同,但在其他情况下没有。

共有1个答案

贺英悟
2023-03-14

所以让我们把我们的评论变成一个答案。感谢Ben Bolker为我们提供了正确的代码链接:https://svn.r-project.org/r/trunk/src/nmath/rbinom.c,并建议查找unif_rand()的调用位置。

快速扫描,代码似乎被分成了两个部分,由注释分隔:

/*-------------------------- np = n*p >= 30 : ------------------- */

/*---------------------- np = n*p < 30 : ------------------------- */
# these end up in the same state
rbinom(n=1,size=60,prob=0.4) # => np <  30
rbinom(n=1,size=60,prob=0.3) # => np <  30

# these don't
rbinom(n=1,size=60,prob=0.5) # => np >= 30
rbinom(n=1,size=60,prob=0.3) # => np <  30

# these don't
{rbinom(n=1,size=60,prob=0.5)  # np >= 30
 rbinom(n=1,size=50,prob=0.3)} # np <  30
{rbinom(n=1,size=60,prob=0.1)  # np <  30
 rbinom(n=1,size=50,prob=0.3)} # np <  30

# these do
{rbinom(n=1,size=60,prob=0.3)  # np <  30
 rbinom(n=1,size=50,prob=0.5)} # np <  30
{rbinom(n=1,size=60,prob=0.1)  # np <  30
 rbinom(n=1,size=50,prob=0.3)} # np <  30
 类似资料:
  • 问题内容: 下面的代码(几乎相同)在Linux下可以计算页面浏览量,但在Windows下可以将页面浏览量提高一倍。 有人能弄清楚为什么吗? 在Mingw下: 这可能是错误吗? 跟进: 实际上,如果我为另一个页面定义了其他处理程序,例如: Wich没有闭包,也没有增加任何东西,计数器无论如何都会增加,但是只有+1: 因此,仍然在Mingw的领导下: 在Linux下,输出如下所示: 问题答案: 我怀疑

  • 我正在构建一个ASP.NET web应用程序,使用ajax请求一些内容,它在FireFox、Chrome中工作得很好,但在IE中不稳定:当使用登录时,他/她可以查看所有者文件,如果不登录页面返回字符串“No Permission”。 我登录了网站,我在IE中刷新页面,有时它显示文件,有时它显示“没有权限”(未登录)我再次刷新它显示文件。我的意思是,有些要求它工作正确,有些要求它工作错误!我已经看到

  • 我一直在玩KivyPong教程,了解框架的最新情况,看看是否可以实现一些想法。我已经删除了大部分乒乓球功能,所以我只能在屏幕上显示弹跳球,并添加了一些代码来生成屏幕上的多个弹跳球,在触摸时生成。效果很好。然后,我添加了一些额外的画布说明,因此我将绘制一条线,指示球移动的方向。这就是事情变得奇怪的地方。第一个球的动作就像它应该做的一样,在屏幕上弹跳。但接下来的任何点击都会产生球,球会离开屏幕,随机改

  • 问题内容: 目前,我正在Jenkins中构建和测试我的应用。如果作业中的测试失败,则将构建标记为“不稳定”。即使测试失败,是否有可能将构建标记为“稳定”?如果代码未编译,则将构建标记为“失败”,这很好。 问题答案: 有一个名为Jenkins Text Finder的插件:https : //wiki.jenkins-ci.org/display/JENKINS/Text- finder+Plugi

  • 请查看testng.xml并建议 我想运行2个类(下面提到),但面临一些挑战,因为它在下面提到的2个场景下显示了一些不稳定的行为。 这些测试类下的方法具有组和优先级 **目标是使用组运行这些测试 Scenario1:当我使用Threadcount=1时; [test name=“autopracticee”parallel=“classes”thread-count=“1”] 以下是行为: 1.1

  • 我从geofabrik.de下载了我国家的OSM数据,成功地将其导入到安装在Ubuntu 16.04上的PostgreSQL 9.6中,并使用了几次。我还创建了Web应用程序,它可以正常工作。所以我决定添加另一个功能,从一些点返回最近的特殊点(例如餐馆)。对于一个最近的点,它可以工作,但是当我想要返回它们的数组时,它不工作。于是我分解了自己的问题,发现了奇怪的行为。当我执行以下查询: 它返回: 当