X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flanguage%2Fstats%2Fcochran.c;h=480248637f4b1890dd463e37f1e9fea6518bf3f8;hb=5cab4cf3322f29c0ed7134d23740e07382914f20;hp=091715694e0aa064f202e0334c88c8acdbc3be00;hpb=37f0de7f0ee1870cf5fd4b802be092be844a5b95;p=pspp diff --git a/src/language/stats/cochran.c b/src/language/stats/cochran.c index 091715694e..480248637f 100644 --- a/src/language/stats/cochran.c +++ b/src/language/stats/cochran.c @@ -32,9 +32,10 @@ #include "libpspp/cast.h" #include "libpspp/message.h" #include "libpspp/misc.h" -#include "output/tab.h" +#include "output/pivot-table.h" #include "gettext.h" +#define N_(msgid) msgid #define _(msgid) gettext (msgid) struct cochran @@ -146,103 +147,53 @@ cochran_execute (const struct dataset *ds, static void show_freqs_box (const struct one_sample_test *ost, const struct cochran *ct) { - int i; - const struct fmt_spec *wfmt = dict_get_weight_format (ct->dict); - - const int row_headers = 1; - const int column_headers = 2; - struct tab_table *table = - tab_create (row_headers + 2, column_headers + ost->n_vars); - tab_set_format (table, RC_WEIGHT, wfmt); - - tab_headers (table, row_headers, 0, column_headers, 0); - - tab_title (table, _("Frequencies")); - - /* Vertical lines inside the box */ - tab_box (table, 1, 0, -1, TAL_1, - row_headers, 0, tab_nc (table) - 1, tab_nr (table) - 1 ); - - /* Box around the table */ - tab_box (table, TAL_2, TAL_2, -1, -1, - 0, 0, tab_nc (table) - 1, tab_nr (table) - 1 ); - - tab_joint_text (table, 1, 0, 2, 0, - TAT_TITLE | TAB_CENTER, _("Value")); - - tab_text_format (table, 1, 1, 0, _("Success (%.*g)"), - DBL_DIG + 1, ct->success); - tab_text_format (table, 2, 1, 0, _("Failure (%.*g)"), - DBL_DIG + 1, ct->failure); - - tab_hline (table, TAL_2, 0, tab_nc (table) - 1, column_headers); - tab_vline (table, TAL_2, row_headers, 0, tab_nr (table) - 1); - - for (i = 0 ; i < ost->n_vars ; ++i) + struct pivot_table *table = pivot_table_create (N_("Frequencies")); + pivot_table_set_weight_var (table, dict_get_weight (ct->dict)); + + char *success = xasprintf (_("Success (%.*g)"), DBL_DIG + 1, ct->success); + char *failure = xasprintf (_("Failure (%.*g)"), DBL_DIG + 1, ct->failure); + struct pivot_dimension *values = pivot_dimension_create ( + table, PIVOT_AXIS_COLUMN, N_("Value"), + success, PIVOT_RC_COUNT, + failure, PIVOT_RC_COUNT); + values->root->show_label = true; + free (failure); + free (success); + + struct pivot_dimension *variables = pivot_dimension_create ( + table, PIVOT_AXIS_ROW, N_("Variable")); + + for (size_t i = 0 ; i < ost->n_vars ; ++i) { - tab_text (table, 0, column_headers + i, - TAB_LEFT, var_to_string (ost->vars[i])); + int row = pivot_category_create_leaf ( + variables->root, pivot_value_new_variable (ost->vars[i])); - tab_double (table, 1, column_headers + i, 0, - ct->hits[i], NULL, RC_WEIGHT); - - tab_double (table, 2, column_headers + i, 0, - ct->misses[i], NULL, RC_WEIGHT); + pivot_table_put2 (table, 0, row, pivot_value_new_number (ct->hits[i])); + pivot_table_put2 (table, 1, row, pivot_value_new_number (ct->misses[i])); } - tab_submit (table); + pivot_table_submit (table); } - - static void show_sig_box (const struct cochran *ch) { - const struct fmt_spec *wfmt = dict_get_weight_format (ch->dict); - - const int row_headers = 1; - const int column_headers = 0; - struct tab_table *table = - tab_create (row_headers + 1, column_headers + 4); - - - tab_set_format (table, RC_WEIGHT, wfmt); - - tab_headers (table, row_headers, 0, column_headers, 0); - - tab_title (table, _("Test Statistics")); - - tab_text (table, 0, column_headers, - TAT_TITLE | TAB_LEFT , _("N")); - - tab_text (table, 0, 1 + column_headers, - TAT_TITLE | TAB_LEFT , _("Cochran's Q")); - - tab_text (table, 0, 2 + column_headers, - TAT_TITLE | TAB_LEFT, _("df")); - - tab_text (table, 0, 3 + column_headers, - TAT_TITLE | TAB_LEFT, _("Asymp. Sig.")); - - /* Box around the table */ - tab_box (table, TAL_2, TAL_2, -1, -1, - 0, 0, tab_nc (table) - 1, tab_nr (table) - 1 ); - - tab_hline (table, TAL_2, 0, tab_nc (table) -1, column_headers); - tab_vline (table, TAL_2, row_headers, 0, tab_nr (table) - 1); - - tab_double (table, 1, column_headers, - 0, ch->cc, NULL, RC_WEIGHT); + struct pivot_table *table = pivot_table_create (N_("Test Statistics")); - tab_double (table, 1, column_headers + 1, - 0, ch->q, NULL, RC_OTHER); + pivot_table_set_weight_format (table, dict_get_weight_format (ch->dict)); - tab_double (table, 1, column_headers + 2, - 0, ch->df, NULL, RC_INTEGER); + pivot_dimension_create (table, PIVOT_AXIS_COLUMN, N_("Value"), N_("Value")); - tab_double (table, 1, column_headers + 3, - 0, gsl_cdf_chisq_Q (ch->q, ch->df), - NULL, RC_PVALUE); + pivot_dimension_create ( + table, PIVOT_AXIS_ROW, N_("Statistics"), + N_("N"), PIVOT_RC_COUNT, + N_("Cochran's Q"), PIVOT_RC_SIGNIFICANCE, + N_("df"), PIVOT_RC_INTEGER, + N_("Asymp. Sig."), PIVOT_RC_SIGNIFICANCE); - tab_submit (table); + double sig = gsl_cdf_chisq_Q (ch->q, ch->df); + double entries[] = { ch->cc, ch->q, ch->df, sig }; + for (size_t i = 0; i < sizeof entries / sizeof *entries; i++) + pivot_table_put2 (table, 0, i, pivot_value_new_number (entries[i])); + pivot_table_submit (table); }