【问题标题】:Allocation of individuals by probability distribution通过概率分布分配个体
【发布时间】:2014-09-11 09:45:42
【问题描述】:

我遇到了按区域分配个人的问题。为了简化这一点,假设我们有 5 个集合,每个集合都有一个给定的(并且减少的)人口。

S1=1000
S2=100
S3=50
S4=25
S5=5

我想将这些人口分配到区域(例如,10 个区域 Z1-Z10)。每个区域都有一个给定的概率来容纳集合中的个体。

以矩阵形式:

N<-matrix(prob,nrow=5,ncol=10)

每组的 N 个概率类似于:

0.15  0.05  0.1  0.05 0.05  0.2  0.01 0.09  0.15  0.15
...........
0.15  0.05  0.1  0.05 0.05  0.2  0.01 0.09  0.15  0.15

我想知道每个区域的每个集合的最终人口。第一排没有问题,因为人口很多。只需将 1000 乘以概率:

S1分配OK:

150  50  100  50 50 200 10  90  150  150  (individuals)

但是,当您设置 S3 时,请弹出。 50,四舍五入并不容易,因为某些区域会少于 1 个:

S3 分配:

7.5   2.5  5  2.5  2.5  10  0.5 4.5 7.5  7.5 (individuals)

您甚至可能会获得只有 1 个人被分配到 10 个区域之一的潜在集合。

如何使用 R (sample(data,size,prob)) 或类似函数中的 sample 函数来生成计算每个区域的整数个数的分配矩阵?

NB:显然在真正的问题中没有。区域的数量要高得多,并且每个区域的概率各不相同。

提前致谢,开发者

【问题讨论】:

    标签: r distribution sample


    【解决方案1】:

    您可以使用rmultinom 进行采样。例如rmultinom(1, S1, prob)。要获得所需的矩阵,只需在 sapply 中使用它。

    t(sapply(c(S1, S2, S3, S4, S5), 
             rmultinom, 
             n=1, 
             prob=prob))
    

    编辑:尚不完全清楚您的四舍五入标准是什么。这里有两种可能:

    fct <- function(s, prob, method=c("multinom", "maxima")){
      method <- match.arg(method)
      sp <- s*prob
      res <- floor(sp)
      if (sum(res) < s) {
        size <- s-sum(res)
        prob <- sp-res
        if (method=="multinom")
          # rmultinom version
          res <- res + rmultinom(n=1, size=size, prob=prob) 
        if (method=="maxima"){
          # maximum version
          rnk <- rank(prob, ties="random")
          res[rnk <= size] <- res[rnk <= size] + 1
        }
      }
      return(res)
    }
    t(sapply(c(S1, S2, S3, S4, S5), fct, prob=prob, method="mult"))
    t(sapply(c(S1, S2, S3, S4, S5), fct, prob=prob, method="max"))
    

    【讨论】:

    • 谢谢,非常巧妙。我从来没有听说过多项式函数!
    • 我可以加一点“但是”吗?假设您需要分配的一致性:概率为 0.15 的区域将在 1000 个人中获得 150 个人,这是完美的。问题来了,因为当使用 rmultinom 时,你可以得到 150 或 127!理想情况下,我正在尝试分配正确的 # 个人进行四舍五入,当一个区域的概率
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-20
    • 2011-09-30
    • 1970-01-01
    • 1970-01-01
    • 2022-06-27
    • 1970-01-01
    相关资源
    最近更新 更多