确定可接受方差的算法

时间:2013-05-14 17:25:43

标签: algorithm function math

我有一个应用程序正在比较来自两个不同报告的数字。当两个数字之间的差异超过某个阈值时,它将提醒用户。我本来打算使用10%的阈值,但我意识到当A计数是前。 10,000的10%的方差太高(意味着如果有999会过多),但是当计数A只有10时,10%的方差太低(意味着2-3 / 10将是可接受的方差)

除了编码

之外,无法弄清楚如何做到这一点
IF CountA <= 10 THEN AcceptableRate = 20%
If CountA > 10 THEN AcceptableRate = 15%

有人知道如何在数学上解释我想要做什么,以及如何实现它? 我相信这对于一个比我更好的数学家来说可能是一个简单的问题。

4 个答案:

答案 0 :(得分:4)

如果我理解正确,您正在尝试比较两个应该相似的不同数据集,并且您希望定义两个数据集之间的差异级别,这是某种可接受的级别。

我认为我采取的方法将依赖于几个因素,首先,您是否知道这两个数据集的基础分布?例如,如果数据是正态分布的,那么就不可能找到另一组中存在的每个数据的概率吗?

另一方面,可以使用a Chi-square test来检查两个数据集之间的差异。

另一种可能性是使用Kolmogorov-Smirnov test来获得一个样本来自另一个样本的概率。

这些将是我的建议,但是决定这种事情的截止值总是主观的。我在学习期间使用的标准是Chauvenet's criterion,这也可能对您有所帮助。

答案 1 :(得分:0)

基本上,您需要一个标准,它是数据集大小的一个更复杂的函数而不仅仅是比例。从您给出的示例中,我将猜测包含基于数据集大小日志的术语可能就是您想要的。玩弄像

这样的表达式
AcceptableN = 10 * log10(N) + 2

其中AcceptableN是可接受的异常值数,N是总数据集大小,然后是AcceptableRate = 100*AcceptableN / N

但是,在更清楚地了解您认为不同N的标准应该是什么之前,没有明确的直接数学公式可以满足您的需求。

答案 2 :(得分:0)

除了前面答案中提到的公式之外,还要考虑使用n的一些幂(其中n是来自一个报告或另一个报告的参考编号)作为容差。下面是一些python代码及其结果,说明了n的几种不同的权力:

j=10   
for i in range(6):
    print '{:8} {:8.1f} {:8.1f} {:8.1f} {:8.1f}'.format(j, j**0.33, j**.35, j**.37, j**.39)
    j *= 10

      10      2.1      2.2      2.3      2.5
     100      4.6      5.0      5.5      6.0
    1000      9.8     11.2     12.9     14.8
   10000     20.9     25.1     30.2     36.3
  100000     44.7     56.2     70.8     89.1
 1000000     95.5    125.9    166.0    218.8

答案 3 :(得分:0)

我发现标准差比方差更直观,因为它的测量单位与您正在处理的潜在不确定数量相同。也许某些百分比的标准偏差是一个合适的衡量标准,因为如果你选择正确的百分比,它会将你的例子推向正确的方向。