Nüfus büyüklüğünü örneklenen kopyaların ve benzersizlerin sıklığından tahmin etme


14

Rastgele bir öğe hakkında bilgi talep edebileceğim bir web hizmeti var. Her talep için, her ürün iade edilme şansına sahiptir.

Öğeleri talep etmeye devam edebilir ve yinelenen ve benzersiz sayısını kaydedebilirim. Toplam veri sayısını tahmin etmek için bu verileri nasıl kullanabilirim?


2
Tahmin etmek istediğiniz şey bir örneklem büyüklüğü değil, nüfusun büyüklüğüdür (web sercice tarafından döndürülen toplam benzersiz öğe sayısı).
GaBorgulya

Yanıtlar:


8

Bu aslında kupon toplayıcı sorununun bir çeşididir.

Toplamda öğe varsa ve değiştirilen bir örnek boyutu s aldıysanız, u benzersiz öğeleri tanımlama olasılığı P r ( U = u | n , s ) = S 2 ( s , u ) n !nsu buradaS2(s,u)ikinci türdeki Stirling sayılarınıverir

Pr(U=u|n,s)=S2(s,u)n!(nu)!ns
S2(s,u)

Şimdi tek ihtiyacınız olan için bir önceki dağılım , Bayes teoremini uygulayın ve N için bir posterior dağılım elde edin .Pr(N=n)N


Bu, bazı bilgilerin kaybedildiği görülüyor çünkü 2, 3, 4, ... kez gözlenen sıklıkları hesaba katmıyor.
whuber

2
@whuber: Bilgileri kullanmıyor gibi görünebilir, ancak daha fazla araştırma yaparsanız, benzersiz öğe sayısının yeterli bir istatistik olduğunu bulmalısınız. Örneğin, bir popülasyondan 4 öğenin değiştirilmesi ile bir örnek alırsanız , bir öğeden 3, diğerinden 1 elde etme olasılığı 4'tür.n nne olursa olsun, her iki maddeden2'sini elde etmek, bu yüzden ayrıntılı frekansları bilmek, örnekte bulunan iki benzersiz öğenin olduğunu bilmekten daha fazla popülasyon hakkında daha fazla bilgi vermez. 43n
Henry

Eşsiz eşya sayısının yeterliliği hakkında ilginç bir nokta. Dolayısıyla, frekanslar varsayımlar üzerinde bir kontrol görevi görebilir (bağımsızlık ve eşit olasılık), ancak aksi halde gereksizdir.
whuber

5

Zaten ikinci tür Stirling sayılarına ve Bayesian yöntemlerine dayalı bir öneri verdim.

Stirling sayılarını çok büyük veya Bayesian yöntemlerini çok zor bulanlar için daha kaba bir yöntem kullanmak olabilir

E[U|n,s]=n(1(11n)s)

var[U|n,s]=n(11n)s+n2(11n)(12n)sn2(11n)2s

ve sayısal yöntemler kullanarak geri hesaplar.

s=300U=265n^1180

Un


1
s/nnns/nU

1(11/n)s(1fk(s/n))/fk(s/n)fk(x)=i=0kxi/i!kexk=1n~=ssUUsn^

3

Rcapture R paketi olarak da uygulanan yakalama-yeniden yakalama yöntemini kullanabilirsiniz .


Burada R ile kodlanmış bir örnek var. Diyelim ki web hizmetinde N = 1000 öğe var. N = 300 talepte bulunacağız. Rastgele bir örnek oluşturun, burada elemanlar 1'den k'ya numaralandırılır, burada k kaç farklı öğe gördüğümüzdür.

N = 1000; population = 1:N # create a population of the integers from 1 to 1000
n = 300 # number of requests
set.seed(20110406)
observation = as.numeric(factor(sample(population, size=n,
  replace=TRUE))) # a random sample from the population, renumbered
