该问题涉及具有不同样本大小和概率的多项分布的有效采样.下面我描述了我使用的方法,但想知道它是否可以通过一些智能矢量化来改进.
我正在模拟多个群体中的生物传播.人口中的个体有可能j分散到人口.鉴于种群1的初始丰度为10 ,分别对种群1,2和3 进行分散的可能性,我们可以用以下方法模拟分散过程:ip[i, j]c(0.1, 0.3, 0.6)rmultinom
set.seed(1)
rmultinom(1, 10, c(0.1, 0.3, 0.6))
# [,1]
# [1,] 0
# [2,] 3
# [3,] 7
Run Code Online (Sandbox Code Playgroud)
我们可以扩展这个来考虑n源群:
set.seed(1)
n <- 3
p <- replicate(n, diff(c(0, sort(runif(n-1)), 1)))
X <- sample(100, n)
Run Code Online (Sandbox Code Playgroud)
上面p是从一个群体(列)移动到另一个群体(行)的概率矩阵,并且X是初始种群大小的向量.现在可以模拟分散在每对种群(以及它们所在的种群)之间的个体数量:
sapply(seq_len(ncol(p)), function(i) {
rmultinom(1, X[i], p[, i])
})
# [,1] [,2] [,3]
# [1,] 19 42 11
# [2,] 8 18 43
# [3,] 68 6 8
Run Code Online (Sandbox Code Playgroud)
其中 …