नमूना डुप्लिकेट और uniques की आवृत्ति से जनसंख्या आकार का अनुमान


14

एक वेब सेवा है जहां मैं एक यादृच्छिक आइटम के बारे में जानकारी का अनुरोध कर सकता हूं। प्रत्येक अनुरोध के लिए प्रत्येक आइटम को वापस किए जाने की समान संभावना है।

मैं अनुरोध आइटम रख सकते हैं और डुप्लिकेट की संख्या और अद्वितीय रिकॉर्ड कर सकते हैं। मैं इस डेटा का उपयोग वस्तुओं की कुल संख्या का अनुमान लगाने के लिए कैसे कर सकता हूं?


2
आप जो अनुमान लगाना चाहते हैं, वह एक नमूना आकार नहीं है, बल्कि एक जनसंख्या का आकार (वेब ​​सीरिस द्वारा लौटाए गए अद्वितीय आइटमों की कुल संख्या) है।
GaBorgulya

जवाबों:


8

यह अनिवार्य रूप से कूपन कलेक्टर की समस्या का एक प्रकार है।

यदि कुल में आइटम हैं और आपने प्रतिस्थापन के साथ एक नमूना आकार लिया है, तो पहचाने जाने वाले अद्वितीय आइटम होने की संभावना है जहां दूसरी तरह की स्टर्लिंग संख्या देता हैnsu

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

अब आप सभी की जरूरत लिए एक पूर्व वितरण है, बेस प्रमेय लागू करते हैं, और लिए एक पीछे वितरण प्राप्त करते हैं ।Pr(N=n)N


यह कुछ जानकारी खोने के लिए प्रतीत होता है क्योंकि यह उन आवृत्तियों के लिए जिम्मेदार नहीं है जिनके साथ आइटम 2, 3, 4, ... बार देखे गए थे।
whuber

2
@ वाउचर: यह जानकारी का उपयोग नहीं करने के लिए प्रकट हो सकता है, लेकिन यदि आप आगे की जांच करते हैं, तो आपको यह पता लगाना चाहिए कि अद्वितीय वस्तुओं की संख्या एक पर्याप्त आंकड़ा है। उदाहरण के लिए, यदि आप जनसंख्या से 4 वस्तुओं के प्रतिस्थापन के साथ एक नमूना लेते हैं, तो एक आइटम के 3 और दूसरे के 1 होने की संभावना कि प्रत्येक दो वस्तुओं में से 2 प्राप्त करने के लिए, नहीं कोई फर्क क्या है, इसलिए विस्तृत आवृत्तियों जानते हुए भी कोई बस दो अद्वितीय आइटम थे नमूने में पाया जानने से जनसंख्या के बारे में अधिक उपयोगी जानकारी देता है। n43n
हेनरी

अद्वितीय वस्तुओं की संख्या की पर्याप्तता के बारे में दिलचस्प बिंदु। तो आवृत्तियों मान्यताओं (स्वतंत्रता और समान संभावना) पर एक जांच के रूप में काम कर सकती है, लेकिन अन्यथा अनावश्यक हैं।
whuber

5

मैंने पहले ही दूसरी तरह की स्टर्लिंग संख्या और बायेसियन विधियों के आधार पर एक सुझाव दिया है।

उन लोगों के लिए जो स्टर्लिंग संख्याओं को बहुत बड़े या बायेसियन तरीकों से बहुत मुश्किल पाते हैं, एक कठिन विधि का उपयोग करना पड़ सकता है

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

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

और संख्यात्मक तरीकों का उपयोग करके पीछे की गणना करें।

उदाहरण के लिए, GaBorgulya का उदाहरण और एक मनाया गया , यह हमें जनसंख्या के लिए अनुमानित अनुमान लगा सकता है ।s=300U=265n^1180

अगर वह आबादी होती तो यह हमें लगभग 25 के के लिए एक विचरण देती , और 265 के दोनों ओर एक मनमाना दो मानक विचलन लगभग 255 और 275 होगा (जैसा कि मैंने कहा, यह एक मोटा तरीका है)। 255 हमारे लिए एक अनुमान दिया होता 895 के बारे में है, जबकि 275 1692 के बारे में दिया होता उदाहरण की 1000 आराम से इस अंतराल के भीतर है। Un


1
(+1) यह टिप्पणी करने के लिए दिलचस्प है कि अगर अनुपात बहुत छोटे तो अनिवार्य रूप से के बारे में कोई जानकारी नहीं है मौजूद हो और कर सकते हैं तो एक बहुत अच्छी तरह से करने के लिए का आकलन उम्मीद नहीं कर सकते । यदि बहुत बड़ा है तो एक अच्छा अनुमानक है। तो, हमें कुछ ऐसा चाहिए जो एक मिड-रेंज में काम करे। s/nnns/nU
कार्डिनल

