Tekrarlanan gözlem sayısı ile örneklenen bir popülasyonun büyüklüğünü tahmin edin


13

Diyelim ki 50 milyon eşsiz şeyden oluşan bir popülasyonum var ve 10 milyon örnek alıyorum (değiştirerek) ... İlk grafik ekli olduğum, aynı "şeyi" kaç kez örneklediğimi gösteriyor. popülasyon örneklemden daha büyük.

Ancak popülasyonum sadece 10 milyon şeyse ve 10 milyon örnek alırsam, ikinci grafikte aynı şeyi tekrar tekrar örnekleyeceğim.

Benim sorum şu - frekans gözlemler tablomdan (çubuk grafiklerdeki veriler), bilinmeyen bir durumda orijinal popülasyon büyüklüğü hakkında bir tahmin almak mümkün mü? Ve R'de bunun hakkında nasıl gideceğinize dair bir işaretçi sunmanız harika olurdu.

alternatif metin


Yanıtlar:


10

Garvan nasıl?

Sorun şu ki kaç tane sıfır sayım gözlendiğini bilmiyoruz. Bunu tahmin etmeliyiz. Böyle durumlar için klasik bir istatistiksel prosedür Beklenti-Maksimizasyon algoritmasıdır.

Basit bir örnek:

Poisson sabiti 0.2 olan bilinmeyen bir popülasyondan (1.000.000) çekim yaptığımızı varsayalım.

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

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

Ama sıfır sayımını gözlemlemiyoruz. Bunun yerine şunu gözlemliyoruz:

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

table

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

Olası frekanslar gözlendi

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

Poisson dağılımını başlangıçta yapın - sadece bir tahmin edin (burada 0.2 olduğunu biliyoruz).

lambda <- 1 
  1. Beklenti - Poisson Dağılımı

    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. maksimizasyon

    lambda_MLE <- (1/sum(table))*(sum(table*k))        
    lambda_MLE        
    [1] 0.697252        
    lambda <- lambda_MLE
    
  3. İkinci yineleme

    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

Şimdi yakınsamaya kadar tekrarlayın:

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

Nüfus tahminimiz 1003774 ve poisson oranımız 0.1994473 olarak tahmin ediliyor - bu, örneklenen nüfusun tahmini oranı. Karşılaştığınız tipik biyolojik problemlerde karşılaşacağınız temel sorun, poisson oranının sabit olduğu varsayımıdır.

Uzun soluklu yazı için üzgünüm - bu wiki R kodu için gerçekten uygun değil.


3
Kodunuzu vurgulayın ve ikili sayılara benzeyen düğmeyi tıklayın ...
Shane

8

Bu, ekolojide (ve epidemiyoloji gibi diğer bazı alanlarda) iyi bilinen bir teknik olan 'işaretleme ve yeniden yakalama', yani 'yakalama-yeniden yakalama' biçimine benziyor. Benim durumum değil , mark ve recapture hakkındaki Wikipedia makalesi makul görünüyor, ancak durumunuz Lincoln-Petersen yönteminin açıkladığı konu değil.

Bence shabbychef durumunuz için doğru yollardan biri, ancak Poisson dağılımını binomu yaklaşık olarak kullanmak muhtemelen işleri biraz daha basit hale getirecek ve örneklerinizdeki gibi nüfus büyüklüğü çok büyükse çok iyi bir yaklaşım olmalıdır. Nüfus büyüklüğünün maksimum olabilirlik tahmini için açık bir ifade elde etmenin o zaman oldukça basit olması gerektiğini düşünüyorum (örneğin tekrar Wikipedia'ya bakın ), ancak şu anda ayrıntıları çözmek için zamanım yok.


5

Bir binom dağılımı aracılığıyla tahmin yapabilirsiniz. Varsa den, değiştirme ile, çizer (nesneler bilinmeyen), bir nesnenin olasılığı, tek bir beraberlik kez çizilmiş olduğunu . Bunu şimdi bir coinflip olarak düşünün. denemede tam olarak kafalarının (yani kopyaları) olasılığı . Beklenen sayıda sayıyı elde etmek için bunu ile çarpın (çiziminiz). Büyük için, verilerden çıkarmak biraz kıllı olabilir , ancak küçükk k P = 1nkk mmnP=1kmmn(nm)Pm(1P)nmnnkm, muhtemelen teriminin eşit olduğunu varsayarak iyi yapabilirsiniz .(1P)1

edit : sayısal sorunları düzeltmek için olası bir yolu sayım oranlarına bakmaktır. Yani, kafa çizme olasılığı ise , ye eşittir . Ardından, birden fazla tahminini almak için verilerinizdeki yinelenen sayım oranlarına bakın , ardından medyanı veya ortalamayı alın.PmmPm/Pm+1(k1)m+1nmk

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.