这个问题与数学问题有关,但我在这里提出这个问题的原因是因为我想要一个使用boost的解决方案。如果您认为这更适合SE数学,请告诉我。
我从一组任意算法中得到错误值的样本;
std::vector<double> errors {/* some values */};
假设errors
中值的正态分布,我需要一个算法告诉我低于的浮点值,任何数字至少构成n
- sigma事件。使用68–95–99.7 rule,如果n
为2,那么我想知道下面的数字,数据集中存在的数字最多只有5%。
double getSigmaEventValue(const std::vector<double>& container, int n);
现在,我怀疑boost accumulator library已经解决了这个问题,但我缺乏必要的专业知识来弄清楚我正在寻找什么。
我知道我可以使用boost::accumulators::variance
来获取方差,但我不知道我可以使用任何方法将方差转换为n-sigma值,因此这可能不是最好的方法。我对使用boost感兴趣,因为我已经对此数据集执行了一组时间关键的统计数据(中位数,均值,方差,最小值和最大值),因此至少可能需要进行一些计算。这已经被缓存了。
答案 0 :(得分:1)
如果您的数据是正态分布的,则计算样本均值和样本方差。这个定义是您的拟合分布。然后计算该分布的分位数。例如,这个问题从Boost:Quantile functions in boost (C++)
的角度涵盖了该主题当然,如果您的数据不是正常分发的,并且您显然没有理由相信它,那么您提出的任何计算都将毫无意义。