इसके अलावा जहांहै को वें क्रम के टेलर श्रृंखला सन्निकटन । का उपयोग करके एक अनुमानक । हर में एक निरंतर (जैसे 1) जोड़कर छोटे लिए एक निरंतरता सुधार प्राप्त किया जा सकता है। यह अनुमानक उदाहरण के लिए भी नहीं करता है क्योंकि संख्यात्मक रूप से हल करने के लिए जैसा कि आपने किया है, हालांकि। 1(11/n)s(1fk(s/n))/fk(s/n)fk(x)=i=0kxi/i!kexk=1n~=ssUUsn^
कार्डिनल

3

आप कैप्चर- रिकैपचर विधि का उपयोग कर सकते हैं , जिसे Rcapture R पैकेज के रूप में भी लागू किया जा सकता है


यहाँ एक उदाहरण है, R में कोडित। मान लें कि वेब सेवा में N = 1000 आइटम हैं। हम n = 300 अनुरोध करेंगे। एक यादृच्छिक नमूना उत्पन्न करें, जहाँ 1 से k तक के तत्वों को क्रमांकित किया जा रहा है, जहाँ k कितने अलग-अलग आइटमों को हमने देखा है।

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)))

अनुकरण का परिणाम है

  1   2   3 
234  27   4 

इस प्रकार 300 अनुरोधों में 4 आइटम 3 बार देखे गए, 27 आइटम दो बार देखे गए, और 234 आइटम केवल एक बार देखे गए।

अब इस नमूने से एन का अनुमान लगाएं:

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

परिणाम:

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

इस प्रकार केवल एमएच चाओ मॉडल अभिसरण हो गया, यह अनुमान लगाया गया कि = 1262.7। N^


संपादित करें: उपरोक्त विधि की विश्वसनीयता की जांच करने के लिए मैंने 10000 उत्पन्न नमूनों पर उपरोक्त कोड चलाया। Mh Chao मॉडल हर बार परिवर्तित होता है। यहाँ सारांश है:

> 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

ऐसा लगता है कि कैप्चर-रिकैपचर मॉडल के उपयोग के लिए कुछ औचित्य की आवश्यकता है, क्योंकि यह मानक कैप्चर-रिकैपचर प्रयोग नहीं है। (संभवतः यह 300 पर कब्जा घटनाओं के रूप में देखा जा सकता है लेकिन closedp करने के लिए कॉल कि इंगित करने के लिए प्रतीत नहीं होता।)
whuber

@whuber हां, मैंने 300 कैप्चर घटनाओं के रूप में उदाहरण देखा। आप कैसे मतलब करते हैं कि "बंद करने के लिए कॉल इंगित नहीं करता है"? मैं (रचनात्मक) आलोचना की सराहना करता हूं और अगर यह गलत निकला तो मेरा जवाब सही (या यदि आवश्यक हो तो हटा दें) खुश हूं।
GaBorgulya

यह एक उचित दृष्टिकोण लगता है। हालाँकि मैं R का उपयोग नहीं करूँगा इसलिए इसके पीछे के गणित को समझने की आवश्यकता है। विकी पेज में 2 घटना की स्थिति शामिल है - मैं इसे इस मामले में कैसे लागू करूं?
होजू

1
@ मैं देख रहा हूं: आपने डेटा के लिए 300 x 300 मैट्रिक्स बनाया है! इस कोड की अक्षमता ने मुझे बेवकूफ बनाया: यह `shutp.0 (Y, dfreq = TRUE, dtype =" nbcap ", t = 300) का उपयोग करने के लिए और अधिक प्रत्यक्ष होगा, जहां Y आवृत्ति मैट्रिक्स {{1,234} है, {2,27}, {3,4}} (जिसे आपने दो बार गणना की और वास्तव में प्रदर्शित किया है!)। इस बिंदु पर अधिक, अभिसरण विफलताएं खतरनाक हैं, यह सुझाव देते हुए कि अंतर्निहित कोड या मॉडल के साथ समस्याएं हैं। (का एक संपूर्ण खोज डॉक्स "एम 0" के लिए कोई संदर्भ या इस विधि के लिए विवरण जाता ...)
whuber

1
@whuber मैंने आपके सुझाव (dfreq = TRUE, dtype = "nbcap", t = 300) के बाद कोड को सरल बनाया। एक बार फिर धन्यवाद।
गाबोरगुला
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.