【问题标题】:Generating various sized lists based on the negative binomial distribution基于负二项分布生成各种大小的列表
【发布时间】:2017-02-15 22:06:37
【问题描述】:

我希望根据数字序列(即 0 0 1 0 1 0 1...)创建多个列表,直到有 10 次负二项分布的成功试验。我显然不太了解列表函数,因为我当前的代码没有检索到任何有价值的东西:

z = as.list(supply(1:10, function(x) rnbinom(inf, 10, 1/x)))

概率需要按照序列 1/n 变化,n=1,2,...,10,“实验”一直持续到 10 次成功,然后结果(“1 1 1 1 1 1例如,1 1 1 1" 将是第一个,因为需要列出 Pr=1)。

【问题讨论】:

  • lapply(seq(10), function(x){rbinom(10, 1, 1/x)})?您的代码中有一些有问题的拼写错误,并要求rbinom 提供无穷大的数字,这会导致问题。
  • 我希望试验一直持续到 10 次成功,所以我将无限量放在那里。所以有些序列会比其他序列有更大的结果。
  • rbinom 不是这样工作的;你必须事先告诉它你想要多少个数字。您可以使用while 循环和cumsum 来做到这一点,但这是非常不明智的;可能更好地制作太多数字然后子集。

标签: r list


【解决方案1】:

您需要了解rnbinom 实际返回的是模拟的失败次数,而不是试验的顺序。因此,要根据随机的失败次数进行模拟,您需要 repfailures (0) 通过返回的失败次数,在 9 次成功 (1) 中随机播放,并以成功结束(总共 10 次) .

例如,prob=0.5

 c(sample(c(rep(1,10-1),rep(0,times=rnbinom(1,10,0.5)))),1)

应用逆概率列表

lapply(1:10,function(x) c(sample(c(rep(1,10-1),rep(0,times=rnbinom(1,10,1/x)))),1))

另一种方法是模拟足够数量的试验本身,然后截断到所需的成功次数。

x <- rbinom(100,1,0.5)
x[cumsum(x)<=10]

一个适当的实现将通过模拟额外的试验来连接来处理没有产生足够成功的极端情况。

【讨论】:

  • 好的,我明白我在哪里看错了,这很有帮助 - 谢谢
猜你喜欢
  • 2018-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-03
  • 2010-11-28
  • 1970-01-01
  • 2013-03-12
  • 2017-05-17
相关资源
最近更新 更多