Ước tính quy mô dân số từ tần suất trùng lặp và mẫu đơn


14

Có một dịch vụ web nơi tôi có thể yêu cầu thông tin về một mục ngẫu nhiên. Đối với mỗi yêu cầu, mỗi mục có cơ hội được trả lại như nhau.

Tôi có thể tiếp tục yêu cầu các mục và ghi lại số lượng trùng lặp và duy nhất. Làm cách nào tôi có thể sử dụng dữ liệu này để ước tính tổng số mục?


2
Những gì bạn muốn ước tính không phải là kích thước mẫu, mà là kích thước của dân số (tổng số mục duy nhất được trả về bởi sercice web).
GaBorgulya

Câu trả lời:


8

Đây thực chất là một biến thể của vấn đề người sưu tập phiếu giảm giá.

Nếu có mặt hàng trong tổng số và bạn đã thực hiện một kích thước mẫu với thay thế sau đó xác suất đã xác định mặt hàng duy nhất là trong đó đưa ra số Stirling của loại thứ hais 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)

Bây giờ tất cả bạn cần là một bản phân phối trước cho , áp dụng định lý Bayes, và có được một phân bố sau cho .NPr(N=n)N


Điều này dường như làm mất một số thông tin vì nó không tính đến tần số mà các mục được quan sát 2, 3, 4, ... lần.
whuber

2
@whuber: Có vẻ như không sử dụng thông tin, nhưng nếu bạn điều tra thêm, bạn sẽ thấy rằng số lượng vật phẩm duy nhất là một thống kê đầy đủ. Ví dụ: nếu bạn lấy một mẫu có thay thế 4 vật phẩm từ dân số , xác suất nhận được 3 của một mặt hàng và 1 của một mặt hàng khác là có được 2 mặt hàng trong hai mặt hàng, không có vấn đề gì được, vì vậy biết các tần số cụ thể không đưa ra thông tin hữu ích hơn về dân số vì chỉ biết có hai mặt hàng độc đáo được tìm thấy trong mẫu. 4n n43n
Henry

Điểm thú vị về sự đầy đủ của số lượng các mặt hàng độc đáo. Vì vậy, các tần số có thể phục vụ như một kiểm tra về các giả định (tính độc lập và xác suất bằng nhau), nhưng nếu không thì không cần thiết.
whuber

5

Tôi đã đưa ra một gợi ý dựa trên số Stirling của loại thứ hai và phương pháp Bayes.

Đối với những người tìm thấy số Stirling quá lớn hoặc phương pháp Bayes quá khó, có thể sử dụng phương pháp khó hơn

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

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

và tính toán ngược bằng phương pháp số.

Ví dụ: lấy ví dụ của GaBorgulya với và được quan sát , điều này có thể cho chúng ta ước tính cho dân số.U = 265 n1180s=300U=265n^1180

Nếu đó là dân số thì nó sẽ cho chúng ta phương sai với khoảng 25, và hai độ lệch chuẩn tùy ý ở hai bên là 265 và 275 (như tôi đã nói, đây là một phương pháp thô). 255 sẽ ban cho chúng ta một ước tính cho khoảng 895, trong khi 275 sẽ cho khoảng 1692. Của dụ 1000 là thoải mái trong khoảng thời gian này. nUn


1
(+1) Thật thú vị khi lưu ý rằng nếu tỷ lệ rất nhỏ thì về cơ bản không có thông tin nào về và vì vậy người ta không thể mong đợi làm tốt việc ước tính . Nếu rất lớn thì là một công cụ ước tính tốt. Vì vậy, chúng tôi cần một cái gì đó hoạt động trong một tầm trung. s/nnns/nU
Đức hồng y

Ngoài ra trong đólà xấp xỉ chuỗi Taylor thứ cho . Sử dụng đưa ra một ước lượng . Có thể thu được hiệu chỉnh liên tục cho các nhỏ bằng cách thêm hằng số (như 1) vào mẫu số. Công cụ ước tính này không làm tốt cho ví dụ như giải quyết bằng số cho như bạn đã làm. 1(11/n)s(1fk(s/n))/fk(s/n)fk(x)=i=0kxi/i!kexk=1n~=ssUUsn^
Đức hồng y

3

Bạn có thể sử dụng phương pháp chụp-bắt lại , cũng thực hiện như gói Rcapture R .


Dưới đây là một ví dụ, được mã hóa trong R. Hãy giả sử rằng dịch vụ web có N = 1000 mục. Chúng tôi sẽ thực hiện n = 300 yêu cầu. Tạo một mẫu ngẫu nhiên trong đó, đánh số các phần tử từ 1 đến k, trong đó k là có bao nhiêu mục khác nhau mà chúng ta đã thấy.

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

Kết quả của mô phỏng là

  1   2   3 
234  27   4 

do đó, trong số 300 yêu cầu, có 4 mục được nhìn thấy 3 lần, 27 mục được nhìn thấy hai lần và 234 mục chỉ được nhìn thấy một lần.

Bây giờ ước tính N từ mẫu này:

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

Kết quả:

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

Do đó, chỉ có mô hình Mh Chao hội tụ, ước tính = 1262.7. N^


EDIT: Để kiểm tra độ tin cậy của phương pháp trên, tôi đã chạy đoạn mã trên trên 10000 mẫu được tạo. Mô hình Mh Chao hội tụ mọi lúc. Dưới đây là tóm tắt:

> 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

Có vẻ như một số biện minh cho việc sử dụng các mô hình bắt giữ là cần thiết, bởi vì đây không phải là một thử nghiệm thu hồi bắt giữ tiêu chuẩn. (Có thể nó có thể được xem là 300 sự kiện chụp, nhưng cuộc gọi đóng cửa dường như không chỉ ra điều đó.)
whuber

@whuber Có, tôi đã xem ví dụ là 300 sự kiện chụp. Làm thế nào để bạn có nghĩa là "cuộc gọi đến đóng cửa dường như không chỉ ra điều đó"? Tôi đánh giá cao những lời chỉ trích (mang tính xây dựng) và tôi rất vui lòng sửa (hoặc xóa nếu cần) câu trả lời của tôi nếu nó trở thành sai.
GaBorgulya

Đây có vẻ là một cách tiếp cận hợp lý. Tuy nhiên tôi sẽ không sử dụng R nên cần phải hiểu các phép toán đằng sau nó. Trang wiki bao gồm một tình huống 2 sự kiện - làm thế nào để tôi áp dụng nó cho trường hợp này?
hoju

1
@Ga Tôi thấy: Bạn đã tạo ma trận 300 x 300 cho dữ liệu! Sự không hiệu quả của mã này đã đánh lừa tôi: sẽ đơn giản và trực tiếp hơn khi sử dụng `closp.0 (Y, dfreq = TRUE, dtype =" nbcap ", t = 300) 'trong đó Y là ma trận tần số {{1,234}, {2,27}, {3,4}} (mà bạn đã tính hai lần và thực sự hiển thị!). Hơn nữa, các lỗi hội tụ là đáng báo động, cho thấy có vấn đề với mã hoặc mô hình cơ bản. (Chức năng tìm kiếm đầy đủ các tài liệu cho "M0" lần lượt lên không có tham chiếu hoặc mô tả cho phương pháp này ...)
whuber

1
@whuber Tôi đã đơn giản hóa mã theo đề xuất của bạn (dfreq = TRUE, dtype = "nbcap", t = 300). Cảm ơn một lần nữa.
GaBorgulya
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.