/* nag_chi_sq_goodness_of_fit_test (g08cgc) Example Program. * * Copyright 2000 Numerical Algorithms Group. * * Mark 6, 2000. */ #include #include #include #include #include #include int main (void) { char cdist[2]; double chisq, *chisqi=0, *cint=0, *eval=0, p, *par=0, *prob=0, *x=0, xmax; double xmin; Integer i, iclass, *ifreq=0, init, n, nclass, ndf, npest; Integer exit_status=0; Nag_Distributions cdist_enum; NagError fail; Nag_ClassBoundary class_enum; INIT_FAIL(fail); Vprintf("g08cgc Example Program Results\n"); /* Skip heading in data file */ Vscanf("%*[^\n]"); Vscanf("%ld %ld %s %*[^\n] ", &n, &nclass, cdist); if (*cdist == 'U') cdist_enum = Nag_Uniform; else if (*cdist == 'N') cdist_enum = Nag_Normal; else if (*cdist == 'G') cdist_enum = Nag_Gamma; else if (*cdist == 'C') cdist_enum = Nag_ChiSquare; else if (*cdist == 'E') cdist_enum = Nag_Exponential; else if (*cdist == 'A') cdist_enum = Nag_UserProb; else cdist_enum = (Nag_Distributions)-999; if (!(x = NAG_ALLOC(n, double)) || !(cint = NAG_ALLOC(nclass-1, double) ) || !(par = NAG_ALLOC(2, double)) || !(ifreq = NAG_ALLOC(nclass, Integer))) { Vprintf("Allocation failure\n"); exit_status = -1; goto END; } for (i = 1; i <= 2; ++i) Vscanf("%lf", &par[i - 1]); npest = 0; /* Generate random numbers from a uniform distribution */ init = 0; g05cbc(init); for (i = 0; i < n; i++) x[i] = g05dac(par[0], par[1]); iclass = 0; /* Determine suitable intervals */ if (cdist_enum == Nag_Uniform) { iclass = 1; cint[0] = par[0] + (par[1] - par[0]) / nclass; for (i = 2; i <= nclass - 1; ++i) cint[i - 1] = cint[i - 2] + (par[1] - par[0]) / nclass; } if (iclass == 1) class_enum = Nag_ClassBoundaryUser; else class_enum = Nag_ClassBoundaryComp; g01aec(n, x, nclass, class_enum, cint, ifreq, &xmin, &xmax, &fail); if (fail.code != NE_NOERROR) { Vprintf("Error from g01aec.\n%s\n", fail.message); return 1; } if (!(chisqi = NAG_ALLOC(nclass, double)) || !(eval = NAG_ALLOC(nclass, double)) || !(prob = NAG_ALLOC(nclass, double))) { Vprintf("Allocation failure\n"); exit_status = -1; goto END; } g08cgc(nclass, ifreq, cint, cdist_enum, par, npest, prob, &chisq, &p, &ndf, eval, chisqi, &fail); if (fail.code != NE_NOERROR) { Vprintf("Error from g08cgc.\n%s\n", fail.message); exit_status = 1; goto END; } Vprintf("\n"); Vprintf("%s%10.4f\n", "Chi-squared test statistic = ", chisq); Vprintf("%s%5ld\n", "Degrees of freedom. = ", ndf); Vprintf("%s%10.4f\n", "Significance level = ", p); Vprintf("\n"); Vprintf("%s\n", "The contributions to the test statistic are :-"); for (i = 1; i <= nclass; ++i) Vprintf("%10.4f\n", chisqi[i - 1]); END: if (x) NAG_FREE(x); if (cint) NAG_FREE(cint); if (par) NAG_FREE(par); if (ifreq) NAG_FREE(ifreq); if (chisqi) NAG_FREE(chisqi); if (eval) NAG_FREE(eval); if (prob) NAG_FREE(prob); return exit_status; }