X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flanguage%2Fstats%2Ft-test.q;h=5f5fc56f021d1ba60d125a8b23561b6dae79031b;hb=7fbfc32fc3c636959b0a25b3e76609f86519e84a;hp=40bf97788b35e157082ebaf37a460f5216946c7c;hpb=da299bd9871b178336a440c6ac53aebc3cea672e;p=pspp diff --git a/src/language/stats/t-test.q b/src/language/stats/t-test.q index 40bf97788b..5f5fc56f02 100644 --- a/src/language/stats/t-test.q +++ b/src/language/stats/t-test.q @@ -1,5 +1,5 @@ /* PSPP - a program for statistical analysis. - Copyright (C) 1997-9, 2000 Free Software Foundation, Inc. + Copyright (C) 1997-9, 2000, 2009 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 @@ -81,8 +81,8 @@ struct group_properties /* The comparison criterion */ enum comparison criterion; - /* The width of the independent variable */ - int indep_width ; + /* The independent variable */ + struct variable *indep_var; union { /* The value of the independent variable at which groups are determined to @@ -1497,7 +1497,7 @@ common_calc (const struct dictionary *dict, gs->n += weight; gs->sum += weight * val->f; - gs->ssq += weight * val->f * val->f; + gs->ssq += weight * pow2 (val->f); } } return 0; @@ -1534,12 +1534,12 @@ common_postcalc (struct cmd_t_test *cmd) gs->mean=gs->sum / gs->n; gs->s_std_dev= sqrt ( - ( (gs->ssq / gs->n ) - gs->mean * gs->mean ) + ( (gs->ssq / gs->n ) - pow2 (gs->mean)) ) ; gs->std_dev= sqrt ( gs->n/ (gs->n-1) * - ( (gs->ssq / gs->n ) - gs->mean * gs->mean ) + ( (gs->ssq / gs->n ) - pow2 (gs->mean)) ) ; gs->se_mean = gs->std_dev / sqrt (gs->n); @@ -1714,7 +1714,7 @@ group_precalc (struct cmd_t_test *cmd ) /* There's always 2 groups for a T - TEST */ ttpr->n_groups = 2; - gp.indep_width = var_get_width (indep_var); + gp.indep_var = indep_var; ttpr->group_hash = hsh_create (2, (hsh_compare_func *) compare_group_binary, @@ -1810,12 +1810,12 @@ group_postcalc ( struct cmd_t_test *cmd ) gs->mean = gs->sum / gs->n; gs->s_std_dev= sqrt ( - ( (gs->ssq / gs->n ) - gs->mean * gs->mean ) + ( (gs->ssq / gs->n ) - pow2 (gs->mean)) ) ; gs->std_dev= sqrt ( gs->n/ (gs->n-1) * - ( (gs->ssq / gs->n ) - gs->mean * gs->mean ) + ( (gs->ssq / gs->n ) - pow2 (gs->mean)) ) ; gs->se_mean = gs->std_dev / sqrt (gs->n); @@ -1837,23 +1837,24 @@ calculate (struct cmd_t_test *cmd, struct casereader *pass1, *pass2, *pass3; struct taint *taint; - struct ccase c; + struct ccase *c; enum mv_class exclude = cmd->miss != TTS_INCLUDE ? MV_ANY : MV_SYSTEM; - if (!casereader_peek (input, 0, &c)) + c = casereader_peek (input, 0); + if (c == NULL) { casereader_destroy (input); return; } - output_split_file_values (ds, &c); - case_destroy (&c); + output_split_file_values (ds, c); + case_unref (c); if ( cmd->miss == TTS_LISTWISE ) input = casereader_create_filter_missing (input, cmd->v_variables, cmd->n_variables, - exclude, NULL); + exclude, NULL, NULL); input = casereader_create_filter_weight (input, dict, NULL, NULL); @@ -1861,8 +1862,8 @@ calculate (struct cmd_t_test *cmd, casereader_split (input, &pass1, &pass2); common_precalc (cmd); - for (; casereader_read (pass1, &c); case_destroy (&c)) - common_calc (dict, &c, cmd, exclude); + for (; (c = casereader_read (pass1)) != NULL; case_unref (c)) + common_calc (dict, c, cmd, exclude); casereader_destroy (pass1); common_postcalc (cmd); @@ -1870,22 +1871,22 @@ calculate (struct cmd_t_test *cmd, { case T_1_SAMPLE: one_sample_precalc (cmd); - for (; casereader_read (pass2, &c); case_destroy (&c)) - one_sample_calc (dict, &c, cmd, exclude); + for (; (c = casereader_read (pass2)) != NULL; case_unref (c)) + one_sample_calc (dict, c, cmd, exclude); one_sample_postcalc (cmd); break; case T_PAIRED: paired_precalc (cmd); - for (; casereader_read (pass2, &c); case_destroy (&c)) - paired_calc (dict, &c, cmd, exclude); + for (; (c = casereader_read (pass2)) != NULL; case_unref (c)) + paired_calc (dict, c, cmd, exclude); paired_postcalc (cmd); break; case T_IND_SAMPLES: pass3 = casereader_clone (pass2); group_precalc (cmd); - for (; casereader_read (pass2, &c); case_destroy (&c)) - group_calc (dict, &c, cmd, exclude); + for (; (c = casereader_read (pass2)) != NULL; case_unref (c)) + group_calc (dict, c, cmd, exclude); group_postcalc (cmd); levene (dict, pass3, indep_var, cmd->n_variables, cmd->v_variables, @@ -1926,10 +1927,6 @@ compare_group_binary (const struct group_statistics *a, if ( p->criterion == CMP_LE ) { - /* less-than comparision is not meaningfull for - alpha variables, so we shouldn't ever arrive here */ - assert (p->indep_width == 0 ) ; - flag_a = ( a->id.f < p->v.critical_value ) ; flag_b = ( b->id.f < p->v.critical_value ) ; } @@ -1956,8 +1953,6 @@ 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 ) ; flag = ( g->id.f < p->v.critical_value ) ; } else if ( p->criterion == CMP_EQ) @@ -1977,10 +1972,10 @@ short 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)) + if ( 0 == compare_values_short (&g->id, &p->v.g_value[0], p->indep_var)) return 0; - if ( 0 == compare_values (&g->id, &p->v.g_value[1], p->indep_width)) + if ( 0 == compare_values_short (&g->id, &p->v.g_value[1], p->indep_var)) return 1; return 2;