使用Apache Commons Math确定置信区间

我有一组基准数据,我使用Apache Math Commons计算汇总统计数据。 现在我想使用包来计算例如运行时间测量的算术平均值的置信区间。

这有可能吗? 我确信该软件包支持这一点,但是我不知道从哪里开始。

这是我在Brent Worden建议的帮助下最终使用的解决方案:

private double getConfidenceIntervalWidth(StatisticalSummary statistics, double significance) { TDistribution tDist = new TDistribution(statistics.getN() - 1); double a = tDist.inverseCumulativeProbability(1.0 - significance / 2); return a * statistics.getStandardDeviation() / Math.sqrt(statistics.getN()); } 

Apache Commons Math没有直接支持构建置信区间。 但是,它确实拥有计算它们所需的一切。

首先,使用SummaryStatistics或其他一些StatisticalSummary实现将您的数​​据汇总到样本统计信息中。

接下来,使用TDistribution计算所需置信度的关键值。 可以从摘要统计’ n属性推断出自由度。

最后,使用摘要统计信息中的meanvariancen属性值以及分布中的t临界值来计算置信下限和上限。

如果您仍想使用标准版本在java中计算二项式您可以使用下面的类,如下所示。

 calling sample BinomialConfidenceCalc.calcBin(13, 100,95.0D); public class BinomialConfidenceCalc { public static double binP(double N,double p,double x1,double x2){ double q = p/(1-p); double k = 0.0; double v = 1.0; double s = 0.0; double tot = 0.0; while(k<=N){ tot += v; if(k >= x1 && k <= x2){ s += v; } if(tot > Math.pow(10,30)){ s = s/Math.pow(10,30); tot = tot/Math.pow(10,30); v = v/Math.pow(10,30); } k += 1; v = v*q*(N+1-k)/k; } return s/tot; } public static double[] calcBin(double vx,double vN,Double vCL){ double vTU = (100 - vCL)/2; double vTL = vTU; double dl = 0.0; double vP = vx/vN; if(vx==0){ dl = 0.0; } else{ double v = vP/2; double vsL = 0; double vsH = vP; double p = vTL/100; while((vsH-vsL) > Math.pow(10,-5)){ if(binP(vN, v, vx, vN) > p){ vsH = v; v = (vsL+v)/2; }else{ vsL = v; v = (v+vsH)/2; } } dl = v; } double ul = 0.0; if(vx==vN){ ul = 1.0; } else{ double v = (1+vP)/2; double vsL =vP; double vsH = 1; double p = vTU/100; while((vsH-vsL) > Math.pow(10,-5)){ if(binP(vN, v, 0, vx) < p){ vsH = v; v = (vsL+v)/2; } else{ vsL = v; v = (v+vsH)/2; } } ul = v; } double dlUl[] = new double[]{dl,ul}; return dlUl; } }