为什么这些不相同?
#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.
答案 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