Оцінка чисельності популяції за частотою вибіркових дублікатів та унікальних даних


14

Є веб-служба, де я можу запитати інформацію про випадковий предмет. Для кожного запиту кожен товар має рівний шанс повернути його.

Я можу продовжувати запитувати предмети та записувати кількість дублікатів та унікальних. Як я можу використовувати ці дані для оцінки загальної кількості позицій?


2
Що ви хочете оцінити, це не розмір вибірки, а чисельність сукупності (загальна кількість унікальних елементів, повернених веб-сервісом).
GaBorgulya

Відповіді:


8

Це, по суті, варіант проблеми збирача купонів.

Якщо всього елементів, і ви взяли зразок розміру із заміною, то ймовірність виявлення унікальних елементів де дає числа Стірлінга другого родуs u P r ( U = u | n , s ) = S 2 ( s , u ) n !nsu S2(s,u)

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

Тепер все , що вам потрібно , це апріорне розподіл для , застосуємо теорему Байеса, і отримати задній розподіл для .NPr(N=n)N


Здається, ця інформація втрачає частину інформації, оскільки вона не враховує частоти, з якою спостерігали елементи 2, 3, 4, ... рази
whuber

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

і зворотний обчислення, використовуючи числові методи.

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 .


Ось приклад, закодований у Р. Припустимо, що веб-служба має 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 - лише один раз.

Тепер оцініть N з цього зразка:

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

N^


EDIT: Щоб перевірити надійність вищевказаного методу, я запустив вищевказаний код на 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 подій захоплення, але, схоже, заклик до закриття не вказує на це.)
whuber

@whuber Так, я розглядав приклад як 300 подій захоплення. Як ви маєте на увазі, що "виклик до закритого типу, схоже, не вказує на це"? Я високо ціную (конструктивну) критику і радий виправити (або видалити, якщо потрібно) свою відповідь, якщо виявиться невірною.
ГаБоргуля

це здається розумним підходом. Однак я не буду використовувати R, тому мені потрібно зрозуміти математику, що стоїть за ним. Сторінка вікі охоплює ситуацію з 2 подіями - як я застосувати її до цього випадку?
ходжу

1
@Ga Я бачу: ви створили матрицю розміром 300 x 300! Неефективність цього коду обдурила мене: було б простіше і пряміше використовувати `closedp.0 (Y, dfreq = TRUE, dtype =" nbcap ", t = 300)", де Y - матриця частоти {{1,234}, {2,27}, {3,4}} (які ви обчислили двічі і фактично відображалися!). Більш того, збої конвергенції насторожують, що дозволяє припустити проблеми з базовим кодом або моделями. (Вичерпний пошук документів для "M0" виявляється, немає посилань та описів цього методу ...)
whuber

1
@whuber Я спростив код після вашої пропозиції (dfreq = TRUE, dtype = "nbcap", t = 300). Знову дякую.
GaBorgulya
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.