X-Git-Url: https://git.donarmstrong.com/?p=mothur.git;a=blobdiff_plain;f=structpearson.cpp;h=a21eb9936aa7799e9d56436a4c513c668148d7d9;hp=9d030ef90742f232a5d0c114b21e5bb8878c83ad;hb=b206f634aae1b4ce13978d203247fb64757d5482;hpb=7d38edc137a66a33f67f8cf55cce88331290aaf7 diff --git a/structpearson.cpp b/structpearson.cpp index 9d030ef..a21eb99 100644 --- a/structpearson.cpp +++ b/structpearson.cpp @@ -14,17 +14,11 @@ EstOutput StructPearson::getValues(vector shared) { try { data.resize(1,0); - double sumA = 0.0; - double sumB = 0.0; int numOTUS = shared[0]->getNumBins(); + double averageA = shared[0]->getNumSeqs() / (float) numOTUS; + double averageB = shared[1]->getNumSeqs() / (float) numOTUS; - for (int i = 0; i < shared[0]->getNumBins(); i++) { - sumA += shared[0]->getAbundance(i); - sumB += shared[1]->getAbundance(i); - } - - double numTerm1 = 0.0; - double numTerm2 = 0.0; + double numTerm = 0.0; double denomTerm1 = 0.0; double denomTerm2 = 0.0; @@ -32,20 +26,18 @@ EstOutput StructPearson::getValues(vector shared) { int Aij = shared[0]->getAbundance(i); int Bij = shared[1]->getAbundance(i); - numTerm1 += (Aij - (sumA / (float) numOTUS)); - numTerm2 += (Bij - (sumB / (float) numOTUS)); - denomTerm1 += ((Aij - (sumA / (float) numOTUS)) * (Aij - (sumA / (float) numOTUS))); - denomTerm2 += ((Bij - (sumB / (float) numOTUS)) * (Bij - (sumB / (float) numOTUS))); + numTerm += ((Aij - averageA) * (Bij - averageB)); + denomTerm1 += ((Aij - averageA) * (Aij - averageA)); + denomTerm2 += ((Bij - averageB) * (Bij - averageB)); } denomTerm1 = sqrt(denomTerm1); denomTerm2 = sqrt(denomTerm2); double denom = denomTerm1 * denomTerm2; - double numerator = numTerm1 * numTerm2; - data[0] = 1.0 - (numerator / denom); + data[0] = (numTerm / denom); if (isnan(data[0]) || isinf(data[0])) { data[0] = 0; }