X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flanguage%2Fstats%2Fmcnemar.c;h=b05f144a74bae96a3c5a6da2b0c9fc38ecfb5205;hb=3d594a844cecb4f7759ebf9b8b2ea920e64ff379;hp=ef84b77a4e923f20dccee77f93251cfcae87ea7a;hpb=9420449c40bb1307f6c31e50b61ba03825680e3a;p=pspp diff --git a/src/language/stats/mcnemar.c b/src/language/stats/mcnemar.c index ef84b77a4e..b05f144a74 100644 --- a/src/language/stats/mcnemar.c +++ b/src/language/stats/mcnemar.c @@ -83,9 +83,9 @@ mcnemar_execute (const struct dataset *ds, struct casereader *r = input; - struct mcnemar *mc = xcalloc (t2s->n_pairs, sizeof *mc); + struct mcnemar *mc = XCALLOC (t2s->n_pairs, struct mcnemar); - for (i = 0 ; i < t2s->n_pairs; ++i ) + for (i = 0 ; i < t2s->n_pairs; ++i) { mc[i].val0.f = mc[i].val1.f = SYSMIS; } @@ -94,7 +94,7 @@ mcnemar_execute (const struct dataset *ds, { const double weight = dict_get_case_weight (dict, c, &warn); - for (i = 0 ; i < t2s->n_pairs; ++i ) + for (i = 0 ; i < t2s->n_pairs; ++i) { variable_pair *vp = &t2s->pairs[i]; const union value *value0 = case_data (c, (*vp)[0]); @@ -107,7 +107,7 @@ mcnemar_execute (const struct dataset *ds, continue; - if ( mc[i].val0.f == SYSMIS) + if (mc[i].val0.f == SYSMIS) { if (mc[i].val1.f != value0->f) mc[i].val0.f = value0->f; @@ -115,7 +115,7 @@ mcnemar_execute (const struct dataset *ds, mc[i].val0.f = value1->f; } - if ( mc[i].val1.f == SYSMIS) + if (mc[i].val1.f == SYSMIS) { if (mc[i].val0.f != value1->f) mc[i].val1.f = value1->f; @@ -127,15 +127,15 @@ mcnemar_execute (const struct dataset *ds, { mc[i].n00 += weight; } - else if ( mc[i].val0.f == value0->f && mc[i].val1.f == value1->f) + else if (mc[i].val0.f == value0->f && mc[i].val1.f == value1->f) { mc[i].n10 += weight; } - else if ( mc[i].val1.f == value0->f && mc[i].val0.f == value1->f) + else if (mc[i].val1.f == value0->f && mc[i].val0.f == value1->f) { mc[i].n01 += weight; } - else if ( mc[i].val1.f == value0->f && mc[i].val1.f == value1->f) + else if (mc[i].val1.f == value0->f && mc[i].val1.f == value1->f) { mc[i].n11 += weight; } @@ -235,7 +235,9 @@ output_statistics_table (const struct two_sample_test *t2s, pairs->root, pivot_value_new_user_text_nocopy (make_pair_name (vp))); double n = mc[i].n00 + mc[i].n01 + mc[i].n10 + mc[i].n11; - double sig = gsl_cdf_binomial_P (mc[i].n01, 0.5, mc[i].n01 + mc[i].n10); + double sig = gsl_cdf_binomial_P ((mc[i].n01 > mc[i].n10) ? mc[i].n10: mc[i].n01, + 0.5, mc[i].n01 + mc[i].n10); + double point = gsl_ran_binomial_pdf (mc[i].n01, 0.5, mc[i].n01 + mc[i].n10); double entries[] = { n, 2.0 * sig, sig, point };