#include #include #include #include #include /* Computes the (log) CDF of a multinomial distribution with parameters p and N * i.e. P(X1<=n1,X2<=n2,...,XK<=nK) * Uses a approximation from * "A Representation for Multinomial Cumulative Distribution Functions", * Bruce Levin, The Annals of Statistics, v.9, n.5, pp.1123-1126, 1981 */ double cdf_multinomial_lnP (const size_t K, const unsigned int N, const double p[], const unsigned int n[]) { size_t k; double log_cdf = 0.0; double s; double gamma1=0.0, gamma2=0.0, sum_s2=0.0, sum_mu=0.0; double mu, s2, sp, pcdf, mr, mf2, mf3, mf4, mu2, mu3, mu4, x, x2, PWN; s = (double) N; log_cdf = -log(gsl_ran_poisson_pdf(N,s)); /* This is the P(W=N) bit */ for(k=0; k