Esempio n. 1
0
  public void lugRice() {

    double expH;
    double C;
    double D;
    double lmbd;
    double phi;
    int m;
    Double pValue;

    HashSet<Integer> set = new HashSet(lambdas.keySet());

    for (Integer id : set) {

      m = (Integer) mapSmallX.get(id);

      // System.out.println("______\nm:"+"\t"+m);
      lmbd = lambdas.get(id);

      expH = calcSaddlepoint(id, lmbd, 3);
      C = calcSaddlepoint(id, lmbd, 4);
      D = calcSaddlepoint(id, lmbd, 5);

      // System.out.println("D:\t"+D);

      phi = Math.sqrt(2 / Math.PI) * Math.pow(expH, m);

      double z = ((D * Math.sqrt(m)) / Math.sqrt(2));
      // System.out.println("phi:\t"+phi);

      /**
       * This was the reason why many nodes appeared with a null p-value. p-value must be calculated
       * for all nodes.
       */
      if (D * Math.sqrt(m) <= -1) {
        double ndtr = (1 + ErrorFunction.erf(z)) / 2;
        // System.out.println(ndtr);
        // System.out.println(phi / C / Math.sqrt(m));
        // System.out.println(phi / D / Math.sqrt(m));
        pValue = ndtr + (phi / C / Math.sqrt(m)) + (phi / D / Math.sqrt(m) / 2);

        if (pValue.isInfinite() || pValue.isNaN()) {
          pValue = 1.0d;
        }

        significanceTestMap.put(id, pValue);
      } else {
        significanceTestMap.put(id, 1.0d);
      }
    }
    for (Object id : significanceTestMap.keySet()) {
      System.out.println("ID:" + id + " p-value: " + significanceTestMap.get(id));
    }
  }
 /**
  * quantiles (=inverse cumulative density function)
  *
  * @param z argument
  * @param m mean
  * @param sd standard deviation
  * @return icdf at z
  */
 public static double quantile(double z, double m, double sd) {
   return m + Math.sqrt(2.0) * sd * ErrorFunction.inverseErf(2.0 * z - 1.0);
 }
  /**
   * cumulative density function
   *
   * @param x argument
   * @param m mean
   * @param sd standard deviation
   * @return cdf at x
   */
  public static double cdf(double x, double m, double sd) {
    double a = (x - m) / (Math.sqrt(2.0) * sd);

    return 0.5 * (1.0 + ErrorFunction.erf(a));
  }