X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flanguage%2Fstats%2Fexamine.q;h=b564ba4415991aa1593f828fcdfc197635e6437d;hb=cc57a28ef6796ae9a64ef80d453f72126956d49d;hp=94f3640503e3688bec11fd1605dc4ca960aeab3a;hpb=bb611ecc6f1c33a0a7c691785927c545d18696f6;p=pspp diff --git a/src/language/stats/examine.q b/src/language/stats/examine.q index 94f3640503..b564ba4415 100644 --- a/src/language/stats/examine.q +++ b/src/language/stats/examine.q @@ -1,5 +1,5 @@ /* PSPP - a program for statistical analysis. - Copyright (C) 2004, 2008 Free Software Foundation, Inc. + Copyright (C) 2004, 2008, 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 @@ -34,9 +34,9 @@ #include #include #include -#include #include #include +#include #include #include #include @@ -110,16 +110,16 @@ struct factor_metrics struct statistic *histogram; struct order_stats *np; - /* Tukey_Hingesree quartiles indexing into PTL */ + /* Three quartiles indexing into PTL */ struct percentile **quartiles; /* A reader sorted in ASCENDING order */ struct casereader *up_reader; - /* Tukey_Hingese minimum value of all tukey_hingese weights */ + /* The minimum value of all the weights */ double cmin; - /* Sum of all weights, including tukey_hingesose for missing values */ + /* Sum of all weights, including those for missing values */ double n; double mean; @@ -148,13 +148,13 @@ struct factor_result struct xfactor { - /* We need to make a list of tukey_hingesis structure */ + /* We need to make a list of this structure */ struct ll ll; - /* Tukey_Hingese independent variable */ + /* The independent variable */ const struct variable const* indep_var[2]; - /* A list of results for tukey_hingesis factor */ + /* A list of results for this factor */ struct ll_list result_list ; }; @@ -197,7 +197,7 @@ factor_destroy (struct xfactor *fctr) static struct xfactor level0_factor; static struct ll_list factor_list = LL_INITIALIZER (factor_list); -/* Parse tukey_hingese clause specifying tukey_hingese factors */ +/* Parse the clause specifying the factors */ static int examine_parse_independent_vars (struct lexer *lexer, const struct dictionary *dict, struct cmd_examine *cmd); @@ -243,7 +243,7 @@ static void factor_to_string (const struct xfactor *fctr, /* Represent a factor as a string, so it can be printed in a human readable fashion, - but sacrificing some readablility for tukey_hingese sake of brevity */ + but sacrificing some readablility for the sake of brevity */ static void factor_to_string_concise (const struct xfactor *fctr, const struct factor_result *result, @@ -271,7 +271,7 @@ cmd_examine (struct lexer *lexer, struct dataset *ds) return CMD_FAILURE; } - /* If /MISSING=INCLUDE is set, tukey_hingesen user missing values are ignored */ + /* If /MISSING=INCLUDE is set, then user missing values are ignored */ exclude_values = cmd.incl == XMN_INCLUDE ? MV_SYSTEM : MV_ANY; if ( cmd.st_n == SYSMIS ) @@ -280,7 +280,7 @@ cmd_examine (struct lexer *lexer, struct dataset *ds) if ( ! cmd.sbc_cinterval) cmd.n_cinterval[0] = 95.0; - /* If descriptives have been requested, make sure tukey_hingese + /* If descriptives have been requested, make sure the quartiles are calculated */ if ( cmd.a_statistics[XMN_ST_DESCRIPTIVES] ) { @@ -369,14 +369,14 @@ np_plot (struct np *np, const char *label) chart_write_yscale (dnp_chart, np->dns_min, np->dns_max, 5); { - struct ccase c; struct casereader *reader = casewriter_make_reader (np->writer); - while (casereader_read (reader, &c)) + struct ccase *c; + while ((c = casereader_read (reader)) != NULL) { - chart_datum (np_chart, 0, case_data_idx (&c, NP_IDX_Y)->f, case_data_idx (&c, NP_IDX_NS)->f); - chart_datum (dnp_chart, 0, case_data_idx (&c, NP_IDX_Y)->f, case_data_idx (&c, NP_IDX_DNS)->f); + chart_datum (np_chart, 0, case_data_idx (c, NP_IDX_Y)->f, case_data_idx (c, NP_IDX_NS)->f); + chart_datum (dnp_chart, 0, case_data_idx (c, NP_IDX_Y)->f, case_data_idx (c, NP_IDX_DNS)->f); - case_destroy (&c); + case_unref (c); } casereader_destroy (reader); } @@ -866,7 +866,7 @@ static void examine_group (struct cmd_examine *cmd, struct casereader *reader, int level, const struct dictionary *dict, struct xfactor *factor) { - struct ccase c; + struct ccase *c; const struct variable *wv = dict_get_weight (dict); int v; int n_extrema = 1; @@ -878,20 +878,21 @@ examine_group (struct cmd_examine *cmd, struct casereader *reader, int level, n_extrema = cmd->st_n; - if (casereader_peek (reader, 0, &c)) + c = casereader_peek (reader, 0); + if (c != NULL) { if ( level > 0) { result->value[0] = - value_dup (case_data (&c, factor->indep_var[0]), + value_dup (case_data (c, factor->indep_var[0]), var_get_width (factor->indep_var[0])); if ( level > 1) result->value[1] = - value_dup (case_data (&c, factor->indep_var[1]), + value_dup (case_data (c, factor->indep_var[1]), var_get_width (factor->indep_var[1])); } - case_destroy (&c); + case_unref (c); } for (v = 0; v < n_dependent_vars; ++v) @@ -911,11 +912,11 @@ examine_group (struct cmd_examine *cmd, struct casereader *reader, int level, { /* In this case, we need to sort the data, so we create a sorting casewriter */ - struct case_ordering *up_ordering = case_ordering_create (); - - case_ordering_add_var (up_ordering, dependent_vars[v], SRT_ASCEND); - writer = sort_create_writer (up_ordering, + struct subcase up_ordering; + subcase_init_var (&up_ordering, dependent_vars[v], SC_ASCEND); + writer = sort_create_writer (&up_ordering, casereader_get_value_cnt (reader)); + subcase_destroy (&up_ordering); } else { @@ -927,33 +928,33 @@ examine_group (struct cmd_examine *cmd, struct casereader *reader, int level, /* Sort or just iterate, whilst calculating moments etc */ - while (casereader_read (input, &c)) + while ((c = casereader_read (input)) != NULL) { const casenumber loc = - case_data_idx (&c, casereader_get_value_cnt (reader) - 1)->f; + case_data_idx (c, casereader_get_value_cnt (reader) - 1)->f; - const double weight = wv ? case_data (&c, wv)->f : 1.0; + const double weight = wv ? case_data (c, wv)->f : 1.0; if (weight != SYSMIS) minimize (&result->metrics[v].cmin, weight); moments1_add (result->metrics[v].moments, - case_data (&c, dependent_vars[v])->f, + case_data (c, dependent_vars[v])->f, weight); result->metrics[v].n += weight; extrema_add (result->metrics[v].maxima, - case_data (&c, dependent_vars[v])->f, + case_data (c, dependent_vars[v])->f, weight, loc); extrema_add (result->metrics[v].minima, - case_data (&c, dependent_vars[v])->f, + case_data (c, dependent_vars[v])->f, weight, loc); - casewriter_write (writer, &c); + casewriter_write (writer, c); } casereader_destroy (input); result->metrics[v].up_reader = casewriter_make_reader (writer); @@ -1020,7 +1021,7 @@ examine_group (struct cmd_examine *cmd, struct casereader *reader, int level, order_stats_accumulate (os, n_os, casereader_clone (metric->up_reader), - wv, dependent_vars[v]); + wv, dependent_vars[v], MV_ANY); free (os); } } @@ -1028,7 +1029,7 @@ examine_group (struct cmd_examine *cmd, struct casereader *reader, int level, /* FIXME: Do this in the above loop */ if ( cmd->a_plot[XMN_PLT_HISTOGRAM] ) { - struct ccase c; + struct ccase *c; struct casereader *input = casereader_clone (reader); for (v = 0; v < n_dependent_vars; ++v) @@ -1059,18 +1060,18 @@ examine_group (struct cmd_examine *cmd, struct casereader *reader, int level, metric->histogram = histogram_create (10, min->value, max->value); } - while (casereader_read (input, &c)) + while ((c = casereader_read (input)) != NULL) { - const double weight = wv ? case_data (&c, wv)->f : 1.0; + const double weight = wv ? case_data (c, wv)->f : 1.0; for (v = 0; v < n_dependent_vars; ++v) { struct factor_metrics *metric = &result->metrics[v]; if ( metric->histogram) histogram_add ((struct histogram *) metric->histogram, - case_data (&c, dependent_vars[v])->f, weight); + case_data (c, dependent_vars[v])->f, weight); } - case_destroy (&c); + case_unref (c); } casereader_destroy (input); } @@ -1091,7 +1092,7 @@ examine_group (struct cmd_examine *cmd, struct casereader *reader, int level, order_stats_accumulate ((struct order_stats **) &metric->box_whisker, 1, casereader_clone (metric->up_reader), - wv, dependent_vars[v]); + wv, dependent_vars[v], MV_ANY); } } @@ -1106,17 +1107,18 @@ run_examine (struct cmd_examine *cmd, struct casereader *input, { struct ll *ll; const struct dictionary *dict = dataset_dict (ds); - struct ccase c; + struct ccase *c; struct casereader *level0 = casereader_clone (input); - 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); ll_init (&level0_factor.result_list); @@ -1131,15 +1133,10 @@ run_examine (struct cmd_examine *cmd, struct casereader *input, struct casereader *group = NULL; struct casereader *level1; struct casegrouper *grouper1 = NULL; - struct case_ordering *ordering1 = case_ordering_create (); - case_ordering_add_var (ordering1, factor->indep_var[0], SRT_ASCEND); level1 = casereader_clone (input); - - level1 = sort_execute (level1, - case_ordering_clone (ordering1)); - grouper1 = casegrouper_create_case_ordering (level1, ordering1); - case_ordering_destroy (ordering1); + level1 = sort_execute_1var (level1, factor->indep_var[0]); + grouper1 = casegrouper_create_vars (level1, &factor->indep_var[0], 1); while (casegrouper_get_next_group (grouper1, &group)) { @@ -1152,16 +1149,12 @@ run_examine (struct cmd_examine *cmd, struct casereader *input, int n_groups = 0; struct casereader *group2 = NULL; struct casegrouper *grouper2 = NULL; - struct case_ordering *ordering2 = case_ordering_create (); - case_ordering_add_var (ordering2, - factor->indep_var[1], SRT_ASCEND); - group_copy = sort_execute (group_copy, - case_ordering_clone (ordering2)); - grouper2 = - casegrouper_create_case_ordering (group_copy, ordering2); + group_copy = sort_execute_1var (group_copy, + factor->indep_var[1]); - case_ordering_destroy (ordering2); + grouper2 = casegrouper_create_vars (group_copy, + &factor->indep_var[1], 1); while (casegrouper_get_next_group (grouper2, &group2)) { @@ -1337,8 +1330,8 @@ show_summary (const struct variable **dependent_var, int n_dep_var, { if ( last_value == NULL || - compare_values (last_value, result->value[0], - var_get_width(fctr->indep_var[0]))) + compare_values_short (last_value, result->value[0], + fctr->indep_var[0])) { struct string str;