通过重复观察的数量估计被抽样的总体规模

机器算法验证 r 采样 期望最大化
2022-03-05 02:48:56

假设我有 5000 万个独特的事物,我抽取了 1000 万个样本(有替换)......我附上的第一张图显示了我对同一个“事物”进行了多少次抽样,这是相对罕见的人口比我的样本大。

但是,如果我的人口只有 1000 万个东西,并且我采集了 1000 万个样本,那么如第二张图所示,我将更频繁地重复采样同一件事。

我的问题是 - 从我的观察频率表(条形图中的数据)是否有可能在未知时估算原始人口规模?如果你能提供一个关于如何在 R 中解决这个问题的指针,那就太好了。

替代文字

3个回答

加文怎么样?

问题是我们不知道观察到了多少个零计数。我们必须对此进行估计。用于此类情况的经典统计程序是期望最大化算法。

一个简单的例子:

假设我们从泊松常数为 0.2 的未知人口(1,000,000)中抽取数据。

counts <- rpois(1000000, 0.2)
table(counts)

     0      1      2      3      4      5
818501 164042  16281   1111     62      3

但是我们没有观察到零计数。相反,我们观察到这一点:

table <- c("0"=0, table(counts)[2:6])

table

     0      1      2      3      4      5
     0 164042  16281   1111     62      3

观察到的可能频率

k <- c("0"=0, "1"=1, "2"=2, "3"=3, "4"=4, "5"=5)

初始化泊松分布的均值 - 猜测一下(我们知道这里是 0.2)。

lambda <- 1 
  1. 期望 - 泊松分布

    P_k <- lambda^k*exp(-lambda)/factorial(k)
    P_k
                  0           1           2           3           4           5
    0.367879441 0.367879441 0.183939721 0.061313240 0.015328310 0.003065662  
    n0 <- sum(table[2:6])/(1 - P_k[1]) - sum(table[2:6])
    
    
    n0
           0
    105628.2     
    table[1] <-  105628.2
    
  2. 最大化

    lambda_MLE <- (1/sum(table))*(sum(table*k))        
    lambda_MLE        
    [1] 0.697252        
    lambda <- lambda_MLE
    
  3. 第二次迭代

    P_k <- lambda^k*exp(-lambda)/factorial(k)        
    n0 <- sum(table[2:6])/(1 - P_k[1]) - sum(table[2:6])       
    table[1] <-  n0 
    lambda <- (1/sum(table))*(sum(table*k))
    
    
    
     population lambda_MLE
    
    [1,] 361517.1 0.5537774

现在迭代直到收敛:

for (i in 1:200) {  
P_k <- lambda^k*exp(-lambda)/factorial(k)  
n0 <- sum(table[2:6])/(1 - P_k[1]) - sum(table[2:6])
table[1] <-  n0
lambda <- (1/sum(table))*(sum(table*k))
}
cbind( population = sum(table), lambda_MLE)
     population lambda_MLE
[1,]    1003774  0.1994473

我们的人口估计是 1003774,我们的泊松率估计是 0.1994473 - 这是抽样人口的估计比例。在您处理的典型生物学问题中,您将遇到的主要问题是假设泊松率是一个常数。

很抱歉这篇冗长的帖子 - 这个 wiki 并不适合 R 代码。

这听起来像是“标记和重新捕获”又名“捕获-重新捕获”的一种形式,这是生态学(以及其他一些领域,如流行病学)中的一种众所周知的技术。不是我的领域,而是维基百科上关于标记和重新捕获的文章看起来很合理,尽管您的情况不是林肯-彼得森方法解释的情况。

我认为 shabbychef 是适合您情况的正确方法之一,但是使用泊松分布来近似二项式可能会使事情变得更简单,并且如果人口规模非常大,应该是一个非常好的近似值,如您的示例所示。我认为获得人口规模的最大似然估计的明确表达应该非常简单(再次参见例如维基百科),尽管我现在没有时间计算细节。

您可以通过二项分布进行估计。如果个对象(次有放回的绘制,则一个对象在一次绘制中被绘制一次的概率为现在把它想象成一个硬币翻转。次试验个正面(即个重复)的概率将此乘以以获得预期的观察次数(您的绘图)。对于较大,从数据中退出可能有点麻烦,但对于较小的nkkP=1kmmn(nm)Pm(1P)nmnnkm项等于,您可能会做得很好(1P)1

编辑:解决数字问题的一种可能方法是查看计数比率。也就是说,如果个正面的概率,那么等于然后查看数据中重复计数的比率以获得的多个估计值,然后取中位数或平均值。PmmPm/Pm+1(k1)m+1nmk