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