Schätzung der Populationsgröße anhand der Häufigkeit der Stichproben von Duplikaten und Unikaten

14

Es gibt einen Webservice, über den ich Informationen zu einem zufälligen Artikel anfordern kann. Für jede Anfrage hat jeder Artikel die gleiche Chance, zurückgeschickt zu werden.

Ich kann weiterhin Artikel anfordern und die Anzahl der Duplikate und Unikate aufzeichnen. Wie kann ich diese Daten verwenden, um die Gesamtzahl der Artikel zu schätzen?

hoju
quelle
2
Was Sie schätzen möchten, ist nicht eine Stichprobengröße, sondern die Größe einer Grundgesamtheit (Gesamtzahl der vom Webservice zurückgegebenen eindeutigen Elemente).
GaBorgulya

Antworten:

8

Dies ist im Wesentlichen eine Variante des Problems des Gutscheinsammlers.

Wenn insgesamt n Elemente vorhanden sind und Sie eine Stichprobengröße s mit Ersatz genommen haben, ist die Wahrscheinlichkeit, u eindeutige Elemente identifiziert zu haben ,

Pr(U=u|n,s)=S2(s,u)n!(n-u)!ns
wogibtStirling Zahlen der zweiten ArtS2(s,u)

Alles was Sie jetzt brauchen , ist eine vorherige Verteilung für Pr(N=n) , gelten Bayes - Theorem und eine hintere Verteilung erhalten N .

Henry
quelle
Dies scheint einige Informationen zu verlieren, da die Häufigkeit, mit der Elemente 2, 3, 4, ... Mal beobachtet wurden, nicht berücksichtigt wird .
whuber
2
@whuber: Möglicherweise werden die Informationen nicht verwendet. Wenn Sie jedoch weitere Untersuchungen durchführen, sollten Sie feststellen, dass die Anzahl der eindeutigen Elemente eine ausreichende Statistik darstellt. Wenn Sie beispielsweise eine Stichprobe mit dem Ersatz von 4 Elementen aus einer Grundgesamtheit von , beträgt die Wahrscheinlichkeit, dass 3 von einem Element und 1 von einem anderen erhalten werden, 4n , dass 2 jeweils zwei Punkte zu bekommen, egalwasnist, so die detaillierten Frequenzenwissenüber die Bevölkerung nicht mehr nützliche Informationen gibtals nurwissenin der Probe gefunden zwei Unikate waren. 43n
Henry
Interessanter Punkt zur ausreichenden Anzahl von Unikaten. Die Frequenzen können also zur Überprüfung der Annahmen (von Unabhängigkeit und gleicher Wahrscheinlichkeit) dienen, sind aber ansonsten nicht erforderlich.
whuber
5

Ich habe bereits einen Vorschlag gemacht, der auf Stirling-Zahlen der zweiten Art und Bayes'schen Methoden basiert.

Für diejenigen, die Stirling-Zahlen zu groß oder Bayes'sche Methoden zu schwierig finden, könnte eine gröbere Methode sein

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

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

und mit numerischen Methoden zurückrechnen.

Zum Beispiel mit GaBorgulya des am Beispiel und ein beobachtetes U = 265 , dies könnte uns eine Schätzung geben n1180 für die Bevölkerung.s=300U=265n^1180

Wenn das die Population gewesen wäre, hätte es uns eine Varianz für von ungefähr 25 gegeben, und zwei willkürliche Standardabweichungen auf beiden Seiten von 265 wären ungefähr 255 und 275 (wie gesagt, dies ist eine grobe Methode). 255 hätte uns eine Schätzung für n ungefähr 895 gegeben, während 275 ungefähr 1692 gegeben hätte. Die 1000 des Beispiels liegt bequem innerhalb dieses Intervalls. Un

