5 * Created by Thomas Ryabin on 3/6/09.
6 * Copyright 2009 Schloss Lab UMASS Amherst. All rights reserved.
13 /***********************************************************************/
14 double BStick::invSum(int index, double numSpec)
17 for(int i = index; i <= numSpec; i++)
21 /***********************************************************************/
22 RAbundVector BStick::getRAbundVector(SAbundVector* rank){
28 for(int i = rank->size()-1; i > 0; i--) {
29 double cur = rank->get(i);
30 if(mr == 1 && cur > 0)
34 for(int j = 0; j < cur; j++)
38 RAbundVector rav = RAbundVector(rData, mr, nb, ns);
39 rav.setLabel(rank->getLabel());
43 /***************************************************************************/
45 /***************************************************************************/
46 EstOutput BStick::getValues(SAbundVector* rank){
49 rdata = getRAbundVector(rank);
50 double numInd = (double)rdata.getNumSeqs();
51 double numSpec = (double)rdata.getNumBins();
57 for(int i = 0; i < rdata.size(); i++) {
58 sumObs += rdata.get(i);
59 sumExp += numInd/numSpec*invSum(i+1,numSpec);
60 double diff = fabs(sumObs-sumExp);
66 data[0] = maxDiff/numInd;
67 data[1] = 0.886/sqrt(rdata.size());
68 data[2] = 1.031/sqrt(rdata.size());
70 /*m->mothurOut(critVal); m->mothurOutEndLine();
71 m->mothurOut("If D-Statistic is less than the critical value then the data fits the Broken Stick model w/ 95% confidence.\n");*/
74 if (isnan(data[0]) || isinf(data[0])) { data[0] = 0; }
75 if (isnan(data[1]) || isinf(data[1])) { data[1] = 0; }
76 if (isnan(data[2]) || isinf(data[2])) { data[2] = 0; }
81 m->errorOut(e, "BStick", "getValues");
86 /***********************************************************************/