/* Function: esl_sxp_logcdf() * * Purpose: Calculates the log of the cumulative distribution function for the * stretched exponential pdf, $\log P(X \leq x)$, given * quantile <x>, offset <mu>, and parameters <lambda> and <tau>. */ double esl_sxp_logcdf(double x, double mu, double lambda, double tau) { double y = lambda * (x-mu); double val; if (x <= mu) return -eslINFINITY; esl_stats_IncompleteGamma(1./tau, exp(tau * log(y)), &val, NULL); return log(val); }
/* Function: esl_gam_cdf() * Incept: SRE, Mon Nov 14 12:47:36 2005 [HHMI HQ] * * Purpose: Calculates the cumulative distribution function * for the gamma, $P(X \leq x)$, given value <x>, * location parameter <mu>, scale parameter <lambda>, and * shape parameter <tau>. * * (For $\mu=0$, $\lambda = 1$, this is the * incomplete Gamma function $P(\tau,x)$.) */ double esl_gam_cdf(double x, double mu, double lambda, double tau) { double y = lambda * (x - mu); double val; if (y <= 0.) return 0.; esl_stats_IncompleteGamma(tau, y, &val, NULL); return val; }
/* Function: esl_gam_logsurv() * Incept: SRE, Mon Nov 14 13:14:05 2005 [HHMI HQ] * * Purpose: Calculates the log of the survival function for the gamma, * $\log P(X > x)$, given value <x>, location parameter <mu>, * scale parameter <lambda>, and shape parameter <tau>. * * Relies on <esl_stats_IncompleteGamma()>, which has limited * dynamic range. Any result of < -700 or so will be -infinity. * To fix this, we need a log version of <esl_stats_IncompleteGamma()>. */ double esl_gam_logsurv(double x, double mu, double lambda, double tau) { double y = lambda * (x - mu); double val; if (y <= 0.) return 0.; esl_stats_IncompleteGamma(tau, y, NULL, &val); return log(val); }
/* Function: esl_gam_logcdf() * Incept: SRE, Mon Nov 14 13:10:21 2005 [HHMI HQ] * * Purpose: Calculates the log of the cumulative distribution function * for the gamma, $\log P(X \leq x)$, given value <x>, location * parameter <mu>, scale parameter <lambda>, and shape * parameter <tau>. */ double esl_gam_logcdf(double x, double mu, double lambda, double tau) { double y = lambda * (x - mu); double val; if (y <= 0.) return -eslINFINITY; esl_stats_IncompleteGamma(tau, y, &val, NULL); return log(val); }
/* Function: esl_sxp_logsurv() * * Purpose: Calculates the log survival function for the * stretched exponential pdf, $\log P(X > x)$, given * quantile <x>, offset <mu>, and parameters <lambda> and <tau>. */ double esl_sxp_logsurv(double x, double mu, double lambda, double tau) { double y = lambda * (x-mu); double val; if (x <= mu) return 0.0; esl_stats_IncompleteGamma(1./tau, exp(tau * log(y)), NULL, &val); return log(val); }
/* Function: esl_sxp_cdf() * * Purpose: Calculates the cumulative distribution function for the * stretched exponential pdf, $P(X \leq x)$, given * quantile <x>, offset <mu>, and parameters <lambda> and <tau>. */ double esl_sxp_cdf(double x, double mu, double lambda, double tau) { double y = lambda * (x-mu); double val; if (x <= mu) return 0.; esl_stats_IncompleteGamma(1/tau, exp(tau * log(y)), &val, NULL); ESL_DASSERT1 (( !isnan(val))); return val; }
/* Function: esl_stats_ChiSquaredTest() * Synopsis: Calculates a $\chi^2$ P-value. * Incept: SRE, Tue Jul 19 11:39:32 2005 [St. Louis] * * Purpose: Calculate the probability that a chi-squared statistic * with <v> degrees of freedom would exceed the observed * chi-squared value <x>; return it in <ret_answer>. If * this probability is less than some small threshold (say, * 0.05 or 0.01), then we may reject the hypothesis we're * testing. * * Args: v - degrees of freedom * x - observed chi-squared value * ret_answer - RETURN: P(\chi^2 > x) * * Returns: <eslOK> on success. * * Throws: <eslERANGE> if <v> or <x> are out of valid range. * <eslENOHALT> if iterative calculation fails. */ int esl_stats_ChiSquaredTest(int v, double x, double *ret_answer) { return esl_stats_IncompleteGamma((double)v/2, x/2, NULL, ret_answer); }