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;
}
{
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]);
const union value *value1 = case_data (c, (*vp)[1]);
- if (var_is_value_missing ((*vp)[0], value0, exclude))
+ if (var_is_value_missing ((*vp)[0], value0) & exclude)
continue;
- if (var_is_value_missing ((*vp)[1], value1, exclude))
+ if (var_is_value_missing ((*vp)[1], value1) & exclude)
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;
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;
{
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;
}
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 };