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