double as_compute_power(int (*generator)(double *, double *, int, unsigned long int), double * params, int n, int power_reps, int cv_reps) { /* * Computes power of AS test with AR(1) null, estimated parameters, and * given alternative. The first two arguments to the function are 'generator', * a function pointer that points to a function for generating time series * from the alternative, and a double pointer 'params' that points to an * array of parameters that will be passed to generator. * */ double X[n]; double T[power_reps]; int i; double betahat, alphahat, shat; double cv, ts; srand(time(0)); int k = rand() % 1000000; for (i = 0; i < power_reps; i++) { generator(X, params, n, k + i); fit_params(X, n, &betahat, &alphahat, &shat); cv = as_cv_est_params(betahat, alphahat, shat, n, cv_reps); ts = as_test_stat(betahat, alphahat, shat, X, n); T[i] = ts > cv; } return mean(T, power_reps); }
int main(int argc, string argv[]) { real mass_scale; initparam(argv, defv); nmax = getiparam("nmax"); radius_tab = (double *) allocate(nmax * sizeof(double)); density_tab = (double *) allocate(nmax * sizeof(double)); mass_tab = (double *) allocate(nmax * sizeof(double)); read_table(getparam("in"), getbparam("smooth")); integ_mass(getbparam("smooth")); fit_params(); mass_scale = (strnull(getparam("mtot")) ? 1 : getdparam("mtot") / mtot); if (!strnull(getparam("out"))) write_gsp(getparam("out"), mass_scale); return (0); }
double as_cv_est_params(double beta, double alpha, double s, int n, int num_reps) { double X[n]; double T[num_reps]; int i; srand(time(0)); int k = rand() % 1000000; double params[3] = {beta, alpha, s}; double betahat; double alphahat; double shat; for (i = 0; i < num_reps; i++) { ar1_ts(X, params, n, k + i); // IID draws, because alpha=0 fit_params(X, n, &betahat, &alphahat, &shat); T[i] = as_test_stat(betahat, alphahat, shat, X, n); } gsl_sort(T, 1, num_reps); return gsl_stats_quantile_from_sorted_data(T, 1, num_reps, 0.95); }