我天真地认为这是一个相当直接的问题,涉及对许多不同数量的计数数据进行异常检测。具体来说,我想确定一系列计数数据中的一个或多个值相对于分布中其余计数是否高于或低于预期。
令人困惑的因素是,我需要对3500个分布执行此操作,其中一些分布可能适合零膨胀的过度分散的Poisson,而另一些分布可能最好拟合负二项式或ZINB,而另一些分布可能呈正态分布。因此,简单的Z分数或分布图不适用于大多数数据集。这是我要检测异常值的计数数据的示例。
counts1=[1 1 1 0 2 1 1 0 0 1 1 1 1 1 0 0 0 0 1 2 1 1 2 1 1 1 1 0 0 1 0 1 1 1 1 0
0 0 0 0 1 2 1 1 1 1 1 1 0 1 1 2 0 0 0 1 0 1 2 1 1 0 2 1 1 1 0 0 1 0 0 0
2 0 1 1 0 2 1 0 1 1 0 0 2 1 0 1 1 1 1 2 0 3]
counts2=[0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0
1 1 0 0 0]
counts3=[14 13 14 14 14 14 13 14 14 14 14 14 15 14 14 14 14 14 14 15 14 13 14 14
15 12 13 17 13 14 14 14 14 15 14 14 13 14 13 14 14 14 14 13 14 14 14 15
15 14 14 14 14 14 15 14 1414 14 15 14 14 14 14 14 14 14 14 14 14 14 14 13 16]
counts4=[0 3 1.......]
and so on up to counts3500.
最初,我认为我需要用Python或R编写一个循环,该循环将对每个分布应用一组模型,并根据AIC或其他方法选择最佳拟合模型(可能是R中的fitdistrplus)。然后,我可以问一下给定分布的极端情况(计数落在尾巴上,例如,计数“ 4”在上述counts1分布中是否是异常值?)。但是,我不确定这是否是有效的策略,并且在我看来,可能存在一种简单的方法来确定我不知道的计数数据中的异常值。考虑到要查看的分布数量,我进行了广泛的搜索,发现没有发现适合我的问题的内容。
我的最终目标是使用最适合统计的方法,针对每种计数分布来检测计数的显着增加或减少。