'样本'之间的混淆和' rbinom'在R

时间:2016-01-03 21:09:31

标签: r statistics

为什么这些不相同?

#First generate 10 numbers between 0 and .5
set.seed(1)
x <- runif(10, 0, .5)

这是我感到困惑的两个陈述:

#First    
sample(rep(c(0,1), length(x)), size = 10, prob = c(rbind(1-x,x)), replace = F)
#Second
rbinom(length(x), size = 1, prob=x)

我原本试图使用&#39; sample&#39;。我以为我正在做的是生成十(0,1)对,然后分配每个将返回0或1的概率。

第二个工作并给我我需要的输出(试图运行一个sim)。所以我能够解决我的问题。我只是好奇地想知道&#39;示例&#39;这样我就能更好地理解R.

2 个答案:

答案 0 :(得分:2)

第一个区别是参数列表中矢量规范长度的位置。名称size在这两个函数中具有不同的含义。 (我之前没想过这个混乱的来源,我确信自己多次犯了这个错误。)

随机数生成器(以r开头且具有分发后缀)将该选项作为第一个参数,而sample将其作为第二个参数。所以第二个的长度是10,第一个的长度是1.在样本中,绘制来自第一个参数中的值,而'size'是要创建的向量的长度。在rbinom函数中,n是要创建的向量的长度,而size是假设从具有由'prob'确定的分布的理论urn中绘制的项目数。返回的结果是“ones”的数量。尝试:

rbinom(length(x), size = 10, prob=x)

关于prob的论点:我认为你不需要c()

答案 1 :(得分:1)

这两个功能之间的区别非常简单。

想一下洗牌,并从中选择一些卡片。这正是sample模拟的情况。 这段代码,

> set.seed(123)
> sample(1:40, 5)
[1] 12 31 16 33 34

1:40数字向量中随机提取五个数字。

在您的示例中,您设置了size = 1。这意味着您只从可能值池中选择一个元素。如果您设置size = 10,则可以根据需要获得十个值。

set.seed(1)
x <- runif(10, 0, .5)
> sample(rep(c(0,1), length(x)), size = 10, prob = c(rbind(1-x,x)), replace = F)
[1] 0 0 0 0 0 0 0 1 0 1

相反,rbinom函数的目标是模拟结果为“离散”的事件,例如翻转硬币。作为参数,它根据0.5的给定概率考虑试验成功的概率,例如硬币的翻转。在这里,我们模拟100翻转。如果您认为硬币可以叠加以支持某个特定结果,我们可以通过将概率等于0.8来模拟此行为,如下例所示。

> set.seed(123)
> table(rbinom(100, 1, prob = 0.5))
 0  1 
53 47 

> table(rbinom(100, 1, prob = 0.8))
 0  1 
19 81