2つのリスト間の重複の程度が重要かどうかを計算するにはどうすればよいですか?


9

2つのリストAとBがあり、どちらもはるかに大きなリストCのサブセットである場合、AとBのオーバーラップの程度が偶然に予想するよりも大きいかどうかをどのように判断できますか?

リストAおよびBと同じ長さのCから要素をランダムに選択し、そのランダムな重複を決定し、これを何回か実行して、ある種または経験的なp値を決定する必要がありますか?これをテストするより良い方法はありますか?


あなたはコリンの答えを使うべきです、それでもモンテカルロシミュレーションをするあなたの考えは正しいです。

回答:


9

あなたの質問を正しく理解した場合、超幾何分布を使用する必要があります。この分布は通常、骨壷モデルに関連付けられています。つまり、骨壷にはボールがあり、は赤く塗られており、骨壷から個のボールを描画します。次に、がサンプルで赤であるボールの数である場合、には超幾何分布があります。nymXmX

具体的な例として、、、およびは3つのリストの長さを示し、はと間の重複を示します。その後nAnBn A B A BnCnABAB

nABHG(nA,nC,nB)

p値を計算するには、次のRコマンドを使用できます。

#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

注意の言葉。複数のテストを覚えてください。つまり、AリストとBリストがたくさんある場合は、p値を修正して調整する必要があります。例として、FDRまたはBonferroniの修正。


2

csgillespieの答えは1つを除いて正しいようです:それはオーバーラップで厳密にn_A_Bを見る確率を与えます、P(x> n_A_B)ですが、OPはp値P(x> = n_A_B)を望んでいると思います。あなたは後者を得ることができます

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 lower.tail=FALSE。それ以外の場合、非常に小さいp値(<1e-16)は切り捨てられます。
Backlin 2014年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.