Esempio n. 1
0
void mbetai (header *hd)
{	header *result,*st=hd,*hda,*hdb;
	double x;
	hda=nextof(hd);
	hdb=nextof(hda);
	hd=getvalue(hd); if (error) return;
	hda=getvalue(hda); if (error) return;
	hdb=getvalue(hdb); if (error) return;
	if (hd->type!=s_real || hda->type!=s_real ||
		hdb->type!=s_real)
			wrong_arg_in("betai");
	x=betai(*realof(hd),*realof(hda),*realof(hdb));
	if (error) return;
	result=new_real(x,""); if (error) return;
	moveresult(st,result);
}
Esempio n. 2
0
int main(int argc, char *argv[])
{
	/* Get all inputs */
	optionInit(&argc, argv, options);
	if (argc != 4) usage();

	double alpha, beta, x;
	alpha = atof(argv[1]);
	beta = atof(argv[2]);
	x = atof(argv[3]);

	printf("%f\n", betai(alpha, beta, x));

	optionFree();

	return 0;
}
Esempio n. 3
0
void tptest(float data1[], float data2[], unsigned long n, float *t,
            float *prob)
{
    void avevar(float data[], unsigned long n, float *ave, float *var);
    float betai(float a, float b, float x);
    unsigned long j;
    float var1,var2,ave1,ave2,sd,df,cov=0.0;

    avevar(data1,n,&ave1,&var1);
    avevar(data2,n,&ave2,&var2);
    for (j=1; j<=n; j++)
        cov += (data1[j]-ave1)*(data2[j]-ave2);
    cov /= df=n-1;
    sd=sqrt((var1+var2-2.0*cov)/n);
    *t=(ave1-ave2)/sd;
    *prob=betai(0.5*df,0.5,df/(df+(*t)*(*t)));
}
Esempio n. 4
0
void Spearman(Vector & v1, Vector & v2,
              double & rankD, double & zD, double & probD,
              double & spearmanR, double & probSR)
   {
   double varD, sg, sf, fac, en3n, en, df, aveD, t;
   Vector wksp1, wksp2;

   wksp1.Copy(v1);
   wksp2.Copy(v2);

   wksp1.Sort(wksp2);
   sf = crank(wksp1);
   wksp2.Sort(wksp1);
   sg = crank(wksp2);

   rankD = 0;
   for (int j = 0; j < v1.dim; j++)
      // sum the square difference of ranks
      {
      double temp = wksp1[j] - wksp2[j];
      rankD += temp  * temp;
      }

   en = v1.dim;
   en3n = en*en*en - en;
   aveD = en3n / 6.0 - (sf + sg) / 12.0;
   fac = (1.0 - sf/en3n) * (1.0 - sg/en3n);
   varD = ((en - 1.0)*en*en*(en + 1.0)*(en + 1.0)/36.0)*fac;
   zD = (rankD - aveD) / sqrt(varD);
   probD = erfcc(fabs(zD)/1.4142136);

   spearmanR = (1.0 - (6.0/en3n)*(rankD+(sf+sg)/12.0))/sqrt(fac);
   fac = (spearmanR + 1.0) * (1.0 - spearmanR);
   if (fac)
      {
      t = (spearmanR) * sqrt((en - 2.0)/fac);
      df = en - 2.0;
      probSR = betai(0.5 * df, 0.5, df/(df + t*t));
      }
   else
      probSR = 0.0;
   }
Esempio n. 5
0
void NR::ftest(Vec_I_DP &data1, Vec_I_DP &data2, DP &f, DP &prob)
{
	DP var1,var2,ave1,ave2,df1,df2;

	int n1=data1.size();
	int n2=data2.size();
	avevar(data1,ave1,var1);
	avevar(data2,ave2,var2);
	if (var1 > var2) {
		f=var1/var2;
		df1=n1-1;
		df2=n2-1;
	} else {
		f=var2/var1;
		df1=n2-1;
		df2=n1-1;
	}
	prob = 2.0*betai(0.5*df2,0.5*df1,df2/(df2+df1*f));
	if (prob > 1.0) prob=2.0-prob;
}
Esempio n. 6
0
void spear(float data1[], float data2[], unsigned long n, float *d, float *zd,
	float *probd, float *rs, float *probrs)
{
	float betai(float a, float b, float x);
	void crank(unsigned long n, float w[], float *s);
	float erfcc(float x);
	void sort2(unsigned long n, float arr[], float brr[]);
	unsigned long j;
	float vard,t,sg,sf,fac,en3n,en,df,aved,*wksp1,*wksp2;

	wksp1=vector(1,n);
	wksp2=vector(1,n);
	for (j=1;j<=n;j++) {
		wksp1[j]=data1[j];
		wksp2[j]=data2[j];
	}
	sort2(n,wksp1,wksp2);
	crank(n,wksp1,&sf);
	sort2(n,wksp2,wksp1);
	crank(n,wksp2,&sg);
	*d=0.0;
	for (j=1;j<=n;j++)
		*d += SQR(wksp1[j]-wksp2[j]);
	en=n;
	en3n=en*en*en-en;
	aved=en3n/6.0-(sf+sg)/12.0;
	fac=(1.0-sf/en3n)*(1.0-sg/en3n);
	vard=((en-1.0)*en*en*SQR(en+1.0)/36.0)*fac;
	*zd=(*d-aved)/sqrt(vard);
	*probd=erfcc(fabs(*zd)/1.4142136);
	*rs=(1.0-(6.0/en3n)*(*d+(sf+sg)/12.0))/sqrt(fac);
	fac=(*rs+1.0)*(1.0-(*rs));
	if (fac > 0.0) {
		t=(*rs)*sqrt((en-2.0)/fac);
		df=en-2.0;
		*probrs=betai(0.5*df,0.5,df/(df+t*t));
	} else
		*probrs=0.0;
	free_vector(wksp2,1,n);
	free_vector(wksp1,1,n);
}
Esempio n. 7
0
void ftest(float data1[], unsigned long n1, float data2[], unsigned long n2,
	float *f, float *prob)
{
	void avevar(float data[], unsigned long n, float *ave, float *var);
	float beta1(float a, float b, float x);
	float var1, var2, ave1, ave2, df1, df2;

	avevar(data1, n1, &ave1, &var1);
	avevar(data2, n2, &ave2, &var2);
	if (var1 > var2) {
		*f = var1 / var2;
		df1 = n1 - 1;
		df2 = n2 - 1;
	}
	else {
		*f = var2 / var1;
		df1 = n2 - 1;
		df2 = n1 - 1;
	}
	*prob = 2.0*betai(0.5*df2, 0.5*df1, df2 / (df2 + df1*(*f)));
	if (*prob > 1.0) *prob = 2.0 - *prob;
}
Esempio n. 8
0
File: ttests.c Progetto: RJVB/xgraph
  /* Given d1 and d2, this routine returns Student's t in *t, and
   \ its significance as the result, small values indicating that the arrays have significantly differ-
   \ ent means. The data arrays are allowed to be drawn from populations with unequal variances.
   */
