Exemple #1
0
/* Main function to be called */
void errbars (int numparams, double *p, struct kslice *ks, double **covar)
{
	int ii, ij, ik;
	lapack_int n, lda, info, worksize;
	char c;
	double *fish, *fish2, *work, *rscale, *cscale;
	double row, col, amax;
	int *piv;

	printf("\tBEGIN ERROR BAR COMPUTATION\n\tUSER ENCOURAGED TO PRAY\n");

	c = 'U';
	fish = malloc(numparams*numparams*sizeof(double));
	piv = malloc(numparams*numparams*sizeof(int));
	fish2 = malloc(numparams*numparams*sizeof(double));
	rscale = malloc(numparams*sizeof(double));
	cscale = malloc(numparams*sizeof(double));

	/* compute fisher information matrix */
	fisher(numparams, p, ks, fish);
	fisher(numparams, p, ks, fish2);

	n = numparams;
	lda = numparams;
	dgeequ_(&n, &n, fish, &lda, rscale, cscale, &row, &col, &amax, &info);
/*
	for (ii=0; ii<numparams; ii++)
		for (ij=0; ij<numparams; ij++)
			fish[ii*numparams+ij] *= rscale[ii]*cscale[ij];
*/

	n = numparams;
	lda = numparams;
	dgetrf_(&n, &n, fish, &lda, piv, &info);

	worksize = 32*n;
	work = malloc(worksize*sizeof(double));
	dgetri_(&n, fish, &lda, piv, work, &worksize, &info);
/*
	for (ii=0; ii<numparams; ii++)
		for (ij=0; ij<numparams; ij++)
			fish[ii*numparams+ij] *= rscale[ij]*cscale[ii];
*/
	/* compute inverse of fisher information matrix */
/*
	for (ii=0; ii<numparams; ii++)
	{
		for (ij=0; ij<numparams; ij++)
			printf("%d\t%d\t%e\n", ii, ij, (fish[ii*numparams+ij]));
		printf("\n");
	}
*/
	/* return */
	*covar = fish;

	/* free local memory */
	free(work);
	free(piv);
}
Exemple #2
0
 virtual double execute( const GenoVec& geno,
                         const PhenoVec& pheno,
                         const unsigned cardGenotype,
                         const unsigned cardPhenotype ) const {
   return fisher(geno, pheno, cardGenotype, cardPhenotype);
 }
Exemple #3
0
double student ( int df, double t )

/******************************************************************************/
{
  return ( fisher ( 1, df, t*t ) );
}