5 * Created by westcott on 12/17/10.
6 * Copyright 2010 Schloss Lab. All rights reserved.
10 #include "mempearson.h"
12 /***********************************************************************/
13 EstOutput MemPearson::getValues(vector<SharedRAbundVector*> shared) {
19 int numOTUS = shared[0]->getNumBins();
22 for (int i = 0; i < shared[0]->getNumBins(); i++) {
23 if (shared[0]->getAbundance(i) != 0) { nonZeroA++; }
24 if (shared[1]->getAbundance(i) != 0) { nonZeroB++; }
28 double denomTerm1 = 0.0;
29 double denomTerm2 = 0.0;
30 double averageA = nonZeroA / (float) numOTUS;
31 double averageB = nonZeroB / (float) numOTUS;
33 for (int i = 0; i < shared[0]->getNumBins(); i++) {
34 int Aij = shared[0]->getAbundance(i);
35 int Bij = shared[1]->getAbundance(i);
37 if (Aij > 0) { Aij = 1; }
38 if (Bij > 0) { Bij = 1; }
40 numTerm += ((Aij - averageA) * (Bij - averageB));
41 denomTerm1 += ((Aij - averageA) * (Aij - averageA));
42 denomTerm2 += ((Bij - averageB) * (Bij - averageB));
45 denomTerm1 = sqrt(denomTerm1);
46 denomTerm2 = sqrt(denomTerm2);
48 double denom = denomTerm1 * denomTerm2;
51 data[0] = (numTerm / denom);
56 if (isnan(data[0]) || isinf(data[0])) { data[0] = 0; }
61 m->errorOut(e, "MemPearson", "getValues");
65 /***********************************************************************/