2011-04-06 22 views
13

Tengo un conjunto de datos de referencia para los que calculo estadísticas de resumen utilizando Apache Math Commons. Ahora quiero usar el paquete para calcular los intervalos de confianza para los medios aritméticos de, p. mediciones de tiempo de funcionamiento.Uso de Apache Commons Math para determinar los intervalos de confianza

¿Es esto posible en absoluto? Estoy convencido de que el paquete es compatible con esto, sin embargo, no sé por dónde empezar.

Esta es la solución que terminé usando con la ayuda de la sugerencia de 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()); 
} 
+0

¿devuelve el margen de error? – Paschalis

Respuesta

14

Apache Commons matemáticas no tiene soporte directo para construir intervalos de confianza. Sin embargo, sí tiene todo lo necesario para calcularlos.

Primero, use SummaryStatistics, o alguna otra implementación StatisticalSummary para resumir sus datos en estadísticas de muestra.

A continuación, use TDistribution para calcular valores críticos para su nivel de confianza deseado. Los grados de libertad se pueden deducir de la estadística de resumen 'n propiedad.

pasado, el uso de los valores de las propiedades mean, variance y n de los estadísticos de resumen y el valor crítico de la distribución t para calcular los límites de confianza inferior y superior.

+3

https://gist.github.com/gcardone/5536578 –

1

Si aún desea calcular el binomio en java utilizando solo la edición estándar, puede utilizar la siguiente clase como se muestra a continuación.

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



} 
+0

¿Cómo se aplica la distribución binomial para calcular los intervalos de confianza para los medios de muestra? –

Cuestiones relacionadas