Làm thế nào để tôi tính toán nếu mức độ chồng chéo giữa hai danh sách là đáng kể?


9

Nếu tôi có hai danh sách A và B, cả hai đều là tập hợp con của danh sách C lớn hơn nhiều, làm thế nào tôi có thể xác định xem mức độ trùng lặp của A và B có lớn hơn tôi mong đợi không?

Tôi có nên chỉ chọn ngẫu nhiên các phần tử từ C có cùng độ dài như danh sách A và B và xác định sự trùng lặp ngẫu nhiên đó và thực hiện nhiều lần để xác định một loại giá trị p hoặc giá trị thực nghiệm? Có cách nào tốt hơn để kiểm tra điều này?


Bạn nên sử dụng câu trả lời của Colin, ý tưởng của bạn về việc mô phỏng Monte Carlo cũng đúng.

Câu trả lời:


9

Nếu tôi hiểu chính xác câu hỏi của bạn, bạn cần sử dụng phân phối Hypergeometric . Phân phối này thường được liên kết với các mô hình urn, tức là có quả bóng trong một chiếc bình, được sơn màu đỏ và bạn vẽ quả bóng từ chiếc bình. Sau đó, nếu là số lượng bóng trong mẫu của bạn có màu đỏ, có phân phối siêu hình học.nymXmX

Ví dụ cụ thể của bạn, hãy , và biểu thị độ dài của ba danh sách của bạn và để cho biểu thị sự chồng chéo giữa và . Sau đónAnBnCnABAB

nABHG(nA,nC,nB)

Để tính giá trị p, bạn có thể sử dụng lệnh R này:

#Some example values
n_A = 100;n_B = 200; n_C = 500; n_A_B = 50
1-phyper(n_A_B, n_B, n_C-n_B, n_A)
[1] 0.008626697

Lời cảnh báo. Hãy nhớ nhiều thử nghiệm, nghĩa là nếu bạn có nhiều danh sách AB , thì bạn sẽ cần điều chỉnh giá trị p của mình bằng một hiệu chỉnh. Ví dụ, các hiệu chỉnh FDR hoặc Bonferroni.


2

Câu trả lời của csgillespie có vẻ đúng ngoại trừ một điều: nó đưa ra xác suất nhìn thấy chính xác hơn n_A_B trong phần trùng lặp, P (x> n_A_B), nhưng tôi nghĩ OP muốn pvalue P (x> = n_A_B). Bạn có thể nhận được sau

n_A = 100;n_B = 200; n_C = 500; n_A_B = 50
phyper(n_A_B - 1, n_A, n_C-n_A, n_B, lower.tail = FALSE) 

+1 cho lower.tail=FALSE. Giá trị p rất nhỏ (<1e-16) bị cắt bớt.
Backlin
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.