การประมาณขนาดประชากรจากความถี่ของรายการซ้ำและตัวอย่างที่ไม่ซ้ำกัน


14

มีบริการบนเว็บที่ฉันสามารถขอข้อมูลเกี่ยวกับรายการแบบสุ่ม สำหรับทุกคำขอแต่ละรายการมีโอกาสเท่ากับการส่งคืน

ฉันสามารถขอรายการและบันทึกจำนวนรายการซ้ำและไม่ซ้ำกันได้ ฉันจะใช้ข้อมูลนี้เพื่อประมาณจำนวนรายการทั้งหมดได้อย่างไร


2
สิ่งที่คุณต้องการประเมินไม่ใช่ขนาดตัวอย่าง แต่ขนาดของประชากร (จำนวนทั้งหมดของรายการที่ไม่ซ้ำกันที่ส่งคืนโดยเว็บ sercice)
GaBorgulya

คำตอบ:


8

นี่คือตัวแปรของปัญหาของตัวสะสมคูปอง

หากมีรายการในทั้งหมดและคุณได้ถ่ายขนาดตัวอย่างด้วยการเปลี่ยนแล้วน่าจะเป็นของที่มีการระบุรายการที่ไม่ซ้ำเป็น โดยที่ให้ตัวเลข Stirling ของชนิดที่สอง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)

ตอนนี้สิ่งที่คุณต้องมีการกระจายก่อนสำหรับใช้ Bayes ทฤษฎีบทและได้รับการกระจายหลังสำหรับNNPr(N=n)N


สิ่งนี้ดูเหมือนว่าจะสูญเสียข้อมูลบางส่วนเนื่องจากไม่ได้คำนึงถึงความถี่ที่มีการตรวจสอบรายการ 2, 3, 4, ... ครั้ง
whuber

2
@whuber: ดูเหมือนว่าจะไม่ใช้ข้อมูล แต่ถ้าคุณตรวจสอบเพิ่มเติมคุณควรพบว่าจำนวนรายการที่ไม่ซ้ำกันนั้นเป็นสถิติที่เพียงพอ ตัวอย่างเช่นถ้าคุณนำตัวอย่างที่มีการแทนที่ 4 รายการจากประชากรของความน่าจะเป็นที่จะได้ 3 จากหนึ่งรายการและอีก 1 รายการคือที่ได้รับ 2 รายการจากสองรายการไม่มี ไม่ว่าคืออะไรดังนั้นการรู้ว่ารายละเอียดความถี่ไม่ให้ข้อมูลที่เป็นประโยชน์เกี่ยวกับประชากรมากกว่าเพียงแค่รู้ว่ามีสองรายการที่ไม่ซ้ำกันที่พบในตัวอย่าง 4n 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 ตัวอย่างของ 1,000 นั้นสะดวกสบายภายในช่วงเวลานี้ Un


1
(+1) เป็นที่น่าสนใจที่จะทราบว่าหากอัตราส่วนมีขนาดเล็กมากโดยพื้นฐานแล้วจะไม่มีข้อมูลเกี่ยวกับและดังนั้นจึงไม่มีใครคาดว่าจะทำการประมาณได้เป็นอย่างดี ถ้ามีขนาดใหญ่มากดังนั้นเป็นตัวประมาณที่ดี ดังนั้นเราต้องการบางสิ่งที่ทำงานได้ในระดับกลาง s/nnns/nU
พระคาร์ดินัล

นอกจากนี้ที่เป็น TH-เพื่อเทย์เลอร์ประมาณชุดไป x ใช้ให้ประมาณการU การแก้ไขความต่อเนื่องสำหรับขนาดเล็กสามารถทำได้โดยการเพิ่มค่าคงที่ (เช่น 1) ในตัวส่วน ตัวประมาณนี้ไม่ได้ผลดีสำหรับตัวอย่างการแก้ตัวเลขอย่างที่คุณทำ f k ( x ) = k i = 0 x i / i ! k e x k = 1 ˜ n = s1(11/n)s(1fk(s/n))/fk(s/n)fk(x)=i=0kxi/i!kexk=1s nn~=ssUUsn^
พระคาร์ดินัล

3

คุณสามารถใช้วิธีการจับยึดยังนำมาใช้เป็นแพคเกจ Rcapture R


นี่คือตัวอย่างที่เขียนใน R ลองสมมติว่าเว็บเซอร์วิสมี N = 1,000 รายการ เราจะทำการร้องขอ 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

ดังนั้นมีเพียงแบบจำลอง Mh Chao ที่แปรสภาพมันประมาณ = 1262.7 N^


แก้ไข: เพื่อตรวจสอบความน่าเชื่อถือของวิธีการดังกล่าวฉันวิ่งรหัสข้างต้นใน 10,000 ตัวอย่างที่สร้างขึ้น แบบจำลองเจ้าพระยาบรรจบกันทุกครั้ง นี่คือบทสรุป:

> 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 กิจกรรมการจับภาพ คุณหมายถึงว่า "การโทรไปยัง Closedp ไม่ได้ระบุว่า" ฉันขอขอบคุณการวิจารณ์ (เชิงสร้างสรรค์) และฉันยินดีที่จะแก้ไข (หรือลบหากจำเป็น) คำตอบของฉันหากปรากฏว่าผิด
GaBorgulya

นี่ดูเหมือนจะเป็นแนวทางที่สมเหตุสมผล อย่างไรก็ตามฉันจะไม่ใช้ R ดังนั้นจำเป็นต้องเข้าใจคณิตศาสตร์ที่อยู่เบื้องหลัง หน้า wiki ครอบคลุมสถานการณ์ 2 เหตุการณ์ - ฉันจะนำไปใช้กับกรณีนี้ได้อย่างไร
hoju

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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.