임의의 항목에 대한 정보를 요청할 수있는 웹 서비스가 있습니다. 모든 요청에 대해 각 품목은 반품 기회가 동일합니다.
항목을 계속 요청하고 중복 수와 고유 한 수를 기록 할 수 있습니다. 이 데이터를 사용하여 총 품목 수를 추정하려면 어떻게해야합니까?
답변
이것은 본질적으로 쿠폰 수집기 문제의 변형입니다.
이 경우 총 항목 및 샘플 크기 촬영 한 S 로 교체 한 후 확인 한 확률 U 고유 항목이다
P R ( U = U | N , 이야 ) = S 2 ( S , U ) , n은 !
s
u
여기서S2((S)을,U는)부여제 2 종 스털링 번호
S2(s,u)
이제 대한 사전 분포 , Bayes 정리를 적용하고 N에 대한 사후 분포를 구하면 됩니다.
Pr(N=n)N
답변
나는 이미 두 번째 종류의 스털링 수와 베이지안 방법을 기반으로 제안을했습니다.
스털링 숫자가 너무 크거나 베이지안 방법이 너무 어려운 경우 거친 방법을 사용하는 것이 좋습니다
그리고 수치 방법을 사용하여 역 계산.
s=300
U=265
n^≈1180
U
n
답변
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 번의 항목이 2 번, 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^
편집 : 위의 방법의 신뢰성을 확인하기 위해 위의 코드를 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