X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=memchi2.cpp;fp=memchi2.cpp;h=f08b4b8561d9177fbd6f0a5a8f3337b95312e362;hb=0caf3fbabaa3ece404f8ce77f4c883dc5b1bf1dc;hp=0000000000000000000000000000000000000000;hpb=1b73ff67c83892a025e597dabd9df6fe7b58206a;p=mothur.git diff --git a/memchi2.cpp b/memchi2.cpp new file mode 100644 index 0000000..f08b4b8 --- /dev/null +++ b/memchi2.cpp @@ -0,0 +1,61 @@ +/* + * memchi2.cpp + * Mothur + * + * Created by westcott on 12/17/10. + * Copyright 2010 Schloss Lab. All rights reserved. + * + */ + +#include "memchi2.h" + +/***********************************************************************/ +EstOutput MemChi2::getValues(vector shared) { + try { + data.resize(1,0); + + int nonZeroA = 0; + int nonZeroB = 0; + int totalOtus = shared[0]->getNumBins(); + //int totalGroups = shared.size(); + + //for each otu + for (int i = 0; i < shared[0]->getNumBins(); i++) { + if (shared[0]->getAbundance(i) != 0) { nonZeroA++; } + if (shared[1]->getAbundance(i) != 0) { nonZeroB++; } + } + + double sum = 0.0; + for (int i = 0; i < shared[0]->getNumBins(); i++) { + int A = shared[0]->getAbundance(i); + int B = shared[1]->getAbundance(i); + + if (A > 0) { A = 1; } + if (B > 0) { B = 1; } + + double Aterm = A / (float) nonZeroA; + double Bterm = B / (float) nonZeroB; + + int incidence = 0; + for(int j=0;jgetAbundance(i) != 0){ incidence++; } + } + + if(incidence != 0){ + sum += (((Aterm-Bterm)*(Aterm-Bterm))/incidence); + } + } + + data[0] = sqrt(totalOtus * sum); + + if (isnan(data[0]) || isinf(data[0])) { data[0] = 0; } + + return data; + } + catch(exception& e) { + m->errorOut(e, "MemChi2", "getValues"); + exit(1); + } +} +/***********************************************************************/ +