计算两个随机人在同一组的概率?

2024-04-18 03:34:53 发布

您现在位置:Python中文网/ 问答频道 /正文

在我的数据集中,有N人,每个人被分成一个3组(groups = {A, B, C})。我想找出两个随机人,n_1和{}属于同一组的概率。在

我有每一组的数据,以及有多少人属于他们。重要的是,每个小组的规模都不一样。

import pandas as pd
import numpy as np
import math 

data = {
    "Group": ['A', 'B', 'C'],
    "Count": [20, 10, 5],
}

df = pd.DataFrame(data)
^{pr2}$

我想我知道如何得到样本空间,S,但我不确定如何得到分子。在

def nCk(n,k):
  f = math.factorial
  return f(n) / f(k) / f(n-k)

n = sum(df['Count'])
k = 2
s = nCk(n, k)

Tags: 数据importnumpypandasdfdataascount
2条回答

我的离散数学技能有点生疏,请随意纠正我。你让N人分成不同大小的一组s_1, ..., s_n,这样N = s_1 + ... + s_n。在

  1. 一个随机人属于i的概率是s_i / N
  2. 第二个人加入i的几率是(s_i - 1) / (N - 1)
  3. 两者都在i组的几率是s_i / N * (s_i - 1) / (N - 1)
  4. 它们在任何一个组中共同出现的概率是所有组中3个概率的总和。在

代码:

import numpy as np

s = df['Count'].values
n = s.sum()
prob = np.sum(s/n * (s-1)/(n-1)) # 0.4117647058823529

我们可以将这个解决方案推广到“所有人都在同一组中的概率”:

^{pr2}$

k > s.max()(本例中为20)时,答案为0,因为您无法将它们全部放入一个组中。当k > s.sum()(本例中为35)时,结果是nan。在

我用超几何分布来回答你的问题,超几何分布是一个离散的概率分布,它描述了n次绘图中k次成功(绘制的对象具有特定特征的随机绘图)的概率,没有替换,从一个大小为N的有限总体中,精确地包含具有该特征的K个对象,其中每次绘制都是成功或失败。相比之下,二项式分布描述了n次取款中k次成功的概率。 所以总概率应该是两者都属于A的概率+都属于B的概率+都属于C的概率。 这意味着

P(A) = (nCk(20,2) * nCk(15,0))/nCk(35,2)
P(B) = (nCk(10,2) * nCk(25,0))/nCk(35,2)
P(C) = (nCk(5,2) * nCk(5,0)) / nCk(35,2)

在规范术语中:

^{pr2}$

输出:

0.41176470588235287

相关问题 更多 >