Henry
quelle
1
(+1) Es ist interessant zu bemerken, dass wenn das Verhältnis sehr klein ist, im Wesentlichen keine Informationen über n vorliegen können und man daher nicht erwarten kann, n sehr gut abzuschätzen . Wenn s / n sehr groß ist, ist U ein guter Schätzer. Wir brauchen also etwas, das im mittleren Bereich funktioniert. s/nnns/nU
Kardinal
Auch wobei f k ( x ) = k i = 0 x i / i ! ist die Taylorreihennäherung k- ter Ordnung an e x . Mit k =1(11/n)s(1fk(s/n))/fk(s/n)fk(x)=i=0kxi/i!kex gibt einen Schätzer ˜ n = sk=1. Eine Kontinuitätskorrektur für kleineskann durch Hinzufügen einer Konstanten (wie 1) im Nenner erhalten werden. Dieser Schätzer ist nicht so gut für das Beispiel als numerisch zur Lösung n , wie Sie getan haben, though. n~=ssUUsn^
Kardinal
3

Sie können die Capture-Recapture-Methode verwenden , die auch als Rcapture R-Paket implementiert ist .


Hier ist ein Beispiel, das in R codiert ist. Nehmen wir an, dass der Webdienst N = 1000 Elemente enthält. Wir werden n = 300 Anfragen stellen. Erzeugen Sie eine Zufallsstichprobe, wobei die Elemente von 1 bis k nummeriert werden, wobei k die Anzahl der verschiedenen Elemente ist, die wir gesehen haben.

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

Das Ergebnis der Simulation ist

  1   2   3 
234  27   4 

Unter den 300 Anfragen gab es also 4 Artikel, die dreimal gesehen wurden, 27 Artikel, die zweimal gesehen wurden und 234 Artikel, die nur einmal gesehen wurden.

Schätzen Sie nun N aus dieser Stichprobe:

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

Das Ergebnis:

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

So wird nur das Mh Chao Modell konvergiert, es wird geschätzt N 1262,7 =. N^


BEARBEITEN: Um die Zuverlässigkeit der obigen Methode zu überprüfen, habe ich den obigen Code für 10000 generierte Samples ausgeführt. Das Mh Chao-Modell konvergierte jedes Mal. Hier ist die Zusammenfassung:

> 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
GaBorgulya
quelle
Es scheint eine Rechtfertigung für die Verwendung von Capture-Recapture-Modellen erforderlich zu sein, da dies kein Standard-Capture-Recapture-Experiment ist. (Möglicherweise kann es als 300 Capture-Ereignisse angesehen werden, aber der Aufruf von closedp scheint dies nicht anzuzeigen.)
whuber
@whuber Ja, ich habe das Beispiel als 300 Capture-Ereignisse angesehen. Wie meinst du das "der Anruf bei closedp scheint das nicht anzuzeigen"? Ich schätze (konstruktive) Kritik und bin gerne bereit, meine Antwort zu korrigieren (oder gegebenenfalls zu löschen), wenn sich herausstellt, dass sie falsch ist.
GaBorgulya
Dies scheint ein vernünftiger Ansatz zu sein. Allerdings werde ich R nicht verwenden, daher muss ich die Mathematik dahinter verstehen. Die Wiki-Seite behandelt eine Situation mit zwei Ereignissen - wie wende ich sie auf diesen Fall an?
Hoju
1
@Ga Ich verstehe: Sie haben eine 300 x 300-Matrix für die Daten erstellt! Die Ineffizienz dieses Codes hat mich getäuscht: Es wäre einfacher und direkter, `closedp.0 (Y, dfreq = TRUE, dtype =" nbcap ", t = 300) 'zu verwenden, wobei Y die Frequenzmatrix ist {{1,234}, {2,27}, {3,4}} (die Sie zweimal berechnet und tatsächlich angezeigt haben!) Genauer gesagt sind die Konvergenzfehler alarmierend, was darauf hindeutet, dass es Probleme mit dem zugrunde liegenden Code oder den zugrunde liegenden Modellen gibt. (Eine erschöpfende Suche in den Dokumenten nach "M0"
ergibt
1
@whuber Ich habe den Code nach Ihrem Vorschlag vereinfacht (dfreq = TRUE, dtype = "nbcap", t = 300). Danke noch einmal.
GaBorgulya