Using Apache Commons Math to determine confidence intervals

前端 未结 2 1343
暖寄归人
暖寄归人 2021-02-07 13:30

I have a set of benchmark data for which I compute summary statistics using Apache Math Commons. Now I want to use the package to compute confidence intervals for the arithmetic

2条回答
  •  暖寄归人
    2021-02-07 14:12

    If you still want to calculate binomial in java by using only standard edition You can use below class like below.

    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;
        }
    
    
    
    }
    

提交回复
热议问题