double SS_TTest_uneq( SimpleStats *d1, SimpleStats *d2, double *t )
{ double var1, var2, df, lt;
  int n1= d1->count, n2= d2->count;
	if( !t ){
		t= &lt;
	}
	if( !d1->curV || !d2->curV || n1< 2 || n2< 2 ){
		*t= -1;
		return( 2 );
	}
	if( !d1->stdved ){
		SS_St_Dev(d1);
	}
	var1= d1->stdv * d1->stdv;
	if( !d2->stdved ){
		SS_St_Dev(d2);
	}
	var2= d2->stdv * d2->stdv;
	*t= ( d1->mean - d2->mean )/ sqrt( var1/n1 + var2/n2 );
	df= SQR( var1/n1 + var2/n2 )/ ( SQR(var1/n1)/(n1-1) + SQR(var2/n2)/(n2-1) );
	return( betai( 0.5* df, 0.5, df/(df+ (*t)*(*t)) ) );
}
Esempio n. 9
0
File: ttests.c Progetto: RJVB/xgraph
  /* Given the arrays data1[1..n1] and data2[1..n2], this routine returns the value of f, and
   \its significance as prob. Small values of prob indicate that the two arrays have significantly
   \different variances.
   */
double SS_FTest( SimpleStats *d1, SimpleStats *d2, double *f )
{ double var1, var2, lf, df1, df2, prob;
  int n1= d1->count, n2= d2->count;
	if( !f ){
		f= &lf;
	}
	if( !d1->curV || !d2->curV || n1< 2 || n2< 2 ){
		*f= -1;
		return( 2 );
	}
	if( !d1->stdved ){
		SS_St_Dev(d1);
	}
	var1= d1->stdv * d1->stdv;
	if( !d2->stdved ){
		SS_St_Dev(d2);
	}
	var2= d2->stdv * d2->stdv;

	if( var1 > var2 ){ 
	  /* Make F the ratio of the larger variance to the smaller one.	*/
		*f= var1/var2;
		df1= n1-1;
		df2= n2-1;
	}
	else{
		*f= var2/var1;
		df1= n2-1;
		df2= n1-1;
	}
	prob = 2.0* betai( 0.5* df2, 0.5* df1, df2/(df2 + df1*(*f)) );
	if( prob > 1.0){
		prob= 2.0- prob;
	}
	return( prob );
}
Esempio n. 10
0
/** beta distribution function for df1b2variable objects (alias of betai).
    \param x \f$x\f$
    \param a \f$a\f$
    \param b \f$b\f$
    \param maxit Maximum number of iterations for the continued fraction approximation in betacf.
    \return Incomplete beta function \f$I_x(a,b)\f$

    \n\n The implementation of this algorithm was inspired by
    "Numerical Recipes in C", 2nd edition,
    Press, Teukolsky, Vetterling, Flannery, chapter 2
*/
df1b2variable pbeta(double x, const df1b2variable & a,const df1b2variable & b, int maxit){
  return betai(a,b,x,maxit);
}
Esempio n. 11
0
/** beta distribution function for constant objects (alias of ibeta function with same arguments order as in R).
    \param x \f$x\f$
    \param a \f$a\f$
    \param b \f$b\f$
    \param maxit Maximum number of iterations for the continued fraction approximation in betacf.
    \return Incomplete beta function \f$I_x(a,b)\f$

    \n\n The implementation of this algorithm was inspired by
    "Numerical Recipes in C", 2nd edition,
    Press, Teukolsky, Vetterling, Flannery, chapter 2
*/
double pbeta(const double x, const double a, const double b, int maxit){
  return betai(a,b,x,maxit);
}
Esempio n. 12
0
// The student's T-distribution
double tdist(double x, double df)
   {
   return betai(df * 0.5, 0.5, df/(df + x*x));
   }
Esempio n. 13
0
double fdist(double x, double v1, double v2)
   {
   return betai(v2/2, v1/2, v2/(v2+v1*x));
   }
Esempio n. 14
0
double getBinomPval(int n, int k, double p)
{
	if (k == 0) return 1;
	else return betai(k, n-k+1, p);
}
Esempio n. 15
0
double cumulative_binomial_prob(int success, int trials, double p)
{
	return betai(success, trials, p);
}