\begin{verbatim}
simpleLog[x_] := If[x == 0, 10^-5, Log[x]]
entropyTemp[vec_] := Module[{t1, t2, t3},
  t1 = Length[vec];
  t2 = N[Count[vec, 0]/t1];
  t3 = N[Count[vec, 1]/t1];
  - (t2 * simpleLog[t2] + t3* simpleLog[t3])]
shiftScore[twovec_, op_, rep_] := Module[{x1, x2, x3, x4, x5},
  x1 = Map[op[Sequence @@ #] &, twovec];
  x2 = entropyTemp[x1];
  x3 = Table[
    entropyTemp[
     Map[op[Sequence @@ #] &, 
      Transpose[Map[RandomSample, Transpose[twovec]]]]], {rep}];
  x4 = N[Mean[x3]];
  x5 = N[StandardDeviation[x3]];
  If[x5 == 0, 0, (x2 - x4)/x5]]
evaluateESABO[filename_, random_, booleanOp_, threshold_] := 
 Module[{y1, y2, y3, y4, y5, y6, y7},
  y1 = Import[filename, "Data"];
  y2 = Map[StringSplit[#, " "] &, y1];
  y3 = Drop[y2, 1][[All, 2 ;; Length[y2[[2]]]]];
  y4 = Map[ToExpression, y3];
  y5 = y4 /. ( n1_Integer ) :> If[n1 > (threshold - 1), 1, 0];
  y6 = Table[{y2[[1]][[i]], y2[[1]][[j]], 
     shiftScore[Thread[{y5[[All, i]], y5[[All, j]]}], booleanOp, 
      random]}, {i, 1, Length[y2[[1]]]}, {j, i + 1, Length[y2[[1]]]}]]

Herein the arguments of ESABO are

filename: 	defines the filename including the path 
random: 	defines the number of randomized vectors for calculation of the z-scores
booleanOp: 	specifies the boolean operation (hier: AND)
threshold: 	sets the binarization threshold of the abundance data

The main results (pairs of species names, entropy shift z-score) then were obtained by 

evaluateESABO["phyla_1000.otu_matrix_row", 1000, BitAnd, 1]
\end{verbatim}