从一个分布中随机选择的值大于从另一个分布中随机选择的值的概率

机器算法验证 可能性 分布 非参数
2022-04-06 07:24:05

说我有n从两个分布中采样的值,AB. 也就是说,我有一个样本A1,A2,,An和一个样本B1,B2,,Bn. 我将如何寻找P(Ai>Bj)对于任何给定的值i(1,,n)j(i,,n)?

我知道我可以使用以下代码相当容易地获得自举解决方案:

bootstrapProcedure <- function(A, B, sample.size = 100) {
  # Calculates the fraction of times a sample of size (sample.size) from A is
  # greater than a sample of the same size from B (both drawn with replacement).
  #
  # Args:
  #   A: vector of values for sample 1
  #   B: vector of values for sample 2
  #   sample.size: integer of the size of the bootstrapped sample to draw
  #
  # Returns:
  #   The fraction of times the sample from A is greater than the sample from B
  mean(sample(A, sample.size, replace = T) > sample(B, sample.size, replace = T))
}

# Draw 2 populations
A <- rnorm(1000, mean = 1, sd = 2)
B <- rnorm(1000, mean = 2, sd = 4)

# Get the bootstrapped probability 1,000 times
replicate(1000, bootstrapProcedure(A, B))

但似乎应该有一个简单的分析解决方案。有什么想法我应该如何找到它?

2个回答

您的引导模拟表明,A 和 B 是独立的;我会这样假设。

注意P(A>B)=P(AB>0).

在 A 和 B 也正常的情况下,D=ABN(μAμB,σA2+σB2)

在这种情况下

P(D>0)=P(DμDσD>0μDσD)=P(Z>μA+μBσA2+σB2)=P(Z<μA+μBσA2+σB2)=Φ(μA+μBσA2+σB2)

在其他发行版的情况下,可能没有简单的“封闭”形式(您会在少数发行版中获得一个,但通常不能指望)。对于特定情况,可以通过数值卷积计算概率值。

(如果你有二元正态性但没有独立性,你可以做类似的计算。)

答案:AUC

从一个分布中随机选择的值大于从另一个分布中随机选择的值的概率

如果您想要假设检验(正如其他人指出的那样),请查看Mann-Whitney-U检验。AUC 是标准化和可解释的 U 统计量。

如果您对 R 感兴趣,请查看例如pROC,如果您必须需要自举 AUC。对于单纯的 AUC 计算,我使用轻量级的WeightedROC 包

要使用标准包,请使用“标签”将数据组织为样本a 的0 和样本b的1s,然后将测量值用作“分数”。AUC 是一个估计值P(Ai<Bj)