#include #include #include #include #include #include "arrays.h" #include "maths.h" #define MIN(A,B) ((A <= B)? A:B) #define PROGRAM_NAME "Jack.exe" #define BUILD_DATE "18 December 1996" #define VERSION "0.1" int N,G,P; imatrix data; int Iterations = 5000; iVector number_of_bands; matrix frequency_of_bands; Vector avg_number_bands; iVector number_in_group; imatrix read_data(fstream& f,int& N,int& P,int& G) { int i,j; f >> N >> P >> G; imatrix data(N+1,P); for(i=0;i> data[i][j]; if(f.eof()) { cerr << "Problem in read_data(): can't seem to read enough data" << endl; cerr << "EOF occurred before entire data array was read." << endl; exit(37); } } } cout << "Here's the data I've just read\n"; cout << "\n\n-----------------------------------------------\n"; for(i=0;i 1) { cerr << "Problem: your data file contains values other that 0 and 1\n"; cerr << "For example, data["<< i << "][" << j << "] = " << data[i][j] << endl; cerr << "Check this.\n"; exit(7); } } } /// Check to make sure labels for groups in first row of data array are okay. for(j=0;j<(P);j++) { if(data[0][j] <0 || data[0][j] >(G)-1) { cerr << "Problem: your data file mentions more groups than expected\n"; cerr << "With G = " << G << " only the values 0,...," << (G-1) << " should appear in\n"; cerr << "the first row of data. But I found data[0][" << j << "]=" << data[0][j] << endl; cerr << "You'd better fix it before running the program on this data\n"; exit(7); } } return data; } void band_statistics(void) { int i,j,t,g; double s; /*************************************** GROUP SIZES */ iVector itemp(G); number_in_group=itemp; Vector iitemp(G+1); avg_number_bands = iitemp; for(g=0;g 0.0) { t= (means[i]-means[j])/sqrt(spsquare*(1.0/degrees[i] + 1.0/degrees[j])); df= degrees[i]+degrees[j]; p=betai(0.5*df,0.5,df/(df+t*t)); cout << "pooled-variance t = " << t << " df = " << df << " two-sided p = "<< p<< endl ; } else{ if( means[i] != means[j]) cout << "pooled-variance: Sum of squares is 0.0, so differences appear significant at p= 0.000\n"; else cout << "pooled-variance sum of squares and mean differences are 0.0" << endl; } df = (errors[i]*errors[i] + errors[j]*errors[j]); df= df*df; if( df > 0.0) { df = df/( pow(errors[i],4)/degrees[i] + pow(errors[j],4)/degrees[j]); t = (means[i]-means[j])/sqrt( errors[i]*errors[i] + errors[j]*errors[j]); p=betai(0.5*df,0.5,df/(df+t*t)); cout << "different-variance t = " << t << " df = " << df << " two-sided p = "<< p<< endl ; } else{ if( means[i] != means[j]) cout << "different-variance: Sum of squares is 0.0, so differences appear significant at p=0.000\n"; else cout << "different-variance sum of squares and mean differences are 0.0" << endl; } } } } void process_command_line(int argc,char *argv[]) { cout << PROGRAM_NAME << " version " << VERSION<< ", built "<< BUILD_DATE<" << endl; cout << "\n----------------------------------------------------------\n"; exit( 0); } fstream fin(argv[1],ios::in); if( fin.fail()) { cout << "Sorry: can't seem to open file " << argv[1] << endl;; exit(11); } if(argc==3) { if(isdigit(argv[2][0])) Iterations = atoi(argv[2]); else { cerr << "You seem to be trying to set the number of iterations, but\n"; cerr << "I can't treat the third argument, " << argv[2] << ", on the command line as an integer\n"; } } data=read_data(fin,N,P,G); fin.close(); return; } int main(int argc, char *argv[]) { cout << setiosflags(ios::showpoint| ios::fixed| ios::left) ; cout << setprecision(4); set_seed(); process_command_line(argc,argv) ; band_statistics(); similarity_tests() ; return 1; }