X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flanguage%2Fstats%2Fwilcoxon.c;h=2a8061dd91e0e17328e6ce45e0b25ffe5452b8d0;hb=047d4a8e14cdbb50258bf8c5634db24a88767f24;hp=f145a0c4c8f27c118692a4a37e301efcf011a2a9;hpb=1fc57714adfb36009ad22e2a164263b90548bf11;p=pspp diff --git a/src/language/stats/wilcoxon.c b/src/language/stats/wilcoxon.c index f145a0c4c8..2a8061dd91 100644 --- a/src/language/stats/wilcoxon.c +++ b/src/language/stats/wilcoxon.c @@ -1,5 +1,5 @@ /* Pspp - a program for statistical analysis. - Copyright (C) 2008, 2009 Free Software Foundation, Inc. + Copyright (C) 2008, 2009, 2010, 2011 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -18,32 +18,27 @@ #include -#include "wilcoxon.h" +#include "language/stats/wilcoxon.h" #include #include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "minmax.h" -#include "xalloc.h" + +#include "data/casereader.h" +#include "data/casewriter.h" +#include "data/dataset.h" +#include "data/dictionary.h" +#include "data/format.h" +#include "data/subcase.h" +#include "data/variable.h" +#include "libpspp/assertion.h" +#include "libpspp/message.h" +#include "libpspp/misc.h" +#include "math/sort.h" +#include "math/wilcoxon-sig.h" +#include "output/tab.h" + +#include "gl/minmax.h" +#include "gl/xalloc.h" static double append_difference (const struct ccase *c, casenumber n UNUSED, void *aux) @@ -84,11 +79,11 @@ wilcoxon_execute (const struct dataset *ds, int i; bool warn = true; const struct dictionary *dict = dataset_dict (ds); - const struct two_sample_test *t2s = (struct two_sample_test *) test; + const struct two_sample_test *t2s = UP_CAST (test, const struct two_sample_test, parent); - struct wilcoxon_state *ws = xcalloc (sizeof (*ws), t2s->n_pairs); + struct wilcoxon_state *ws = xcalloc (t2s->n_pairs, sizeof *ws); const struct variable *weight = dict_get_weight (dict); - struct variable *weightx = var_create_internal (WEIGHT_IDX); + struct variable *weightx = dict_create_internal_var (WEIGHT_IDX, 0); struct caseproto *proto; input = @@ -108,8 +103,8 @@ wilcoxon_execute (const struct dataset *ds, struct subcase ordering; variable_pair *vp = &t2s->pairs[i]; - ws[i].sign = var_create_internal (0); - ws[i].absdiff = var_create_internal (1); + ws[i].sign = dict_create_internal_var (0, 0); + ws[i].absdiff = dict_create_internal_var (1, 0); r = casereader_create_filter_missing (r, *vp, 2, exclude, @@ -195,15 +190,15 @@ wilcoxon_execute (const struct dataset *ds, casereader_destroy (input); - var_destroy (weightx); + dict_destroy_internal_var (weightx); show_ranks_box (ws, t2s, dict); show_tests_box (ws, t2s, exact, timer); for (i = 0 ; i < t2s->n_pairs; ++i ) { - var_destroy (ws[i].sign); - var_destroy (ws[i].absdiff); + dict_destroy_internal_var (ws[i].sign); + dict_destroy_internal_var (ws[i].absdiff); } free (ws); @@ -225,9 +220,8 @@ show_ranks_box (const struct wilcoxon_state *ws, const struct variable *wv = dict_get_weight (dict); const struct fmt_spec *wfmt = wv ? var_get_print_format (wv) : & F_8_0; - struct tab_table *table = tab_create (5, 1 + 4 * t2s->n_pairs, 0); - - tab_dim (table, tab_natural_dimensions, NULL, NULL); + struct tab_table *table = tab_create (5, 1 + 4 * t2s->n_pairs); + tab_set_format (table, RC_WEIGHT, wfmt); tab_title (table, _("Ranks")); @@ -269,24 +263,24 @@ show_ranks_box (const struct wilcoxon_state *ws, /* N */ - tab_double (table, 2, 1 + i * 4, TAB_RIGHT, ws[i].negatives.n, wfmt); - tab_double (table, 2, 2 + i * 4, TAB_RIGHT, ws[i].positives.n, wfmt); - tab_double (table, 2, 3 + i * 4, TAB_RIGHT, ws[i].n_zeros, wfmt); + tab_double (table, 2, 1 + i * 4, TAB_RIGHT, ws[i].negatives.n, NULL, RC_WEIGHT); + tab_double (table, 2, 2 + i * 4, TAB_RIGHT, ws[i].positives.n, NULL, RC_WEIGHT); + tab_double (table, 2, 3 + i * 4, TAB_RIGHT, ws[i].n_zeros, NULL, RC_WEIGHT); tab_double (table, 2, 4 + i * 4, TAB_RIGHT, - ws[i].n_zeros + ws[i].positives.n + ws[i].negatives.n, wfmt); + ws[i].n_zeros + ws[i].positives.n + ws[i].negatives.n, NULL, RC_WEIGHT); /* Sums */ - tab_double (table, 4, 1 + i * 4, TAB_RIGHT, ws[i].negatives.sum, NULL); - tab_double (table, 4, 2 + i * 4, TAB_RIGHT, ws[i].positives.sum, NULL); + tab_double (table, 4, 1 + i * 4, TAB_RIGHT, ws[i].negatives.sum, NULL, RC_OTHER); + tab_double (table, 4, 2 + i * 4, TAB_RIGHT, ws[i].positives.sum, NULL, RC_OTHER); /* Means */ tab_double (table, 3, 1 + i * 4, TAB_RIGHT, - ws[i].negatives.sum / (double) ws[i].negatives.n, NULL); + ws[i].negatives.sum / (double) ws[i].negatives.n, NULL, RC_OTHER); tab_double (table, 3, 2 + i * 4, TAB_RIGHT, - ws[i].positives.sum / (double) ws[i].positives.n, NULL); + ws[i].positives.sum / (double) ws[i].positives.n, NULL, RC_OTHER); } @@ -306,9 +300,7 @@ show_tests_box (const struct wilcoxon_state *ws, ) { size_t i; - struct tab_table *table = tab_create (1 + t2s->n_pairs, exact ? 5 : 3, 0); - - tab_dim (table, tab_natural_dimensions, NULL, NULL); + struct tab_table *table = tab_create (1 + t2s->n_pairs, exact ? 5 : 3); tab_title (table, _("Test Statistics")); @@ -324,12 +316,12 @@ show_tests_box (const struct wilcoxon_state *ws, tab_text (table, 0, 1, TAB_LEFT, _("Z")); - tab_text (table, 0, 2, TAB_LEFT, _("Asymp. Sig (2-tailed)")); + tab_text (table, 0, 2, TAB_LEFT, _("Asymp. Sig. (2-tailed)")); if ( exact ) { - tab_text (table, 0, 3, TAB_LEFT, _("Exact Sig (2-tailed)")); - tab_text (table, 0, 4, TAB_LEFT, _("Exact Sig (1-tailed)")); + tab_text (table, 0, 3, TAB_LEFT, _("Exact Sig. (2-tailed)")); + tab_text (table, 0, 4, TAB_LEFT, _("Exact Sig. (1-tailed)")); #if 0 tab_text (table, 0, 5, TAB_LEFT, _("Point Probability")); @@ -356,23 +348,23 @@ show_tests_box (const struct wilcoxon_state *ws, z /= sqrt (n * (n + 1) * (2*n + 1)/24.0 - ws[i].tiebreaker / 48.0); - tab_double (table, 1 + i, 1, TAB_RIGHT, z, NULL); + tab_double (table, 1 + i, 1, TAB_RIGHT, z, NULL, RC_OTHER); tab_double (table, 1 + i, 2, TAB_RIGHT, 2.0 * gsl_cdf_ugaussian_P (z), - NULL); + NULL, RC_PVALUE); if (exact) { double p = LevelOfSignificanceWXMPSR (ws[i].positives.sum, n); if (p < 0) { - msg (MW, ("Too many pairs to calculate exact significance.")); + msg (MW, _("Too many pairs to calculate exact significance.")); } else { - tab_double (table, 1 + i, 3, TAB_RIGHT, p, NULL); - tab_double (table, 1 + i, 4, TAB_RIGHT, p / 2.0, NULL); + tab_double (table, 1 + i, 3, TAB_RIGHT, p, NULL, RC_PVALUE); + tab_double (table, 1 + i, 4, TAB_RIGHT, p / 2.0, NULL, RC_PVALUE); } } }