【问题标题】:How to simulate a Polya urn (Martingale) like problem?如何模拟 Polya urn (Martingale) 之类的问题?
【发布时间】:2021-11-24 06:12:41
【问题描述】:

在一个村庄里有 N=100 人,他们用一个 关于一些动作的有趣方式。具体来说,如果有人提议 一个动作,然后所有 N 个村民投票赞成或反对。这 第二天每个村民独立地重新调整她/他的意见 其他村民,再次投票的概率等于 前一天的总(最大)支持者的概率。这个 投票过程一直持续到所有 N=100 人都同意相同的意见为止。

问题:

必须经过多少投票日才能让所有 N 个村民投票相同?

我的努力

答案必须是所需的迭代次数。

我想在 R 中模拟这个过程,这是一个类似于 Polya Urn 的过程(我相信),但这里我们没有红色 =1 和绿色 = 1 个球在骨灰盒中。我们有 N 个球(选民)。

此外,我们在 X_{0} 的第一天有随机的 i 人在 YES 和 j 人在 NO。

因此我们有 p = i/N 和 q =j/n。

现在每个村民将在第二天再次投票,但概率等于前一天的最大概率。 类似的东西

votevillage <- function(n) {
  i = sample(1:N,1);i
  j = N-i;j
  p = i/N;p
  q = 1-p;q
  support = max(i,j)
  while (support != n) {
    vote = sample(c("YES","NO"),1,prob=c(1-p,p))
    support = support + vote
  }
  if (vote == "YES") 
    return(1) 
  else 
    return(0)
}   

n = 100
trials =  100000
simlist = replicate(trials, votevillage(n))
mean(simlist)

上面的代码是错误的。这是我的想法(类似于伪代码)。

【问题讨论】:

  • 只需要 1 天的投票。您可能想改写您的实际问题。
  • 不会。因为下一个投票日,还有对方的支持者。
  • 如果他们都在第一天投票支持同一件事,则不会。也许需要添加更多约束,但我没有看到任何阻止它的东西,问题只询问了必须通过的天数。对于一件每个人都同意的事情,只有一天。即使在第一天没有一致投票,两天也是可能的。
  • 所以也许你只需要重新考虑你提出的问题或提供更多限制。
  • @Dason 有趣...!!!您能否提供一个模拟您的方法,证明这需要 1 或 2 天?

标签: r for-loop simulation


【解决方案1】:

正如 cmets 中提到的,这当然取决于yes 第一轮选民的分布情况(如果所有村民在第一轮投票yes (no) 整个选举只持续 1 天。

以下几行显示了如何模拟投票:

nr_of_yes_votes <- function(prob, N) {
   rbinom(1, N, prob)
}

nr_of_days_until_unanimity <- function(x0, N) {
   i <- 1
   x <- x0
   while (x < N && x > 0) {
      p <- x / N
      x <- nr_of_yes_votes(p, N)
      i <- i + 1
   }
   i
}

simulate <- function(prob0, N = 100, seed = 123, reps = 10000) {
   set.seed(seed)
   x0 <- nr_of_yes_votes(prob0, N)
   mean(replicate(reps, nr_of_days_until_unanimity(x0, N)))
}

simulate(.5) ## 137.9889
simulate(0)  ## 1
simulate(1)  ## 1

直觉上,一开始的分歧越多,达成一致所需的时间就越长。此外,问题是对称的。因此,我们预计在第一次投票中存在最大分歧时天数达到峰值(对应于0.5 的初始投票概率)并且随着我们接近01)对称下降)。

这可以用以下几行很好地显示:

ns <- vapply((p0 <- seq(0, 1, by = .01)), simulate, numeric(1))
plot(p0, ns, type = "l", xlab = expression(Prob[0]), 
     ylab = "Expected Days")

【讨论】:

    猜你喜欢
    • 2019-03-08
    • 1970-01-01
    • 2019-09-04
    • 1970-01-01
    • 2010-10-28
    • 1970-01-01
    • 2011-04-25
    • 2012-07-19
    • 2011-11-06
    相关资源
    最近更新 更多