table(observation) # a table useful to see, not discussed
k = length(unique(observation)) # number of unique items seen
(t = table(table(observation)))

Simülasyonun sonucu

  1   2   3 
234  27   4 

300 talep arasında 3 kez 4 madde, iki kez 27 madde ve sadece bir kez 234 madde görülmüştür.

Şimdi bu örnekten N değerini tahmin edin:

require(Rcapture)
X = data.frame(t)
X[,1]=as.numeric(X[,1])
desc=descriptive(X, dfreq=TRUE, dtype="nbcap", t=300)
desc # useful to see, not discussed
plot(desc) # useful to see, not discussed
cp=closedp.0(X, dfreq=TRUE, dtype="nbcap", t=300, trace=TRUE)
cp

Sonuç:

Number of captured units: 265 

Abundance estimations and model fits:
                  abundance       stderr      deviance   df           AIC
M0**                  265.0          0.0  2.297787e+39  298  2.297787e+39
Mh Chao              1262.7        232.5  7.840000e-01    9  5.984840e+02
Mh Poisson2**         265.0          0.0  2.977883e+38  297  2.977883e+38
Mh Darroch**          553.9         37.1  7.299900e+01  297  9.469900e+01
Mh Gamma3.5**  5644623606.6  375581044.0  5.821861e+05  297  5.822078e+05

 ** : The M0 model did not converge
 ** : The Mh Poisson2 model did not converge
 ** : The Mh Darroch model did not converge
 ** : The Mh Gamma3.5 model did not converge
Note: 9 eta parameters has been set to zero in the Mh Chao model

N^


DÜZENLEME: Yukarıdaki yöntemin güvenilirliğini kontrol etmek için yukarıdaki kodu 10000 üretilen örnek üzerinde çalıştırdım. Mh Chao modeli her seferinde yakınlaştı. İşte özet:

> round(quantile(Nhat, c(0, 0.025, 0.25, 0.50, 0.75, 0.975, 1)), 1)
    0%   2.5%    25%    50%    75%  97.5%   100% 
 657.2  794.6  941.1 1034.0 1144.8 1445.2 2162.0 
> mean(Nhat)
[1] 1055.855
> sd(Nhat)
[1] 166.8352

Yakalama-yeniden yakalama modellerinin kullanımı için bir gerekçe var gibi görünüyor, çünkü bu standart bir yakalama-yeniden yakalama deneyi değil. (Muhtemelen 300 yakalama olayı olarak görülebilir, ancak closedp çağrısı bunu göstermiyor gibi görünüyor.)
whuber

@whuber Evet, örneği 300 yakalama olayı olarak gördüm. Ne demek "kapalıp çağrısı bunu gösteriyor gibi görünmüyor"? (Yapıcı) eleştiriyi takdir ediyorum ve yanlış olduğu takdirde cevabımı düzeltmekten (veya gerekirse silmekten) memnunum.
GaBorgulya

bu makul bir yaklaşım gibi görünüyor. Ancak ben R kullanmayacağım, bu yüzden arkasındaki matematik anlamak gerekir. Wiki sayfası 2 olay durumunu kapsar - bu duruma nasıl uygularım?
hoju

1
@Ga Anlıyorum: Veri için 300 x 300 matris oluşturdunuz! Bu kodun verimsizliği beni kandırdı: Y'nin {{1,234} {2,27}, {3,4}} (iki kez hesapladığınız ve gerçekten görüntülediğiniz!). Daha da önemlisi, yakınsama hataları endişe vericidir, bu da altta yatan kod veya modellerle ilgili sorunlar olduğunu gösterir. ( "M0" için dokümanların kapsamlı bir şekilde araştırılması, bu yöntem için hiçbir referans veya açıklama
getirmez

1
@whuber Önerinizi izleyen kodu basitleştirdim (dfreq = TRUE, dtype = "nbcap", t = 300). Tekrar teşekkürler.
GaBorgulya
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.