void binom_post(const double* prior, double* post, double y, double n, double epsrel, int max_iter) { double rs[2]; double fq[2] = {0, 0}; binom_solver(prior, rs, 0.0, epsrel, max_iter); rs[0] = rs[0] + y; rs[1] = rs[1] + n - y; binom_transform(rs, fq, post); }
void binom_post(const double* prior, double* post, double y, double n, const double* ival, double epsrel, int max_iter) { double rs[2]; double zero[2] = {0, 0}; // solver(prior, rs, ival, 0.0, epsrel, max_iter, &binom_transform_gsl); binom_solver(prior, rs, ival, 0.0, epsrel, max_iter); rs[0] = rs[0] + y; rs[1] = rs[1] + n - y; binom_transform(rs, zero, post); // Rprintf("fq: %g, %g; rs: %g, %g\n", post[0], post[1], rs[0], rs[1]); // Rprintf("epsrel: %g, max_iter, %i\n", epsrel, max_iter); }
void nbinom_post(const double* prior, double* post, double y, double n, const double* ival, double epsrel, int max_iter) { double rs[2]; double zero[2] = {0, 0}; double fq[2]; memmove(fq, prior, 2 * sizeof(double)); fq[0] = fq[0] - log(n); // solver(fq, rs, ival, 0.0, epsrel, max_iter, &binom_transform_gsl); binom_solver(fq, rs, ival, 0.0, epsrel, max_iter); rs[0] = rs[0] + y; rs[1] = rs[1] + n; binom_transform(rs, zero, post); post[0] = post[0] + log(n); }
int main(int argc, char** argv) { utest_binom_transform(1, 1); utest_binom_transform_gsl(1, 1); double prior[2] = {0.0, 3.3}; double post[2]; double rs[2]; binom_solver(prior, rs, 0.0, 1e-8, 100); printf("rs = %g, %g\n", rs[0], rs[1]); binom_post(prior, post, 1, 1, 1e-8, 100); printf("post = %g, %g\n", post[0], post[1]); return 0; }
int main(int argc, char** argv) { // Function tests utest_binom_transform_gsl(1, 1); utest_binom_transform(1, 1); double prior[2] = {0.0, 3.3}; double post[2]; double rs[2]; double ival[2] = {0.1, 0.1}; // Exact Rprintf("Exact...\n"); solver(prior, rs, ival, 0.0, 1e-8, 100, &binom_transform_gsl); Rprintf("rs = %g, %g\n", rs[0], rs[1]); binom_post(prior, post, 1, 1, ival, 1e-8, 100); Rprintf("post = %g, %g\n", post[0], post[1]); // Newton Rprintf("Exact with Jacobian...\n"); binom_solver(prior, rs, ival, 0.0, 1e-8, 100); Rprintf("rs = %g, %g\n", rs[0], rs[1]); binom_post(prior, post, 1, 1, ival, 1e-8, 100); Rprintf("post = %g, %g\n", post[0], post[1]); // Class tests Rprintf("Exact (by class)...\n"); CUBSSolver cs(&binom_transform_gsl); cs.solve(prior, rs, 0.0, 1e-8, 100); Rprintf("rs = %g, %g\n", rs[0], rs[1]); BinomUpdate binom; binom.update(prior, post, 1, 1, 1e-8, 100); Rprintf("post = %g, %g\n", post[0], post[1]); return 0; }