void ttest(VecDoub_I &data1, VecDoub_I &data2, Doub &t, Doub &prob) { Beta beta; Doub var1,var2,svar,df,ave1,ave2; Int n1=data1.size(), n2=data2.size(); avevar(data1,ave1,var1); avevar(data2,ave2,var2); df=n1+n2-2; svar=((n1-1)*var1+(n2-1)*var2)/df; t=(ave1-ave2)/sqrt(svar*(1.0/n1+1.0/n2)); prob=beta.betai(0.5*df,0.5,df/(df+t*t)); } void tutest(VecDoub_I &data1, VecDoub_I &data2, Doub &t, Doub &prob) { Beta beta; Doub var1,var2,df,ave1,ave2; Int n1=data1.size(), n2=data2.size(); avevar(data1,ave1,var1); avevar(data2,ave2,var2); t=(ave1-ave2)/sqrt(var1/n1+var2/n2); df=SQR(var1/n1+var2/n2)/(SQR(var1/n1)/(n1-1)+SQR(var2/n2)/(n2-1)); prob=beta.betai(0.5*df,0.5,df/(df+SQR(t))); } void tptest(VecDoub_I &data1, VecDoub_I &data2, Doub &t, Doub &prob) { Beta beta; Int j, n=data1.size(); Doub var1,var2,ave1,ave2,sd,df,cov=0.0; avevar(data1,ave1,var1); avevar(data2,ave2,var2); for (j=0;j var2) { f=var1/var2; df1=n1-1; df2=n2-1; } else { f=var2/var1; df1=n2-1; df2=n1-1; } prob = 2.0*beta.betai(0.5*df2,0.5*df1,df2/(df2+df1*f)); if (prob > 1.0) prob=2.-prob; } void chsone(VecDoub_I &bins, VecDoub_I &ebins, Doub &df, Doub &chsq, Doub &prob, const Int knstrn=1) { Gamma gam; Int j,nbins=bins.size(); Doub temp; df=nbins-knstrn; chsq=0.0; for (j=0;j0.)) throw("Bad expected number in chsone"); if (ebins[j]==0.0 && bins[j]==0.0) { --df; } else { temp=bins[j]-ebins[j]; chsq += temp*temp/ebins[j]; } } prob=gam.gammq(0.5*df,0.5*chsq); } void chstwo(VecDoub_I &bins1, VecDoub_I &bins2, Doub &df, Doub &chsq, Doub &prob, const Int knstrn=1) { Gamma gam; Int j,nbins=bins1.size(); Doub temp; df=nbins-knstrn; chsq=0.0; for (j=0;j 0.0) { t=rs*sqrt((en-2.0)/fac); df=en-2.0; probrs=bet.betai(0.5*df,0.5,df/(df+t*t)); } else probrs=0.0; } void kendl1(VecDoub_I &data1, VecDoub_I &data2, Doub &tau, Doub &z, Doub &prob) { Int is=0,j,k,n2=0,n1=0,n=data1.size(); Doub svar,aa,a2,a1; for (j=0;j 0.0 ? ++is : --is; } else { if (a1 != 0.0) ++n1; if (a2 != 0.0) ++n2; } } } tau=is/(sqrt(Doub(n1))*sqrt(Doub(n2))); svar=(4.0*n+10.0)/(9.0*n*(n-1.0)); z=tau/sqrt(svar); prob=erfcc(abs(z)/1.4142136); } void kendl2(MatDoub_I &tab, Doub &tau, Doub &z, Doub &prob) { Int k,l,nn,mm,m2,m1,lj,li,kj,ki,i=tab.nrows(),j=tab.ncols(); Doub svar,s=0.0,points,pairs,en2=0.0,en1=0.0; nn=i*j; points=tab[i-1][j-1]; for (k=0;k<=nn-2;k++) { ki=(k/j); kj=k-j*ki; points += tab[ki][kj]; for (l=k+1;l<=nn-1;l++) { li=l/j; lj=l-j*li; mm=(m1=li-ki)*(m2=lj-kj); pairs=tab[ki][kj]*tab[li][lj]; if (mm != 0) { en1 += pairs; en2 += pairs; s += (mm > 0 ? pairs : -pairs); } else { if (m1 != 0) en1 += pairs; if (m2 != 0) en2 += pairs; } } } tau=s/sqrt(en1*en2); svar=(4.0*points+10.0)/(9.0*points*(points-1.0)); z=tau/sqrt(svar); prob=erfcc(abs(z)/1.4142136); }