X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=metastats2.c;h=70edc3d63cda154b51bca2dcb8ee36b9413a97a9;hb=2bb9267aa4b4ecdf8488b06605cc9f3f36fa4332;hp=b22938af69282857aa354c4e55ec2c30a4921d8f;hpb=b4d2979ffc1440ffeac9343cc60ceb80fff0e058;p=mothur.git diff --git a/metastats2.c b/metastats2.c index b22938a..70edc3d 100644 --- a/metastats2.c +++ b/metastats2.c @@ -4,549 +4,554 @@ //The following code has been modified using the original Metastats program from White, J.R., Nagarajan, N. & Pop, M. Statistical methods for detecting differentially abundant features in clinical metagenomic samples. PLoS Comput Biol 5, e1000352 (2009). int metastat_main (char* outputFileName, int numRows, int numCols, double threshold, int numPermutations, double** data, int secondGroupingStart){ - - int size,c=0,i=0,j=0,k,counter=0, bflag=0; - int B=numPermutations; - int row = numRows; - int col = numCols; - int g = secondGroupingStart; - double thresh=threshold; - double placeholder=0,min=0; - - char output[1024]; - strcpy(output, outputFileName); - FILE *out; - - if (g>=col || g<=0){ - printf("Check your g value\n"); - } - - // Initialize the matrices - size = row*col; - double matrix[row][col]; - double pmatrix[size],pmatrix2[size],permuted[size]; - double storage[row][9]; - - for (i=0;i2){ - for(i=1;i total[i]){ - min = total[i];} - } - } - if (min<=0){ - printf("Error, the sum of one of the columns <= 0."); - return 0; - } - - - // Ratio time... - for(i=0;i=col || g<=0){ + printf("Check your g value\n"); } - - for(j=g-1;j.999999999){ - *pre=1; + // Creates the ratios by first finding the minimum of totals + min = total[0]; + if (col==2){ + if (total[0]2){ + for(i=1;i total[i]){ + min = total[i];} + } + } + if (min<=0){ + printf("Error, the sum of one of the columns <= 0."); + return 0; } - if(sparse[i] < (double)(g-1)){ - c++; + + // Ratio time... + for(i=0;i.999999999){ - *pre=1; + // Find the initial values for the matrix. + start(pmatrix,gvalue,nr,nc,tinitial,storage); + + // Start the calculations. + + if ( (col==2) || ((g-1)<8) || ((col-g+1) < 8) ){ + + double fish[row], fish2[row]; + for(i=0;i.999999999){ + *pre=1; + } + + //printf("feaxt = %f\t%f\t%f\t%f\t%f\t%f\n", *expect, *pre, f11, f12, f21, f22); + storage[i][8] = *pre; + pvalues[i]=*pre; + } } - storage[i][8] = *pre; - pvalues[i]=*pre; - } - } - // End of else statement - bflag = 1; - } - - // Calculates the mean of counts (not normalized) - double temp[row][2]; - - for(j=0;j.999999999){ + *pre=1; + } + storage[i][8] = *pre; + pvalues[i]=*pre; + } + } + // End of else statement + bflag = 1; } - } - - for (j=0;j(fabs(Tinitial[i])+.0000000000001)){ //13th place - counter[i]++; - } + xbardiff = C1[i][0]-C2[i][0]; + denom = sqrt(C1[i][2]+C2[i][2]); + Ts[i]=fabs(xbardiff/denom); + if (fabs(Ts[i])>(fabs(Tinitial[i])+.0000000000001)){ //13th place + counter[i]++; + } } } void meanvar(double *pmatrix,int *g,int *nr,int *nc,double *store){ - double temp[*nr], temp2[*nr],var[*nr],var2[*nr],a,b; - - int i,m,k,l,n; - - a = (double) *g-1; - b = (double) (*nc-a); - - for (i = 0; i<*nr; i++){ - temp[i]=0; - temp2[i]=0; - var[i]=0; - var2[i]=0; - } - - k = *nr; // number of rows - l = *nc; - n = k*l; - + double temp[*nr], temp2[*nr],var[*nr],var2[*nr],a,b; + + int i,m,k,l,n; + + a = (double) *g-1; + b = (double) (*nc-a); + + for (i = 0; i<*nr; i++){ + temp[i]=0; + temp2[i]=0; + var[i]=0; + var2[i]=0; + } + + k = *nr; // number of rows + l = *nc; + n = k*l; + m=0; m=*g-1; k=*nr; m*=k; // m = g * nr now for (i=0;i