X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flanguage%2Fstats%2Ft-test.q;h=c69a6cdb5bc5adb552afedbc209030d6ada3b12b;hb=5ee84736663824fe12474b78dace867e42893a14;hp=db57c49999afb70d373441856737f0f5c3cdb225;hpb=952c7c512b2eb481df13e25e65a73bf562ca6e81;p=pspp-builds.git diff --git a/src/language/stats/t-test.q b/src/language/stats/t-test.q index db57c499..c69a6cdb 100644 --- a/src/language/stats/t-test.q +++ b/src/language/stats/t-test.q @@ -18,6 +18,7 @@ #include #include +#include #include #include @@ -31,11 +32,9 @@ #include #include #include -#include #include #include #include -#include #include #include #include @@ -44,8 +43,9 @@ #include #include #include +#include -#include "size_max.h" +#include "xalloc.h" #include "gettext.h" #define _(msgid) gettext (msgid) @@ -148,13 +148,14 @@ struct pair static struct pair *pairs=0; -static int parse_value (struct lexer *lexer, union value * v, enum var_type); +static int parse_value (struct lexer *lexer, union value * v, enum val_type); /* Structures and Functions for the Statistics Summary Box */ struct ssbox; -typedef void populate_ssbox_func(struct ssbox *ssb, - struct cmd_t_test *cmd); -typedef void finalize_ssbox_func(struct ssbox *ssb); +typedef void populate_ssbox_func (struct ssbox *ssb, + const struct dictionary *, + struct cmd_t_test *cmd); +typedef void finalize_ssbox_func (struct ssbox *ssb); struct ssbox { @@ -166,25 +167,27 @@ struct ssbox }; /* Create a ssbox */ -void ssbox_create(struct ssbox *ssb, struct cmd_t_test *cmd, int mode); +void ssbox_create (struct ssbox *ssb, struct cmd_t_test *cmd, int mode); /* Populate a ssbox according to cmd */ -void ssbox_populate(struct ssbox *ssb, struct cmd_t_test *cmd); +void ssbox_populate (struct ssbox *ssb, const struct dictionary *dict, + struct cmd_t_test *cmd); /* Submit and destroy a ssbox */ -void ssbox_finalize(struct ssbox *ssb); +void ssbox_finalize (struct ssbox *ssb); /* A function to create, populate and submit the Paired Samples Correlation box */ -void pscbox(void); +static void pscbox (const struct dictionary *); /* Structures and Functions for the Test Results Box */ struct trbox; -typedef void populate_trbox_func(struct trbox *trb, - struct cmd_t_test *cmd); -typedef void finalize_trbox_func(struct trbox *trb); +typedef void populate_trbox_func (struct trbox *trb, + const struct dictionary *dict, + struct cmd_t_test *cmd); +typedef void finalize_trbox_func (struct trbox *trb); struct trbox { struct tab_table *t; @@ -193,13 +196,14 @@ struct trbox { }; /* Create a trbox */ -void trbox_create(struct trbox *trb, struct cmd_t_test *cmd, int mode); +void trbox_create (struct trbox *trb, struct cmd_t_test *cmd, int mode); /* Populate a ssbox according to cmd */ -void trbox_populate(struct trbox *trb, struct cmd_t_test *cmd); +static void trbox_populate (struct trbox *trb, const struct dictionary *dict, + struct cmd_t_test *cmd); /* Submit and destroy a ssbox */ -void trbox_finalize(struct trbox *trb); +void trbox_finalize (struct trbox *trb); /* Which mode was T-TEST invoked */ enum { @@ -230,7 +234,7 @@ static int group_calc (const struct dictionary *dict, const struct ccase *, static void group_postcalc (struct cmd_t_test *); -static void calculate(struct cmd_t_test *, +static void calculate (struct cmd_t_test *, struct casereader *, const struct dataset *); @@ -241,12 +245,12 @@ static struct cmd_t_test cmd; static bool bad_weight_warn = false; -static int compare_group_binary(const struct group_statistics *a, +static int compare_group_binary (const struct group_statistics *a, const struct group_statistics *b, const struct group_properties *p); -static unsigned hash_group_binary(const struct group_statistics *g, +static unsigned hash_group_binary (const struct group_statistics *g, const struct group_properties *p); @@ -272,10 +276,10 @@ cmd_t_test (struct lexer *lexer, struct dataset *ds) if ( m != 1) { - msg(SE, - _("TESTVAL, GROUPS and PAIRS subcommands are mutually exclusive.") + msg (SE, + _ ("TESTVAL, GROUPS and PAIRS subcommands are mutually exclusive.") ); - free_t_test(&cmd); + free_t_test (&cmd); return CMD_FAILURE; } } @@ -291,8 +295,8 @@ cmd_t_test (struct lexer *lexer, struct dataset *ds) { if (cmd.sbc_variables) { - msg(SE, _("VARIABLES subcommand is not appropriate with PAIRS")); - free_t_test(&cmd); + msg (SE, _ ("VARIABLES subcommand is not appropriate with PAIRS")); + free_t_test (&cmd); return CMD_FAILURE; } else @@ -314,7 +318,7 @@ cmd_t_test (struct lexer *lexer, struct dataset *ds) const_hsh_insert (hash, pairs[i].v[1]); } - assert(cmd.n_variables == 0); + assert (cmd.n_variables == 0); cmd.n_variables = const_hsh_count (hash); cmd.v_variables = xnrealloc (cmd.v_variables, cmd.n_variables, @@ -324,13 +328,13 @@ cmd_t_test (struct lexer *lexer, struct dataset *ds) v != 0; v = const_hsh_next (hash, &hi) ) cmd.v_variables[i++]=v; - const_hsh_destroy(hash); + const_hsh_destroy (hash); } } else if ( !cmd.sbc_variables) { - msg(SE, _("One or more VARIABLES must be specified.")); - free_t_test(&cmd); + msg (SE, _ ("One or more VARIABLES must be specified.")); + free_t_test (&cmd); return CMD_FAILURE; } @@ -344,7 +348,7 @@ cmd_t_test (struct lexer *lexer, struct dataset *ds) ok = proc_commit (ds) && ok; n_pairs=0; - free(pairs); + free (pairs); pairs=0; if ( mode == T_IND_SAMPLES) @@ -358,12 +362,13 @@ cmd_t_test (struct lexer *lexer, struct dataset *ds) } } - free_t_test(&cmd); + free_t_test (&cmd); return ok ? CMD_SUCCESS : CMD_CASCADING_FAILURE; } static int -tts_custom_groups (struct lexer *lexer, struct dataset *ds, struct cmd_t_test *cmd UNUSED, void *aux UNUSED) +tts_custom_groups (struct lexer *lexer, struct dataset *ds, struct cmd_t_test *cmd UNUSED, + void *aux UNUSED) { int n_group_values=0; @@ -378,7 +383,7 @@ tts_custom_groups (struct lexer *lexer, struct dataset *ds, struct cmd_t_test *c if (var_is_long_string (indep_var)) { - msg (SE, _("Long string variable %s is not valid here."), + msg (SE, _ ("Long string variable %s is not valid here."), var_get_name (indep_var)); return 0; } @@ -398,7 +403,7 @@ tts_custom_groups (struct lexer *lexer, struct dataset *ds, struct cmd_t_test *c } else { - msg (SE, _("When applying GROUPS to a string variable, two " + msg (SE, _ ("When applying GROUPS to a string variable, two " "values must be specified.")); return 0; } @@ -412,7 +417,7 @@ tts_custom_groups (struct lexer *lexer, struct dataset *ds, struct cmd_t_test *c { if (var_is_alpha (indep_var)) { - msg (SE, _("When applying GROUPS to a string variable, two " + msg (SE, _ ("When applying GROUPS to a string variable, two " "values must be specified.")); return 0; } @@ -436,6 +441,15 @@ tts_custom_groups (struct lexer *lexer, struct dataset *ds, struct cmd_t_test *c gp.criterion = CMP_LE ; + if ( var_is_alpha (indep_var)) + { + buf_copy_rpad (gp.v.g_value [0].s, var_get_width (indep_var), + gp.v.g_value [0].s, strlen (gp.v.g_value[0].s)); + + buf_copy_rpad (gp.v.g_value [1].s, var_get_width (indep_var), + gp.v.g_value [1].s, strlen (gp.v.g_value[1].s)); + } + return 1; } @@ -484,10 +498,10 @@ tts_custom_pairs (struct lexer *lexer, struct dataset *ds, struct cmd_t_test *cm if (n_before_WITH != n_after_WITH) { free (vars); - msg (SE, _("PAIRED was specified but the number of variables " - "preceding WITH (%d) did not match the number " - "following (%d)."), - (int) n_before_WITH, (int) n_after_WITH ); + msg (SE, _ ("PAIRED was specified but the number of variables " + "preceding WITH (%zu) did not match the number " + "following (%zu)."), + n_before_WITH, n_after_WITH); return 0; } n_pairs_local = n_before_WITH; @@ -501,7 +515,7 @@ tts_custom_pairs (struct lexer *lexer, struct dataset *ds, struct cmd_t_test *cm if (n_vars < 2) { free (vars); - msg (SE, _("At least two variables must be specified " + msg (SE, _ ("At least two variables must be specified " "on PAIRS.")); return 0; } @@ -519,7 +533,7 @@ tts_custom_pairs (struct lexer *lexer, struct dataset *ds, struct cmd_t_test *cm { int i; - assert(n_pairs_local == n_vars / 2); + assert (n_pairs_local == n_vars / 2); for (i = 0; i < n_pairs_local; ++i) { pairs[i].v[n_pairs] = vars[i]; @@ -531,9 +545,9 @@ tts_custom_pairs (struct lexer *lexer, struct dataset *ds, struct cmd_t_test *cm int i,j; size_t p = n_pairs; - for(i=0 ; i < n_before_WITH ; ++i ) + for (i=0 ; i < n_before_WITH ; ++i ) { - for(j=0 ; j < n_after_WITH ; ++j) + for (j=0 ; j < n_after_WITH ; ++j) { pairs[p].v[0] = vars[i]; pairs[p].v[1] = vars[j+n_before_WITH]; @@ -546,9 +560,9 @@ tts_custom_pairs (struct lexer *lexer, struct dataset *ds, struct cmd_t_test *cm size_t i,j; size_t p=n_pairs; - for(i=0 ; i < n_vars ; ++i ) + for (i=0 ; i < n_vars ; ++i ) { - for(j=i+1 ; j < n_vars ; ++j) + for (j=i+1 ; j < n_vars ; ++j) { pairs[p].v[0] = vars[i]; pairs[p].v[1] = vars[j]; @@ -566,9 +580,9 @@ tts_custom_pairs (struct lexer *lexer, struct dataset *ds, struct cmd_t_test *cm /* Parses the current token (numeric or string, depending on type) value v and returns success. */ static int -parse_value (struct lexer *lexer, union value * v, enum var_type type) +parse_value (struct lexer *lexer, union value * v, enum val_type type) { - if (type == VAR_NUMERIC) + if (type == VAL_NUMERIC) { if (!lex_force_num (lexer)) return 0; @@ -578,6 +592,7 @@ parse_value (struct lexer *lexer, union value * v, enum var_type type) { if (!lex_force_string (lexer)) return 0; + memset (v->s, ' ', MAX_SHORT_STRING); strncpy (v->s, ds_cstr (lex_tokstr (lexer)), ds_length (lex_tokstr (lexer))); } @@ -589,34 +604,34 @@ parse_value (struct lexer *lexer, union value * v, enum var_type type) /* Implementation of the SSBOX object */ -void ssbox_base_init(struct ssbox *this, int cols,int rows); +void ssbox_base_init (struct ssbox *this, int cols,int rows); -void ssbox_base_finalize(struct ssbox *ssb); +void ssbox_base_finalize (struct ssbox *ssb); -void ssbox_one_sample_init(struct ssbox *this, +void ssbox_one_sample_init (struct ssbox *this, struct cmd_t_test *cmd ); -void ssbox_independent_samples_init(struct ssbox *this, +void ssbox_independent_samples_init (struct ssbox *this, struct cmd_t_test *cmd); -void ssbox_paired_init(struct ssbox *this, +void ssbox_paired_init (struct ssbox *this, struct cmd_t_test *cmd); /* Factory to create an ssbox */ void -ssbox_create(struct ssbox *ssb, struct cmd_t_test *cmd, int mode) +ssbox_create (struct ssbox *ssb, struct cmd_t_test *cmd, int mode) { switch (mode) { case T_1_SAMPLE: - ssbox_one_sample_init(ssb,cmd); + ssbox_one_sample_init (ssb,cmd); break; case T_IND_SAMPLES: - ssbox_independent_samples_init(ssb,cmd); + ssbox_independent_samples_init (ssb,cmd); break; case T_PAIRED: - ssbox_paired_init(ssb,cmd); + ssbox_paired_init (ssb,cmd); break; default: NOT_REACHED (); @@ -627,32 +642,33 @@ ssbox_create(struct ssbox *ssb, struct cmd_t_test *cmd, int mode) /* Despatcher for the populate method */ void -ssbox_populate(struct ssbox *ssb,struct cmd_t_test *cmd) +ssbox_populate (struct ssbox *ssb, const struct dictionary *dict, + struct cmd_t_test *cmd) { - ssb->populate(ssb,cmd); + ssb->populate (ssb, dict, cmd); } /* Despatcher for finalize */ void -ssbox_finalize(struct ssbox *ssb) +ssbox_finalize (struct ssbox *ssb) { - ssb->finalize(ssb); + ssb->finalize (ssb); } /* Submit the box and clear up */ void -ssbox_base_finalize(struct ssbox *ssb) +ssbox_base_finalize (struct ssbox *ssb) { - tab_submit(ssb->t); + tab_submit (ssb->t); } /* Initialize a ssbox struct */ void -ssbox_base_init(struct ssbox *this, int cols,int rows) +ssbox_base_init (struct ssbox *this, int cols,int rows) { this->finalize = ssbox_base_finalize; this->t = tab_create (cols, rows, 0); @@ -660,16 +676,17 @@ ssbox_base_init(struct ssbox *this, int cols,int rows) tab_columns (this->t, SOM_COL_DOWN, 1); tab_headers (this->t,0,0,1,0); tab_box (this->t, TAL_2, TAL_2, TAL_0, TAL_1, 0, 0, cols -1, rows -1 ); - tab_hline(this->t, TAL_2,0,cols-1,1); + tab_hline (this->t, TAL_2,0,cols-1,1); tab_dim (this->t, tab_natural_dimensions); } -void ssbox_one_sample_populate(struct ssbox *ssb, - struct cmd_t_test *cmd); +void ssbox_one_sample_populate (struct ssbox *ssb, + const struct dictionary *, + struct cmd_t_test *cmd); /* Initialize the one_sample ssbox */ void -ssbox_one_sample_init(struct ssbox *this, +ssbox_one_sample_init (struct ssbox *this, struct cmd_t_test *cmd ) { const int hsize=5; @@ -677,21 +694,22 @@ ssbox_one_sample_init(struct ssbox *this, this->populate = ssbox_one_sample_populate; - ssbox_base_init(this, hsize,vsize); - tab_title (this->t, _("One-Sample Statistics")); - tab_vline(this->t, TAL_2, 1,0,vsize - 1); - tab_text (this->t, 1, 0, TAB_CENTER | TAT_TITLE, _("N")); - tab_text (this->t, 2, 0, TAB_CENTER | TAT_TITLE, _("Mean")); - tab_text (this->t, 3, 0, TAB_CENTER | TAT_TITLE, _("Std. Deviation")); - tab_text (this->t, 4, 0, TAB_CENTER | TAT_TITLE, _("SE. Mean")); + ssbox_base_init (this, hsize,vsize); + tab_title (this->t, _ ("One-Sample Statistics")); + tab_vline (this->t, TAL_2, 1,0,vsize - 1); + tab_text (this->t, 1, 0, TAB_CENTER | TAT_TITLE, _ ("N")); + tab_text (this->t, 2, 0, TAB_CENTER | TAT_TITLE, _ ("Mean")); + tab_text (this->t, 3, 0, TAB_CENTER | TAT_TITLE, _ ("Std. Deviation")); + tab_text (this->t, 4, 0, TAB_CENTER | TAT_TITLE, _ ("SE. Mean")); } -void ssbox_independent_samples_populate(struct ssbox *ssb, - struct cmd_t_test *cmd); +static void ssbox_independent_samples_populate (struct ssbox *ssb, + const struct dictionary *, + struct cmd_t_test *cmd); /* Initialize the independent samples ssbox */ void -ssbox_independent_samples_init(struct ssbox *this, +ssbox_independent_samples_init (struct ssbox *this, struct cmd_t_test *cmd) { int hsize=6; @@ -699,45 +717,55 @@ ssbox_independent_samples_init(struct ssbox *this, this->populate = ssbox_independent_samples_populate; - ssbox_base_init(this, hsize,vsize); + ssbox_base_init (this, hsize,vsize); tab_vline (this->t, TAL_GAP, 1, 0,vsize - 1); - tab_title (this->t, _("Group Statistics")); + tab_title (this->t, _ ("Group Statistics")); tab_text (this->t, 1, 0, TAB_CENTER | TAT_TITLE, var_get_name (indep_var)); - tab_text (this->t, 2, 0, TAB_CENTER | TAT_TITLE, _("N")); - tab_text (this->t, 3, 0, TAB_CENTER | TAT_TITLE, _("Mean")); - tab_text (this->t, 4, 0, TAB_CENTER | TAT_TITLE, _("Std. Deviation")); - tab_text (this->t, 5, 0, TAB_CENTER | TAT_TITLE, _("SE. Mean")); + tab_text (this->t, 2, 0, TAB_CENTER | TAT_TITLE, _ ("N")); + tab_text (this->t, 3, 0, TAB_CENTER | TAT_TITLE, _ ("Mean")); + tab_text (this->t, 4, 0, TAB_CENTER | TAT_TITLE, _ ("Std. Deviation")); + tab_text (this->t, 5, 0, TAB_CENTER | TAT_TITLE, _ ("SE. Mean")); } /* Populate the ssbox for independent samples */ -void -ssbox_independent_samples_populate(struct ssbox *ssb, - struct cmd_t_test *cmd) +static void +ssbox_independent_samples_populate (struct ssbox *ssb, + const struct dictionary *dict, + struct cmd_t_test *cmd) { int i; - const char *val_lab0; - const char *val_lab1; + const struct variable *wv = dict_get_weight (dict); + const struct fmt_spec *wfmt = wv ? var_get_print_format (wv) : &F_8_0; + + char *val_lab[2] = {NULL, NULL}; double indep_value[2]; char prefix[2][3]={"",""}; if ( var_is_numeric (indep_var) ) { - val_lab0 = var_lookup_value_label (indep_var, &gp.v.g_value[0]); - val_lab1 = var_lookup_value_label (indep_var, &gp.v.g_value[1]); + const char *s; + + s = var_lookup_value_label (indep_var, &gp.v.g_value[0]); + val_lab[0] = s ? strdup (s) : NULL; + + s = var_lookup_value_label (indep_var, &gp.v.g_value[1]); + val_lab[1] = s ? strdup (s) : NULL; } else { - val_lab0 = gp.v.g_value[0].s; - val_lab1 = gp.v.g_value[1].s; + val_lab[0] = calloc (sizeof (char), MAX_SHORT_STRING + 1); + val_lab[1] = calloc (sizeof (char), MAX_SHORT_STRING + 1); + memcpy (val_lab[0], gp.v.g_value[0].s, MAX_SHORT_STRING); + memcpy (val_lab[1], gp.v.g_value[1].s, MAX_SHORT_STRING); } if (gp.criterion == CMP_LE ) { - strcpy(prefix[0],">="); - strcpy(prefix[1],"<"); + strcpy (prefix[0],">="); + strcpy (prefix[1],"<"); indep_value[0] = gp.v.critical_value; indep_value[1] = gp.v.critical_value; } @@ -747,7 +775,7 @@ ssbox_independent_samples_populate(struct ssbox *ssb, indep_value[1] = gp.v.g_value[1].f; } - assert(ssb->t); + assert (ssb->t); for (i=0; i < cmd->n_variables; ++i) { @@ -758,17 +786,17 @@ ssbox_independent_samples_populate(struct ssbox *ssb, tab_text (ssb->t, 0, i*2+1, TAB_LEFT, var_get_name (cmd->v_variables[i])); - if (val_lab0) + if (val_lab[0]) tab_text (ssb->t, 1, i*2+1, TAB_LEFT | TAT_PRINTF, - "%s%s", prefix[0], val_lab0); + "%s%s", prefix[0], val_lab[0]); else tab_text (ssb->t, 1, i*2+1, TAB_LEFT | TAT_PRINTF, "%s%g", prefix[0], indep_value[0]); - if (val_lab1) + if (val_lab[1]) tab_text (ssb->t, 1, i*2+1+1, TAB_LEFT | TAT_PRINTF, - "%s%s", prefix[1], val_lab1); + "%s%s", prefix[1], val_lab[1]); else tab_text (ssb->t, 1, i*2+1+1, TAB_LEFT | TAT_PRINTF, "%s%g", prefix[1], indep_value[1]); @@ -799,24 +827,27 @@ ssbox_independent_samples_populate(struct ssbox *ssb, search_val = gp.v.g_value[count]; } - gs = hsh_find(grp_hash, (void *) &search_val); - assert(gs); + gs = hsh_find (grp_hash, (void *) &search_val); + assert (gs); - tab_float(ssb->t, 2 ,i*2+count+1, TAB_RIGHT, gs->n, 10, 0); - tab_float(ssb->t, 3 ,i*2+count+1, TAB_RIGHT, gs->mean, 8, 2); - tab_float(ssb->t, 4 ,i*2+count+1, TAB_RIGHT, gs->std_dev, 8, 3); - tab_float(ssb->t, 5 ,i*2+count+1, TAB_RIGHT, gs->se_mean, 8, 3); + tab_double (ssb->t, 2, i*2+count+1, TAB_RIGHT, gs->n, wfmt); + tab_double (ssb->t, 3, i*2+count+1, TAB_RIGHT, gs->mean, NULL); + tab_double (ssb->t, 4, i*2+count+1, TAB_RIGHT, gs->std_dev, NULL); + tab_double (ssb->t, 5, i*2+count+1, TAB_RIGHT, gs->se_mean, NULL); } } + free (val_lab[0]); + free (val_lab[1]); } -void ssbox_paired_populate(struct ssbox *ssb, - struct cmd_t_test *cmd); +static void ssbox_paired_populate (struct ssbox *ssb, + const struct dictionary *dict, + struct cmd_t_test *cmd); /* Initialize the paired values ssbox */ void -ssbox_paired_init(struct ssbox *this, struct cmd_t_test *cmd UNUSED) +ssbox_paired_init (struct ssbox *this, struct cmd_t_test *cmd UNUSED) { int hsize=6; @@ -824,30 +855,34 @@ ssbox_paired_init(struct ssbox *this, struct cmd_t_test *cmd UNUSED) this->populate = ssbox_paired_populate; - ssbox_base_init(this, hsize,vsize); - tab_title (this->t, _("Paired Sample Statistics")); - tab_vline(this->t,TAL_GAP,1,0,vsize-1); - tab_vline(this->t,TAL_2,2,0,vsize-1); - tab_text (this->t, 2, 0, TAB_CENTER | TAT_TITLE, _("Mean")); - tab_text (this->t, 3, 0, TAB_CENTER | TAT_TITLE, _("N")); - tab_text (this->t, 4, 0, TAB_CENTER | TAT_TITLE, _("Std. Deviation")); - tab_text (this->t, 5, 0, TAB_CENTER | TAT_TITLE, _("SE. Mean")); + ssbox_base_init (this, hsize,vsize); + tab_title (this->t, _ ("Paired Sample Statistics")); + tab_vline (this->t,TAL_GAP,1,0,vsize-1); + tab_vline (this->t,TAL_2,2,0,vsize-1); + tab_text (this->t, 2, 0, TAB_CENTER | TAT_TITLE, _ ("Mean")); + tab_text (this->t, 3, 0, TAB_CENTER | TAT_TITLE, _ ("N")); + tab_text (this->t, 4, 0, TAB_CENTER | TAT_TITLE, _ ("Std. Deviation")); + tab_text (this->t, 5, 0, TAB_CENTER | TAT_TITLE, _ ("SE. Mean")); } /* Populate the ssbox for paired values */ void -ssbox_paired_populate(struct ssbox *ssb,struct cmd_t_test *cmd UNUSED) +ssbox_paired_populate (struct ssbox *ssb, const struct dictionary *dict, + struct cmd_t_test *cmd UNUSED) { int i; - assert(ssb->t); + const struct variable *wv = dict_get_weight (dict); + const struct fmt_spec *wfmt = wv ? var_get_print_format (wv) : &F_8_0; + + assert (ssb->t); for (i=0; i < n_pairs; ++i) { int j; - tab_text (ssb->t, 0, i*2+1, TAB_LEFT | TAT_PRINTF , _("Pair %d"),i); + tab_text (ssb->t, 0, i*2+1, TAB_LEFT | TAT_PRINTF , _ ("Pair %d"),i); for (j=0 ; j < 2 ; ++j) { @@ -861,10 +896,11 @@ ssbox_paired_populate(struct ssbox *ssb,struct cmd_t_test *cmd UNUSED) var_get_name (pairs[i].v[j])); /* Values */ - tab_float (ssb->t,2, i*2+j+1, TAB_RIGHT, pairs[i].mean[j], 8, 2); - tab_float (ssb->t,3, i*2+j+1, TAB_RIGHT, pairs[i].n, 10, 0); - tab_float (ssb->t,4, i*2+j+1, TAB_RIGHT, pairs[i].std_dev[j], 8, 3); - tab_float (ssb->t,5, i*2+j+1, TAB_RIGHT, pairs[i].std_dev[j]/sqrt(pairs[i].n), 8, 3); + tab_double (ssb->t,2, i*2+j+1, TAB_RIGHT, pairs[i].mean[j], NULL); + tab_double (ssb->t,3, i*2+j+1, TAB_RIGHT, pairs[i].n, wfmt); + tab_double (ssb->t,4, i*2+j+1, TAB_RIGHT, pairs[i].std_dev[j], NULL); + tab_double (ssb->t,5, i*2+j+1, TAB_RIGHT, + pairs[i].std_dev[j]/sqrt (pairs[i].n), NULL); } } @@ -872,67 +908,73 @@ ssbox_paired_populate(struct ssbox *ssb,struct cmd_t_test *cmd UNUSED) /* Populate the one sample ssbox */ void -ssbox_one_sample_populate(struct ssbox *ssb, struct cmd_t_test *cmd) +ssbox_one_sample_populate (struct ssbox *ssb, const struct dictionary *dict, + struct cmd_t_test *cmd) { int i; - assert(ssb->t); + const struct variable *wv = dict_get_weight (dict); + const struct fmt_spec *wfmt = wv ? var_get_print_format (wv) : &F_8_0; + + assert (ssb->t); for (i=0; i < cmd->n_variables; ++i) { struct group_statistics *gs = &group_proc_get (cmd->v_variables[i])->ugs; tab_text (ssb->t, 0, i+1, TAB_LEFT, var_get_name (cmd->v_variables[i])); - tab_float (ssb->t,1, i+1, TAB_RIGHT, gs->n, 10, 0); - tab_float (ssb->t,2, i+1, TAB_RIGHT, gs->mean, 8, 2); - tab_float (ssb->t,3, i+1, TAB_RIGHT, gs->std_dev, 8, 2); - tab_float (ssb->t,4, i+1, TAB_RIGHT, gs->se_mean, 8, 3); + tab_double (ssb->t,1, i+1, TAB_RIGHT, gs->n, wfmt); + tab_double (ssb->t,2, i+1, TAB_RIGHT, gs->mean, NULL); + tab_double (ssb->t,3, i+1, TAB_RIGHT, gs->std_dev, NULL); + tab_double (ssb->t,4, i+1, TAB_RIGHT, gs->se_mean, NULL); } - } /* Implementation of the Test Results box struct */ -void trbox_base_init(struct trbox *self,size_t n_vars, int cols); -void trbox_base_finalize(struct trbox *trb); +void trbox_base_init (struct trbox *self,size_t n_vars, int cols); +void trbox_base_finalize (struct trbox *trb); -void trbox_independent_samples_init(struct trbox *trb, +void trbox_independent_samples_init (struct trbox *trb, struct cmd_t_test *cmd ); -void trbox_independent_samples_populate(struct trbox *trb, - struct cmd_t_test *cmd); +static void trbox_independent_samples_populate (struct trbox *trb, + const struct dictionary *dict, + struct cmd_t_test *cmd); -void trbox_one_sample_init(struct trbox *self, +void trbox_one_sample_init (struct trbox *self, struct cmd_t_test *cmd ); -void trbox_one_sample_populate(struct trbox *trb, - struct cmd_t_test *cmd); +static void trbox_one_sample_populate (struct trbox *trb, + const struct dictionary *, + struct cmd_t_test *cmd); -void trbox_paired_init(struct trbox *self, +void trbox_paired_init (struct trbox *self, struct cmd_t_test *cmd ); -void trbox_paired_populate(struct trbox *trb, - struct cmd_t_test *cmd); +static void trbox_paired_populate (struct trbox *trb, + const struct dictionary *, + struct cmd_t_test *cmd); /* Create a trbox according to mode*/ void -trbox_create(struct trbox *trb, +trbox_create (struct trbox *trb, struct cmd_t_test *cmd, int mode) { switch (mode) { case T_1_SAMPLE: - trbox_one_sample_init(trb,cmd); + trbox_one_sample_init (trb,cmd); break; case T_IND_SAMPLES: - trbox_independent_samples_init(trb,cmd); + trbox_independent_samples_init (trb,cmd); break; case T_PAIRED: - trbox_paired_init(trb,cmd); + trbox_paired_init (trb,cmd); break; default: NOT_REACHED (); @@ -940,67 +982,69 @@ trbox_create(struct trbox *trb, } /* Populate a trbox according to cmd */ -void -trbox_populate(struct trbox *trb, struct cmd_t_test *cmd) +static void +trbox_populate (struct trbox *trb, const struct dictionary *dict, + struct cmd_t_test *cmd) { - trb->populate(trb,cmd); + trb->populate (trb, dict, cmd); } /* Submit and destroy a trbox */ void -trbox_finalize(struct trbox *trb) +trbox_finalize (struct trbox *trb) { - trb->finalize(trb); + trb->finalize (trb); } /* Initialize the independent samples trbox */ void -trbox_independent_samples_init(struct trbox *self, +trbox_independent_samples_init (struct trbox *self, struct cmd_t_test *cmd UNUSED) { const int hsize=11; const int vsize=cmd->n_variables*2+3; - assert(self); + assert (self); self->populate = trbox_independent_samples_populate; - trbox_base_init(self,cmd->n_variables*2,hsize); - tab_title(self->t,_("Independent Samples Test")); - tab_hline(self->t,TAL_1,2,hsize-1,1); - tab_vline(self->t,TAL_2,2,0,vsize-1); - tab_vline(self->t,TAL_1,4,0,vsize-1); - tab_box(self->t,-1,-1,-1,TAL_1, 2,1,hsize-2,vsize-1); - tab_hline(self->t,TAL_1, hsize-2,hsize-1,2); - tab_box(self->t,-1,-1,-1,TAL_1, hsize-2,2,hsize-1,vsize-1); - tab_joint_text(self->t, 2, 0, 3, 0, - TAB_CENTER,_("Levene's Test for Equality of Variances")); - tab_joint_text(self->t, 4,0,hsize-1,0, - TAB_CENTER,_("t-test for Equality of Means")); - - tab_text(self->t,2,2, TAB_CENTER | TAT_TITLE,_("F")); - tab_text(self->t,3,2, TAB_CENTER | TAT_TITLE,_("Sig.")); - tab_text(self->t,4,2, TAB_CENTER | TAT_TITLE,_("t")); - tab_text(self->t,5,2, TAB_CENTER | TAT_TITLE,_("df")); - tab_text(self->t,6,2, TAB_CENTER | TAT_TITLE,_("Sig. (2-tailed)")); - tab_text(self->t,7,2, TAB_CENTER | TAT_TITLE,_("Mean Difference")); - tab_text(self->t,8,2, TAB_CENTER | TAT_TITLE,_("Std. Error Difference")); - tab_text(self->t,9,2, TAB_CENTER | TAT_TITLE,_("Lower")); - tab_text(self->t,10,2, TAB_CENTER | TAT_TITLE,_("Upper")); - - tab_joint_text(self->t, 9, 1, 10, 1, TAB_CENTER | TAT_PRINTF, - _("%g%% Confidence Interval of the Difference"), + trbox_base_init (self,cmd->n_variables*2,hsize); + tab_title (self->t,_ ("Independent Samples Test")); + tab_hline (self->t,TAL_1,2,hsize-1,1); + tab_vline (self->t,TAL_2,2,0,vsize-1); + tab_vline (self->t,TAL_1,4,0,vsize-1); + tab_box (self->t,-1,-1,-1,TAL_1, 2,1,hsize-2,vsize-1); + tab_hline (self->t,TAL_1, hsize-2,hsize-1,2); + tab_box (self->t,-1,-1,-1,TAL_1, hsize-2,2,hsize-1,vsize-1); + tab_joint_text (self->t, 2, 0, 3, 0, + TAB_CENTER,_ ("Levene's Test for Equality of Variances")); + tab_joint_text (self->t, 4,0,hsize-1,0, + TAB_CENTER,_ ("t-test for Equality of Means")); + + tab_text (self->t,2,2, TAB_CENTER | TAT_TITLE,_ ("F")); + tab_text (self->t,3,2, TAB_CENTER | TAT_TITLE,_ ("Sig.")); + tab_text (self->t,4,2, TAB_CENTER | TAT_TITLE,_ ("t")); + tab_text (self->t,5,2, TAB_CENTER | TAT_TITLE,_ ("df")); + tab_text (self->t,6,2, TAB_CENTER | TAT_TITLE,_ ("Sig. (2-tailed)")); + tab_text (self->t,7,2, TAB_CENTER | TAT_TITLE,_ ("Mean Difference")); + tab_text (self->t,8,2, TAB_CENTER | TAT_TITLE,_ ("Std. Error Difference")); + tab_text (self->t,9,2, TAB_CENTER | TAT_TITLE,_ ("Lower")); + tab_text (self->t,10,2, TAB_CENTER | TAT_TITLE,_ ("Upper")); + + tab_joint_text (self->t, 9, 1, 10, 1, TAB_CENTER | TAT_PRINTF, + _ ("%g%% Confidence Interval of the Difference"), cmd->criteria*100.0); } /* Populate the independent samples trbox */ -void -trbox_independent_samples_populate(struct trbox *self, - struct cmd_t_test *cmd ) +static void +trbox_independent_samples_populate (struct trbox *self, + const struct dictionary *dict UNUSED, + struct cmd_t_test *cmd) { int i; - assert(self); + assert (self); for (i=0; i < cmd->n_variables; ++i) { double p,q; @@ -1029,121 +1073,121 @@ trbox_independent_samples_populate(struct trbox *self, else search_val = gp.v.g_value[0]; - gs0 = hsh_find(grp_hash, (void *) &search_val); - assert(gs0); + gs0 = hsh_find (grp_hash, (void *) &search_val); + assert (gs0); if ( gp.criterion == CMP_LE ) search_val.f = gp.v.critical_value + 1.0; else search_val = gp.v.g_value[1]; - gs1 = hsh_find(grp_hash, (void *) &search_val); - assert(gs1); + gs1 = hsh_find (grp_hash, (void *) &search_val); + assert (gs1); tab_text (self->t, 0, i*2+3, TAB_LEFT, var_get_name (cmd->v_variables[i])); - tab_text (self->t, 1, i*2+3, TAB_LEFT, _("Equal variances assumed")); + tab_text (self->t, 1, i*2+3, TAB_LEFT, _ ("Equal variances assumed")); - tab_float(self->t, 2, i*2+3, TAB_CENTER, grp_data->levene, 8,3); + tab_double (self->t, 2, i*2+3, TAB_CENTER, grp_data->levene, NULL); /* Now work out the significance of the Levene test */ df1 = 1; df2 = grp_data->ugs.n - 2; - q = gsl_cdf_fdist_Q(grp_data->levene, df1, df2); + q = gsl_cdf_fdist_Q (grp_data->levene, df1, df2); - tab_float(self->t, 3, i*2+3, TAB_CENTER, q, 8,3 ); + tab_double (self->t, 3, i*2+3, TAB_CENTER, q, NULL); df = gs0->n + gs1->n - 2.0 ; - tab_float (self->t, 5, i*2+3, TAB_RIGHT, df, 10, 0); + tab_double (self->t, 5, i*2+3, TAB_RIGHT, df, NULL); - pooled_variance = ( (gs0->n )*pow2(gs0->s_std_dev) + pooled_variance = ( (gs0->n )*pow2 (gs0->s_std_dev) + - (gs1->n )*pow2(gs1->s_std_dev) + (gs1->n )*pow2 (gs1->s_std_dev) ) / df ; - t = (gs0->mean - gs1->mean) / sqrt(pooled_variance) ; - t /= sqrt((gs0->n + gs1->n)/(gs0->n*gs1->n)); + t = (gs0->mean - gs1->mean) / sqrt (pooled_variance) ; + t /= sqrt ((gs0->n + gs1->n)/ (gs0->n*gs1->n)); - tab_float (self->t, 4, i*2+3, TAB_RIGHT, t, 8, 3); + tab_double (self->t, 4, i*2+3, TAB_RIGHT, t, NULL); - p = gsl_cdf_tdist_P(t, df); - q = gsl_cdf_tdist_Q(t, df); + p = gsl_cdf_tdist_P (t, df); + q = gsl_cdf_tdist_Q (t, df); - tab_float(self->t, 6, i*2+3, TAB_RIGHT, 2.0*(t>0?q:p) , 8, 3); + tab_double (self->t, 6, i*2+3, TAB_RIGHT, 2.0* (t>0?q:p), NULL); mean_diff = gs0->mean - gs1->mean; - tab_float(self->t, 7, i*2+3, TAB_RIGHT, mean_diff, 8, 3); + tab_double (self->t, 7, i*2+3, TAB_RIGHT, mean_diff, NULL); - std_err_diff = sqrt( pow2(gs0->se_mean) + pow2(gs1->se_mean)); - tab_float(self->t, 8, i*2+3, TAB_RIGHT, std_err_diff, 8, 3); + std_err_diff = sqrt ( pow2 (gs0->se_mean) + pow2 (gs1->se_mean)); + tab_double (self->t, 8, i*2+3, TAB_RIGHT, std_err_diff, NULL); /* Now work out the confidence interval */ q = (1 - cmd->criteria)/2.0; /* 2-tailed test */ - t = gsl_cdf_tdist_Qinv(q,df); - tab_float(self->t, 9, i*2+3, TAB_RIGHT, - mean_diff - t * std_err_diff, 8, 3); + t = gsl_cdf_tdist_Qinv (q,df); + tab_double (self->t, 9, i*2+3, TAB_RIGHT, + mean_diff - t * std_err_diff, NULL); - tab_float(self->t, 10, i*2+3, TAB_RIGHT, - mean_diff + t * std_err_diff, 8, 3); + tab_double (self->t, 10, i*2+3, TAB_RIGHT, + mean_diff + t * std_err_diff, NULL); { double se2; /* Now for the \sigma_1 != \sigma_2 case */ tab_text (self->t, 1, i*2+3+1, - TAB_LEFT, _("Equal variances not assumed")); + TAB_LEFT, _ ("Equal variances not assumed")); - se2 = (pow2(gs0->s_std_dev)/(gs0->n -1) ) + - (pow2(gs1->s_std_dev)/(gs1->n -1) ); + se2 = (pow2 (gs0->s_std_dev)/ (gs0->n -1) ) + + (pow2 (gs1->s_std_dev)/ (gs1->n -1) ); - t = mean_diff / sqrt(se2) ; - tab_float (self->t, 4, i*2+3+1, TAB_RIGHT, t, 8, 3); + t = mean_diff / sqrt (se2) ; + tab_double (self->t, 4, i*2+3+1, TAB_RIGHT, t, NULL); - df = pow2(se2) / ( - (pow2(pow2(gs0->s_std_dev)/(gs0->n - 1 )) - /(gs0->n -1 ) + df = pow2 (se2) / ( + (pow2 (pow2 (gs0->s_std_dev)/ (gs0->n - 1 )) + / (gs0->n -1 ) ) + - (pow2(pow2(gs1->s_std_dev)/(gs1->n - 1 )) - /(gs1->n -1 ) + (pow2 (pow2 (gs1->s_std_dev)/ (gs1->n - 1 )) + / (gs1->n -1 ) ) ) ; - tab_float (self->t, 5, i*2+3+1, TAB_RIGHT, df, 8, 3); - p = gsl_cdf_tdist_P(t, df); - q = gsl_cdf_tdist_Q(t, df); + tab_double (self->t, 5, i*2+3+1, TAB_RIGHT, df, NULL); + + p = gsl_cdf_tdist_P (t, df); + q = gsl_cdf_tdist_Q (t, df); - tab_float(self->t, 6, i*2+3+1, TAB_RIGHT, 2.0*(t>0?q:p) , 8, 3); + tab_double (self->t, 6, i*2+3+1, TAB_RIGHT, 2.0* (t>0?q:p), NULL); /* Now work out the confidence interval */ q = (1 - cmd->criteria)/2.0; /* 2-tailed test */ - t = gsl_cdf_tdist_Qinv(q, df); + t = gsl_cdf_tdist_Qinv (q, df); - tab_float(self->t, 7, i*2+3+1, TAB_RIGHT, mean_diff, 8, 3); + tab_double (self->t, 7, i*2+3+1, TAB_RIGHT, mean_diff, NULL); - tab_float(self->t, 8, i*2+3+1, TAB_RIGHT, std_err_diff, 8, 3); + tab_double (self->t, 8, i*2+3+1, TAB_RIGHT, std_err_diff, NULL); - tab_float(self->t, 9, i*2+3+1, TAB_RIGHT, - mean_diff - t * std_err_diff, 8, 3); - - tab_float(self->t, 10, i*2+3+1, TAB_RIGHT, - mean_diff + t * std_err_diff, 8, 3); + tab_double (self->t, 9, i*2+3+1, TAB_RIGHT, + mean_diff - t * std_err_diff, NULL); + tab_double (self->t, 10, i*2+3+1, TAB_RIGHT, + mean_diff + t * std_err_diff, NULL); } } } /* Initialize the paired samples trbox */ void -trbox_paired_init(struct trbox *self, +trbox_paired_init (struct trbox *self, struct cmd_t_test *cmd UNUSED) { @@ -1152,37 +1196,41 @@ trbox_paired_init(struct trbox *self, self->populate = trbox_paired_populate; - trbox_base_init(self,n_pairs,hsize); - tab_title (self->t, _("Paired Samples Test")); - tab_hline(self->t,TAL_1,2,6,1); - tab_vline(self->t,TAL_2,2,0,vsize - 1); - tab_joint_text(self->t,2,0,6,0,TAB_CENTER,_("Paired Differences")); - tab_box(self->t,-1,-1,-1,TAL_1, 2,1,6,vsize-1); - tab_box(self->t,-1,-1,-1,TAL_1, 6,0,hsize-1,vsize-1); - tab_hline(self->t,TAL_1,5,6, 2); - tab_vline(self->t,TAL_GAP,6,0,1); - - tab_joint_text(self->t, 5, 1, 6, 1, TAB_CENTER | TAT_PRINTF, - _("%g%% Confidence Interval of the Difference"), + trbox_base_init (self,n_pairs,hsize); + tab_title (self->t, _ ("Paired Samples Test")); + tab_hline (self->t,TAL_1,2,6,1); + tab_vline (self->t,TAL_2,2,0,vsize - 1); + tab_joint_text (self->t,2,0,6,0,TAB_CENTER,_ ("Paired Differences")); + tab_box (self->t,-1,-1,-1,TAL_1, 2,1,6,vsize-1); + tab_box (self->t,-1,-1,-1,TAL_1, 6,0,hsize-1,vsize-1); + tab_hline (self->t,TAL_1,5,6, 2); + tab_vline (self->t,TAL_GAP,6,0,1); + + tab_joint_text (self->t, 5, 1, 6, 1, TAB_CENTER | TAT_PRINTF, + _ ("%g%% Confidence Interval of the Difference"), cmd->criteria*100.0); - tab_text (self->t, 2, 2, TAB_CENTER | TAT_TITLE, _("Mean")); - tab_text (self->t, 3, 2, TAB_CENTER | TAT_TITLE, _("Std. Deviation")); - tab_text (self->t, 4, 2, TAB_CENTER | TAT_TITLE, _("Std. Error Mean")); - tab_text (self->t, 5, 2, TAB_CENTER | TAT_TITLE, _("Lower")); - tab_text (self->t, 6, 2, TAB_CENTER | TAT_TITLE, _("Upper")); - tab_text (self->t, 7, 2, TAB_CENTER | TAT_TITLE, _("t")); - tab_text (self->t, 8, 2, TAB_CENTER | TAT_TITLE, _("df")); - tab_text (self->t, 9, 2, TAB_CENTER | TAT_TITLE, _("Sig. (2-tailed)")); + tab_text (self->t, 2, 2, TAB_CENTER | TAT_TITLE, _ ("Mean")); + tab_text (self->t, 3, 2, TAB_CENTER | TAT_TITLE, _ ("Std. Deviation")); + tab_text (self->t, 4, 2, TAB_CENTER | TAT_TITLE, _ ("Std. Error Mean")); + tab_text (self->t, 5, 2, TAB_CENTER | TAT_TITLE, _ ("Lower")); + tab_text (self->t, 6, 2, TAB_CENTER | TAT_TITLE, _ ("Upper")); + tab_text (self->t, 7, 2, TAB_CENTER | TAT_TITLE, _ ("t")); + tab_text (self->t, 8, 2, TAB_CENTER | TAT_TITLE, _ ("df")); + tab_text (self->t, 9, 2, TAB_CENTER | TAT_TITLE, _ ("Sig. (2-tailed)")); } /* Populate the paired samples trbox */ -void -trbox_paired_populate(struct trbox *trb, - struct cmd_t_test *cmd UNUSED) +static void +trbox_paired_populate (struct trbox *trb, + const struct dictionary *dict, + struct cmd_t_test *cmd UNUSED) { int i; + const struct variable *wv = dict_get_weight (dict); + const struct fmt_spec *wfmt = wv ? var_get_print_format (wv) : &F_8_0; + for (i=0; i < n_pairs; ++i) { double p,q; @@ -1192,30 +1240,30 @@ trbox_paired_populate(struct trbox *trb, double t; double df = n - 1; - tab_text (trb->t, 0, i+3, TAB_LEFT | TAT_PRINTF, _("Pair %d"),i); + tab_text (trb->t, 0, i+3, TAB_LEFT | TAT_PRINTF, _ ("Pair %d"),i); tab_text (trb->t, 1, i+3, TAB_LEFT | TAT_PRINTF, "%s - %s", var_get_name (pairs[i].v[0]), var_get_name (pairs[i].v[1])); - tab_float(trb->t, 2, i+3, TAB_RIGHT, pairs[i].mean_diff, 8, 4); + tab_double (trb->t, 2, i+3, TAB_RIGHT, pairs[i].mean_diff, NULL); - tab_float(trb->t, 3, i+3, TAB_RIGHT, pairs[i].std_dev_diff, 8, 5); + tab_double (trb->t, 3, i+3, TAB_RIGHT, pairs[i].std_dev_diff, NULL); /* SE Mean */ - se_mean = pairs[i].std_dev_diff / sqrt(n) ; - tab_float(trb->t, 4, i+3, TAB_RIGHT, se_mean, 8,5 ); + se_mean = pairs[i].std_dev_diff / sqrt (n) ; + tab_double (trb->t, 4, i+3, TAB_RIGHT, se_mean, NULL); /* Now work out the confidence interval */ q = (1 - cmd->criteria)/2.0; /* 2-tailed test */ - t = gsl_cdf_tdist_Qinv(q, df); + t = gsl_cdf_tdist_Qinv (q, df); - tab_float(trb->t, 5, i+3, TAB_RIGHT, - pairs[i].mean_diff - t * se_mean , 8, 4); + tab_double (trb->t, 5, i+3, TAB_RIGHT, + pairs[i].mean_diff - t * se_mean , NULL); - tab_float(trb->t, 6, i+3, TAB_RIGHT, - pairs[i].mean_diff + t * se_mean , 8, 4); + tab_double (trb->t, 6, i+3, TAB_RIGHT, + pairs[i].mean_diff + t * se_mean , NULL); t = (pairs[i].mean[0] - pairs[i].mean[1]) / sqrt ( @@ -1225,62 +1273,67 @@ trbox_paired_populate(struct trbox *trb, / (n - 1) ); - tab_float(trb->t, 7, i+3, TAB_RIGHT, t , 8,3 ); + tab_double (trb->t, 7, i+3, TAB_RIGHT, t, NULL); /* Degrees of freedom */ - tab_float(trb->t, 8, i+3, TAB_RIGHT, df , 10, 0 ); + tab_double (trb->t, 8, i+3, TAB_RIGHT, df, wfmt); - p = gsl_cdf_tdist_P(t,df); - q = gsl_cdf_tdist_P(t,df); + p = gsl_cdf_tdist_P (t,df); + q = gsl_cdf_tdist_Q (t,df); - tab_float(trb->t, 9, i+3, TAB_RIGHT, 2.0*(t>0?q:p) , 8, 3); + tab_double (trb->t, 9, i+3, TAB_RIGHT, 2.0* (t>0?q:p), NULL); } } /* Initialize the one sample trbox */ void -trbox_one_sample_init(struct trbox *self, struct cmd_t_test *cmd ) +trbox_one_sample_init (struct trbox *self, struct cmd_t_test *cmd ) { const int hsize=7; const int vsize=cmd->n_variables+3; self->populate = trbox_one_sample_populate; - trbox_base_init(self, cmd->n_variables,hsize); - tab_title (self->t, _("One-Sample Test")); - tab_hline(self->t, TAL_1, 1, hsize - 1, 1); - tab_vline(self->t, TAL_2, 1, 0, vsize - 1); + trbox_base_init (self, cmd->n_variables,hsize); + tab_title (self->t, _ ("One-Sample Test")); + tab_hline (self->t, TAL_1, 1, hsize - 1, 1); + tab_vline (self->t, TAL_2, 1, 0, vsize - 1); - tab_joint_text(self->t, 1, 0, hsize-1,0, TAB_CENTER | TAT_PRINTF, - _("Test Value = %f"), cmd->n_testval[0]); + tab_joint_text (self->t, 1, 0, hsize-1,0, TAB_CENTER | TAT_PRINTF, + _ ("Test Value = %f"), cmd->n_testval[0]); - tab_box(self->t, -1, -1, -1, TAL_1, 1,1,hsize-1,vsize-1); + tab_box (self->t, -1, -1, -1, TAL_1, 1,1,hsize-1,vsize-1); - tab_joint_text(self->t,5,1,6,1,TAB_CENTER | TAT_PRINTF, - _("%g%% Confidence Interval of the Difference"), + tab_joint_text (self->t,5,1,6,1,TAB_CENTER | TAT_PRINTF, + _ ("%g%% Confidence Interval of the Difference"), cmd->criteria*100.0); - tab_vline(self->t,TAL_GAP,6,1,1); - tab_hline(self->t,TAL_1,5,6,2); - tab_text (self->t, 1, 2, TAB_CENTER | TAT_TITLE, _("t")); - tab_text (self->t, 2, 2, TAB_CENTER | TAT_TITLE, _("df")); - tab_text (self->t, 3, 2, TAB_CENTER | TAT_TITLE, _("Sig. (2-tailed)")); - tab_text (self->t, 4, 2, TAB_CENTER | TAT_TITLE, _("Mean Difference")); - tab_text (self->t, 5, 2, TAB_CENTER | TAT_TITLE, _("Lower")); - tab_text (self->t, 6, 2, TAB_CENTER | TAT_TITLE, _("Upper")); + tab_vline (self->t,TAL_GAP,6,1,1); + tab_hline (self->t,TAL_1,5,6,2); + tab_text (self->t, 1, 2, TAB_CENTER | TAT_TITLE, _ ("t")); + tab_text (self->t, 2, 2, TAB_CENTER | TAT_TITLE, _ ("df")); + tab_text (self->t, 3, 2, TAB_CENTER | TAT_TITLE, _ ("Sig. (2-tailed)")); + tab_text (self->t, 4, 2, TAB_CENTER | TAT_TITLE, _ ("Mean Difference")); + tab_text (self->t, 5, 2, TAB_CENTER | TAT_TITLE, _ ("Lower")); + tab_text (self->t, 6, 2, TAB_CENTER | TAT_TITLE, _ ("Upper")); } /* Populate the one sample trbox */ -void -trbox_one_sample_populate(struct trbox *trb, struct cmd_t_test *cmd) +static void +trbox_one_sample_populate (struct trbox *trb, + const struct dictionary *dict, + struct cmd_t_test *cmd) { int i; - assert(trb->t); + const struct variable *wv = dict_get_weight (dict); + const struct fmt_spec *wfmt = wv ? var_get_print_format (wv) : &F_8_0; + + assert (trb->t); for (i=0; i < cmd->n_variables; ++i) { @@ -1292,39 +1345,39 @@ trbox_one_sample_populate(struct trbox *trb, struct cmd_t_test *cmd) tab_text (trb->t, 0, i+3, TAB_LEFT, var_get_name (cmd->v_variables[i])); - t = (gs->mean - cmd->n_testval[0] ) * sqrt(gs->n) / gs->std_dev ; + t = (gs->mean - cmd->n_testval[0] ) * sqrt (gs->n) / gs->std_dev ; - tab_float (trb->t, 1, i+3, TAB_RIGHT, t, 8,3); + tab_double (trb->t, 1, i+3, TAB_RIGHT, t, NULL); /* degrees of freedom */ df = gs->n - 1; - tab_float (trb->t, 2, i+3, TAB_RIGHT, df, 8,0); + tab_double (trb->t, 2, i+3, TAB_RIGHT, df, wfmt); - p = gsl_cdf_tdist_P(t, df); - q = gsl_cdf_tdist_Q(t, df); + p = gsl_cdf_tdist_P (t, df); + q = gsl_cdf_tdist_Q (t, df); /* Multiply by 2 to get 2-tailed significance, makeing sure we've got the correct tail*/ - tab_float (trb->t, 3, i+3, TAB_RIGHT, 2.0*(t>0?q:p), 8,3); + tab_double (trb->t, 3, i+3, TAB_RIGHT, 2.0* (t>0?q:p), NULL); - tab_float (trb->t, 4, i+3, TAB_RIGHT, gs->mean_diff, 8,3); + tab_double (trb->t, 4, i+3, TAB_RIGHT, gs->mean_diff, NULL); q = (1 - cmd->criteria)/2.0; /* 2-tailed test */ - t = gsl_cdf_tdist_Qinv(q, df); + t = gsl_cdf_tdist_Qinv (q, df); - tab_float (trb->t, 5, i+3, TAB_RIGHT, - gs->mean_diff - t * gs->se_mean, 8,4); + tab_double (trb->t, 5, i+3, TAB_RIGHT, + gs->mean_diff - t * gs->se_mean, NULL); - tab_float (trb->t, 6, i+3, TAB_RIGHT, - gs->mean_diff + t * gs->se_mean, 8,4); + tab_double (trb->t, 6, i+3, TAB_RIGHT, + gs->mean_diff + t * gs->se_mean, NULL); } } /* Base initializer for the generalized trbox */ void -trbox_base_init(struct trbox *self, size_t data_rows, int cols) +trbox_base_init (struct trbox *self, size_t data_rows, int cols) { const size_t rows = 3 + data_rows; @@ -1332,25 +1385,28 @@ trbox_base_init(struct trbox *self, size_t data_rows, int cols) self->t = tab_create (cols, rows, 0); tab_headers (self->t,0,0,3,0); tab_box (self->t, TAL_2, TAL_2, TAL_0, TAL_0, 0, 0, cols -1, rows -1); - tab_hline(self->t, TAL_2,0,cols-1,3); + tab_hline (self->t, TAL_2,0,cols-1,3); tab_dim (self->t, tab_natural_dimensions); } /* Base finalizer for the trbox */ void -trbox_base_finalize(struct trbox *trb) +trbox_base_finalize (struct trbox *trb) { - tab_submit(trb->t); + tab_submit (trb->t); } /* Create , populate and submit the Paired Samples Correlation box */ -void -pscbox(void) +static void +pscbox (const struct dictionary *dict) { - const int rows=1+n_pairs; - const int cols=5; + const struct variable *wv = dict_get_weight (dict); + const struct fmt_spec *wfmt = wv ? var_get_print_format (wv) : &F_8_0; + + const int rows = 1 + n_pairs; + const int cols = 5; int i; struct tab_table *table; @@ -1360,15 +1416,15 @@ pscbox(void) tab_columns (table, SOM_COL_DOWN, 1); tab_headers (table,0,0,1,0); tab_box (table, TAL_2, TAL_2, TAL_0, TAL_1, 0, 0, cols -1, rows -1 ); - tab_hline(table, TAL_2, 0, cols - 1, 1); - tab_vline(table, TAL_2, 2, 0, rows - 1); - tab_dim(table, tab_natural_dimensions); - tab_title(table, _("Paired Samples Correlations")); + tab_hline (table, TAL_2, 0, cols - 1, 1); + tab_vline (table, TAL_2, 2, 0, rows - 1); + tab_dim (table, tab_natural_dimensions); + tab_title (table, _ ("Paired Samples Correlations")); /* column headings */ - tab_text(table, 2,0, TAB_CENTER | TAT_TITLE, _("N")); - tab_text(table, 3,0, TAB_CENTER | TAT_TITLE, _("Correlation")); - tab_text(table, 4,0, TAB_CENTER | TAT_TITLE, _("Sig.")); + tab_text (table, 2,0, TAB_CENTER | TAT_TITLE, _ ("N")); + tab_text (table, 3,0, TAB_CENTER | TAT_TITLE, _ ("Correlation")); + tab_text (table, 4,0, TAB_CENTER | TAT_TITLE, _ ("Sig.")); for (i=0; i < n_pairs; ++i) { @@ -1377,31 +1433,31 @@ pscbox(void) double df = pairs[i].n -2; double correlation_t = - pairs[i].correlation * sqrt(df) / - sqrt(1 - pow2(pairs[i].correlation)); + pairs[i].correlation * sqrt (df) / + sqrt (1 - pow2 (pairs[i].correlation)); /* row headings */ - tab_text(table, 0,i+1, TAB_LEFT | TAT_TITLE | TAT_PRINTF, - _("Pair %d"), i); + tab_text (table, 0,i+1, TAB_LEFT | TAT_TITLE | TAT_PRINTF, + _ ("Pair %d"), i); - tab_text(table, 1,i+1, TAB_LEFT | TAT_TITLE | TAT_PRINTF, - _("%s & %s"), + tab_text (table, 1,i+1, TAB_LEFT | TAT_TITLE | TAT_PRINTF, + _ ("%s & %s"), var_get_name (pairs[i].v[0]), var_get_name (pairs[i].v[1])); /* row data */ - tab_float(table, 2, i+1, TAB_RIGHT, pairs[i].n, 4, 0); - tab_float(table, 3, i+1, TAB_RIGHT, pairs[i].correlation, 8, 3); + tab_double (table, 2, i+1, TAB_RIGHT, pairs[i].n, wfmt); + tab_double (table, 3, i+1, TAB_RIGHT, pairs[i].correlation, NULL); - p = gsl_cdf_tdist_P(correlation_t, df); - q = gsl_cdf_tdist_Q(correlation_t, df); + p = gsl_cdf_tdist_P (correlation_t, df); + q = gsl_cdf_tdist_Q (correlation_t, df); - tab_float(table, 4, i+1, TAB_RIGHT, 2.0*(correlation_t>0?q:p), 8, 3); + tab_double (table, 4, i+1, TAB_RIGHT, 2.0* (correlation_t>0?q:p), NULL); } - tab_submit(table); + tab_submit (table); } @@ -1429,7 +1485,7 @@ common_calc (const struct dictionary *dict, return 0; } - for(i = 0; i < cmd->n_variables ; ++i) + for (i = 0; i < cmd->n_variables ; ++i) { const struct variable *v = cmd->v_variables[i]; const union value *val = case_data (c, v); @@ -1453,7 +1509,7 @@ common_precalc ( struct cmd_t_test *cmd ) { int i=0; - for(i=0; i< cmd->n_variables ; ++i) + for (i=0; i< cmd->n_variables ; ++i) { struct group_statistics *gs; gs= &group_proc_get (cmd->v_variables[i])->ugs; @@ -1471,22 +1527,22 @@ common_postcalc (struct cmd_t_test *cmd) { int i=0; - for(i=0; i< cmd->n_variables ; ++i) + for (i=0; i< cmd->n_variables ; ++i) { struct group_statistics *gs; gs= &group_proc_get (cmd->v_variables[i])->ugs; gs->mean=gs->sum / gs->n; - gs->s_std_dev= sqrt( + gs->s_std_dev= sqrt ( ( (gs->ssq / gs->n ) - gs->mean * gs->mean ) ) ; - gs->std_dev= sqrt( - gs->n/(gs->n-1) * + gs->std_dev= sqrt ( + gs->n/ (gs->n-1) * ( (gs->ssq / gs->n ) - gs->mean * gs->mean ) ) ; - gs->se_mean = gs->std_dev / sqrt(gs->n); + gs->se_mean = gs->std_dev / sqrt (gs->n); gs->mean_diff= gs->sum_diff / gs->n; } } @@ -1504,7 +1560,7 @@ one_sample_calc (const struct dictionary *dict, double weight = dict_get_case_weight (dict, c, NULL); - for(i=0; i< cmd->n_variables ; ++i) + for (i=0; i< cmd->n_variables ; ++i) { struct group_statistics *gs; const struct variable *v = cmd->v_variables[i]; @@ -1525,7 +1581,7 @@ one_sample_precalc ( struct cmd_t_test *cmd ) { int i=0; - for(i=0; i< cmd->n_variables ; ++i) + for (i=0; i< cmd->n_variables ; ++i) { struct group_statistics *gs; gs= &group_proc_get (cmd->v_variables[i])->ugs; @@ -1540,7 +1596,7 @@ one_sample_postcalc (struct cmd_t_test *cmd) { int i=0; - for(i=0; i< cmd->n_variables ; ++i) + for (i=0; i< cmd->n_variables ; ++i) { struct group_statistics *gs; gs= &group_proc_get (cmd->v_variables[i])->ugs; @@ -1556,7 +1612,7 @@ paired_precalc (struct cmd_t_test *cmd UNUSED) { int i; - for(i=0; i < n_pairs ; ++i ) + for (i=0; i < n_pairs ; ++i ) { pairs[i].n = 0; pairs[i].sum[0] = 0; pairs[i].sum[1] = 0; @@ -1578,7 +1634,7 @@ paired_calc (const struct dictionary *dict, const struct ccase *c, double weight = dict_get_case_weight (dict, c, NULL); - for(i=0; i < n_pairs ; ++i ) + for (i=0; i < n_pairs ; ++i ) { const struct variable *v0 = pairs[i].v[0]; const struct variable *v1 = pairs[i].v[1]; @@ -1593,13 +1649,13 @@ paired_calc (const struct dictionary *dict, const struct ccase *c, pairs[i].sum[0] += weight * val0->f; pairs[i].sum[1] += weight * val1->f; - pairs[i].ssq[0] += weight * pow2(val0->f); - pairs[i].ssq[1] += weight * pow2(val1->f); + pairs[i].ssq[0] += weight * pow2 (val0->f); + pairs[i].ssq[1] += weight * pow2 (val1->f); pairs[i].sum_of_prod += weight * val0->f * val1->f ; pairs[i].sum_of_diffs += weight * ( val0->f - val1->f ) ; - pairs[i].ssq_diffs += weight * pow2(val0->f - val1->f); + pairs[i].ssq_diffs += weight * pow2 (val0->f - val1->f); } } @@ -1611,7 +1667,7 @@ paired_postcalc (struct cmd_t_test *cmd UNUSED) { int i; - for(i=0; i < n_pairs ; ++i ) + for (i=0; i < n_pairs ; ++i ) { int j; const double n = pairs[i].n; @@ -1619,12 +1675,12 @@ paired_postcalc (struct cmd_t_test *cmd UNUSED) for (j=0; j < 2 ; ++j) { pairs[i].mean[j] = pairs[i].sum[j] / n ; - pairs[i].s_std_dev[j] = sqrt((pairs[i].ssq[j] / n - - pow2(pairs[i].mean[j])) + pairs[i].s_std_dev[j] = sqrt ((pairs[i].ssq[j] / n - + pow2 (pairs[i].mean[j])) ); - pairs[i].std_dev[j] = sqrt(n/(n-1)*(pairs[i].ssq[j] / n - - pow2(pairs[i].mean[j])) + pairs[i].std_dev[j] = sqrt (n/ (n-1)* (pairs[i].ssq[j] / n - + pow2 (pairs[i].mean[j])) ); } @@ -1640,7 +1696,7 @@ paired_postcalc (struct cmd_t_test *cmd UNUSED) pairs[i].std_dev_diff = sqrt ( n / (n - 1) * ( ( pairs[i].ssq_diffs / n ) - - pow2(pairs[i].mean_diff ) + pow2 (pairs[i].mean_diff ) ) ); } } @@ -1651,7 +1707,7 @@ group_precalc (struct cmd_t_test *cmd ) int i; int j; - for(i=0; i< cmd->n_variables ; ++i) + for (i=0; i< cmd->n_variables ; ++i) { struct group_proc *ttpr = group_proc_get (cmd->v_variables[i]); @@ -1660,7 +1716,7 @@ group_precalc (struct cmd_t_test *cmd ) gp.indep_width = var_get_width (indep_var); - ttpr->group_hash = hsh_create(2, + ttpr->group_hash = hsh_create (2, (hsh_compare_func *) compare_group_binary, (hsh_hash_func *) hash_group_binary, (hsh_free_func *) free_group, @@ -1668,7 +1724,6 @@ group_precalc (struct cmd_t_test *cmd ) for (j=0 ; j < 2 ; ++j) { - struct group_statistics *gs = xmalloc (sizeof *gs); gs->sum = 0; @@ -1709,14 +1764,14 @@ group_calc (const struct dictionary *dict, gv = case_data (c, indep_var); - for(i=0; i< cmd->n_variables ; ++i) + for (i=0; i< cmd->n_variables ; ++i) { const struct variable *var = cmd->v_variables[i]; const union value *val = case_data (c, var); struct hsh_table *grp_hash = group_proc_get (var)->group_hash; struct group_statistics *gs; - gs = hsh_find(grp_hash, (void *) gv); + gs = hsh_find (grp_hash, (void *) gv); /* If the independent variable doesn't match either of the values for this case then move on to the next case */ @@ -1727,7 +1782,7 @@ group_calc (const struct dictionary *dict, { gs->n += weight; gs->sum += weight * val->f; - gs->ssq += weight * pow2(val->f); + gs->ssq += weight * pow2 (val->f); } } @@ -1750,30 +1805,30 @@ group_postcalc ( struct cmd_t_test *cmd ) for (gs = hsh_first (grp_hash,&g); gs != 0; - gs = hsh_next(grp_hash,&g)) + gs = hsh_next (grp_hash,&g)) { gs->mean = gs->sum / gs->n; - gs->s_std_dev= sqrt( + gs->s_std_dev= sqrt ( ( (gs->ssq / gs->n ) - gs->mean * gs->mean ) ) ; - gs->std_dev= sqrt( - gs->n/(gs->n-1) * + gs->std_dev= sqrt ( + gs->n/ (gs->n-1) * ( (gs->ssq / gs->n ) - gs->mean * gs->mean ) ) ; - gs->se_mean = gs->std_dev / sqrt(gs->n); + gs->se_mean = gs->std_dev / sqrt (gs->n); count ++; } - assert(count == 2); + assert (count == 2); } } static void -calculate(struct cmd_t_test *cmd, +calculate (struct cmd_t_test *cmd, struct casereader *input, const struct dataset *ds) { const struct dictionary *dict = dataset_dict (ds); @@ -1811,7 +1866,7 @@ calculate(struct cmd_t_test *cmd, casereader_destroy (pass1); common_postcalc (cmd); - switch(mode) + switch (mode) { case T_1_SAMPLE: one_sample_precalc (cmd); @@ -1820,7 +1875,7 @@ calculate(struct cmd_t_test *cmd, one_sample_postcalc (cmd); break; case T_PAIRED: - paired_precalc(cmd); + paired_precalc (cmd); for (; casereader_read (pass2, &c); case_destroy (&c)) paired_calc (dict, &c, cmd, exclude); paired_postcalc (cmd); @@ -1828,10 +1883,10 @@ calculate(struct cmd_t_test *cmd, case T_IND_SAMPLES: pass3 = casereader_clone (pass2); - group_precalc(cmd); - for(; casereader_read (pass2, &c); case_destroy (&c)) + group_precalc (cmd); + for (; casereader_read (pass2, &c); case_destroy (&c)) group_calc (dict, &c, cmd, exclude); - group_postcalc(cmd); + group_postcalc (cmd); levene (dict, pass3, indep_var, cmd->n_variables, cmd->v_variables, exclude); @@ -1841,28 +1896,28 @@ calculate(struct cmd_t_test *cmd, if (!taint_has_tainted_successor (taint)) { - ssbox_create(&stat_summary_box,cmd,mode); - ssbox_populate(&stat_summary_box,cmd); - ssbox_finalize(&stat_summary_box); + ssbox_create (&stat_summary_box,cmd,mode); + ssbox_populate (&stat_summary_box, dict, cmd); + ssbox_finalize (&stat_summary_box); if ( mode == T_PAIRED ) - pscbox(); + pscbox (dict); - trbox_create(&test_results_box,cmd,mode); - trbox_populate(&test_results_box,cmd); - trbox_finalize(&test_results_box); + trbox_create (&test_results_box, cmd, mode); + trbox_populate (&test_results_box, dict, cmd); + trbox_finalize (&test_results_box); } taint_destroy (taint); } -short which_group(const struct group_statistics *g, +short which_group (const struct group_statistics *g, const struct group_properties *p); /* Return -1 if the id of a is less than b; +1 if greater than and 0 if equal */ static int -compare_group_binary(const struct group_statistics *a, +compare_group_binary (const struct group_statistics *a, const struct group_statistics *b, const struct group_properties *p) { @@ -1873,15 +1928,15 @@ compare_group_binary(const struct group_statistics *a, { /* less-than comparision is not meaningfull for alpha variables, so we shouldn't ever arrive here */ - assert(p->indep_width == 0 ) ; + assert (p->indep_width == 0 ) ; flag_a = ( a->id.f < p->v.critical_value ) ; flag_b = ( b->id.f < p->v.critical_value ) ; } else { - flag_a = which_group(a, p); - flag_b = which_group(b, p); + flag_a = which_group (a, p); + flag_b = which_group (b, p); } if (flag_a < flag_b ) @@ -1894,7 +1949,7 @@ compare_group_binary(const struct group_statistics *a, values. It's really a comparison, being used as a hash function */ static unsigned -hash_group_binary(const struct group_statistics *g, +hash_group_binary (const struct group_statistics *g, const struct group_properties *p) { short flag = -1; @@ -1902,12 +1957,12 @@ hash_group_binary(const struct group_statistics *g, if ( p->criterion == CMP_LE ) { /* Not meaningfull to do a less than compare for alpha values ? */ - assert(p->indep_width == 0 ) ; + assert (p->indep_width == 0 ) ; flag = ( g->id.f < p->v.critical_value ) ; } else if ( p->criterion == CMP_EQ) { - flag = which_group(g,p); + flag = which_group (g,p); } else NOT_REACHED (); @@ -1919,10 +1974,9 @@ hash_group_binary(const struct group_statistics *g, 1 if it belongs to group 1, 2 if it belongs to neither group */ short -which_group(const struct group_statistics *g, +which_group (const struct group_statistics *g, const struct group_properties *p) { - if ( 0 == compare_values (&g->id, &p->v.g_value[0], p->indep_width)) return 0;