/** * Run the randomization test * * @param baseline * @param target * @return */ public double test(HashMap<String, Double> target, HashMap<String, Double> baseline) { double[] b = new double[baseline.keySet().size()]; // baseline double[] t = new double[target.keySet().size()]; // target int c = 0; for (String key : baseline.keySet()) { b[c] = baseline.get(key).doubleValue(); t[c] = target.get(key).doubleValue(); c++; } double trueDiff = Math.abs(BasicStats.mean(b) - BasicStats.mean(t)); double pvalue = 0.0; double[] pb = new double[baseline.keySet().size()]; // permutation of baseline double[] pt = new double[target.keySet().size()]; // permutation of target for (int i = 0; i < nPermutation; i++) { char[] bits = randomBitVector(b.length).toCharArray(); for (int j = 0; j < b.length; j++) { if (bits[j] == '0') { pb[j] = b[j]; pt[j] = t[j]; } else { pb[j] = t[j]; pt[j] = b[j]; } } double pDiff = Math.abs(BasicStats.mean(pb) - BasicStats.mean(pt)); if (pDiff >= trueDiff) pvalue += 1.0; } return pvalue / nPermutation; }