X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flanguage%2Fstats%2Fexamine.c;h=4dbafce320ba41d0e1d892034b310ccd22626bb7;hb=bcaaaebdde43e26a8d27c53590f34bf29eb56406;hp=a9deed66b91b5729bc53f1c042342b530f3be985;hpb=383a4d349c650259bb8509c3c9bf9f83d7c5f911;p=pspp diff --git a/src/language/stats/examine.c b/src/language/stats/examine.c index a9deed66b9..4dbafce320 100644 --- a/src/language/stats/examine.c +++ b/src/language/stats/examine.c @@ -71,7 +71,7 @@ static void append_value_name (const struct variable *var, const union value *val, struct string *str) { var_append_value_name (var, val, str); - if ( var_is_value_missing (var, val, MV_ANY)) + if (var_is_value_missing (var, val)) ds_put_cstr (str, _(" (missing)")); } @@ -135,7 +135,7 @@ struct examine size_t n_percentiles; unsigned int plot; - int sl_power; + float sl_power; enum bp_mode boxplot_mode; @@ -235,10 +235,10 @@ show_boxplot_grouped (const struct examine *cmd, int iact_idx) const struct exploratory_stats *es = categoricals_get_user_data_by_category_real (cmd->cats, iact_idx, grp); - if ( y_min > es[v].minimum) + if (y_min > es[v].minimum) y_min = es[v].minimum; - if ( y_max < es[v].maximum) + if (y_max < es[v].maximum) y_max = es[v].maximum; } @@ -310,14 +310,14 @@ show_boxplot_variabled (const struct examine *cmd, int iact_idx) const struct exploratory_stats *es = categoricals_get_user_data_by_category_real (cmd->cats, iact_idx, grp); - if ( y_min > es[v].minimum) + if (y_min > es[v].minimum) y_min = es[v].minimum; - if ( y_max < es[v].maximum) + if (y_max < es[v].maximum) y_max = es[v].maximum; } - if ( iact->n_vars == 0) + if (iact->n_vars == 0) ds_put_format (&title, _("Boxplot")); else { @@ -373,7 +373,7 @@ show_npplot (const struct examine *cmd, int iact_idx) int grp; for (grp = 0; grp < n_cats; ++grp) { - struct chart_item *npp, *dnpp; + struct chart *npp, *dnpp; struct casereader *reader; struct np *np; @@ -389,7 +389,7 @@ show_npplot (const struct examine *cmd, int iact_idx) ds_init_cstr (&label, var_to_string (cmd->dep_vars[v])); - if ( iact->n_vars > 0) + if (iact->n_vars > 0) { ds_put_cstr (&label, " ("); for (ivar_idx = 0; ivar_idx < iact->n_vars; ++ivar_idx) @@ -416,13 +416,13 @@ show_npplot (const struct examine *cmd, int iact_idx) if (npp == NULL || dnpp == NULL) { msg (MW, _("Not creating NP plot because data set is empty.")); - chart_item_unref (npp); - chart_item_unref (dnpp); + chart_unref (npp); + chart_unref (dnpp); } else { - chart_item_submit (npp); - chart_item_submit (dnpp); + chart_submit (npp); + chart_submit (dnpp); } casereader_destroy (reader); @@ -446,7 +446,7 @@ show_spreadlevel (const struct examine *cmd, int iact_idx) for (v = 0; v < cmd->n_dep_vars; ++v) { int grp; - struct chart_item *sl; + struct chart *sl; struct string label; ds_init_cstr (&label, @@ -477,7 +477,7 @@ show_spreadlevel (const struct examine *cmd, int iact_idx) if (sl == NULL) msg (MW, _("Not creating spreadlevel chart for %s"), ds_cstr (&label)); else - chart_item_submit (sl); + chart_submit (sl); ds_destroy (&label); } @@ -514,7 +514,7 @@ show_histogram (const struct examine *cmd, int iact_idx) ds_init_cstr (&label, var_to_string (cmd->dep_vars[v])); - if ( iact->n_vars > 0) + if (iact->n_vars > 0) { ds_put_cstr (&label, " ("); for (ivar_idx = 0; ivar_idx < iact->n_vars; ++ivar_idx) @@ -534,8 +534,8 @@ show_histogram (const struct examine *cmd, int iact_idx) moments_calculate (es[v].mom, &n, &mean, &var, NULL, NULL); - chart_item_submit - ( histogram_chart_create (es[v].histogram->gsl_hist, + chart_submit + (histogram_chart_create (es[v].histogram->gsl_hist, ds_cstr (&label), n, mean, sqrt (var), false)); @@ -551,7 +551,7 @@ new_value_with_missing_footnote (const struct variable *var, struct pivot_footnote *missing_footnote) { struct pivot_value *pv = pivot_value_new_var_value (var, value); - if (var_is_value_missing (var, value, MV_USER)) + if (var_is_value_missing (var, value) == MV_USER) pivot_value_add_footnote (pv, missing_footnote); return pv; } @@ -562,7 +562,7 @@ create_interaction_dimensions (struct pivot_table *table, const struct interaction *iact, struct pivot_footnote *missing_footnote) { - for (size_t i = iact->n_vars; i-- > 0; ) + for (size_t i = iact->n_vars; i-- > 0;) { const struct variable *var = iact->vars[i]; struct pivot_dimension *d = pivot_dimension_create__ ( @@ -589,7 +589,6 @@ static void percentiles_report (const struct examine *cmd, int iact_idx) { struct pivot_table *table = pivot_table_create (N_("Percentiles")); - table->omit_empty = true; struct pivot_dimension *percentiles = pivot_dimension_create ( table, PIVOT_AXIS_COLUMN, N_("Percentiles")); @@ -667,7 +666,6 @@ static void normality_report (const struct examine *cmd, int iact_idx) { struct pivot_table *table = pivot_table_create (N_("Tests of Normality")); - table->omit_empty = true; struct pivot_dimension *test = pivot_dimension_create (table, PIVOT_AXIS_COLUMN, N_("Shapiro-Wilk"), @@ -733,7 +731,6 @@ static void descriptives_report (const struct examine *cmd, int iact_idx) { struct pivot_table *table = pivot_table_create (N_("Descriptives")); - table->omit_empty = true; pivot_dimension_create (table, PIVOT_AXIS_COLUMN, N_("Aspect"), N_("Statistic"), N_("Std. Error")); @@ -830,7 +827,6 @@ static void extremes_report (const struct examine *cmd, int iact_idx) { struct pivot_table *table = pivot_table_create (N_("Extreme Values")); - table->omit_empty = true; struct pivot_dimension *statistics = pivot_dimension_create ( table, PIVOT_AXIS_COLUMN, N_("Statistics")); @@ -919,7 +915,6 @@ summary_report (const struct examine *cmd, int iact_idx) { struct pivot_table *table = pivot_table_create ( N_("Case Processing Summary")); - table->omit_empty = true; pivot_table_set_weight_var (table, dict_get_weight (cmd->dict)); pivot_dimension_create (table, PIVOT_AXIS_COLUMN, N_("Statistics"), @@ -996,7 +991,7 @@ parse_interaction (struct lexer *lexer, struct examine *ex) const struct variable *v = NULL; struct interaction *iact = NULL; - if ( lex_match_variable (lexer, ex->dict, &v)) + if (lex_match_variable (lexer, ex->dict, &v)) { iact = interaction_create (v); @@ -1058,7 +1053,8 @@ update_n (const void *aux1, void *aux2 UNUSED, void *user_data, { const struct variable *var = examine->dep_vars[v]; - if (var_is_value_missing (var, case_data (c, var), examine->dep_excl)) + if (var_is_value_missing (var, case_data (c, var)) + & examine->dep_excl) { es[v].missing += weight; this_case_is_missing = true; @@ -1073,9 +1069,9 @@ update_n (const void *aux1, void *aux2 UNUSED, void *user_data, { struct ccase *outcase ; const struct variable *var = examine->dep_vars[v]; - const double x = case_data (c, var)->f; + const double x = case_num (c, var); - if (var_is_value_missing (var, case_data (c, var), examine->dep_excl)) + if (var_is_value_missing (var, case_data (c, var)) & examine->dep_excl) { es[v].missing += weight; continue; @@ -1095,11 +1091,11 @@ update_n (const void *aux1, void *aux2 UNUSED, void *user_data, /* Save the value and the ID to the writer */ assert (examine->id_idx != -1); - case_data_rw_idx (outcase, EX_VAL)->f = x; + *case_num_rw_idx (outcase, EX_VAL) = x; value_copy (case_data_rw_idx (outcase, EX_ID), case_data_idx (c, examine->id_idx), examine->id_width); - case_data_rw_idx (outcase, EX_WT)->f = weight; + *case_num_rw_idx (outcase, EX_WT) = weight; es[v].cc += weight; @@ -1139,7 +1135,7 @@ calculate_n (const void *aux1, void *aux2 UNUSED, void *user_data) es[v].sorted_reader = casewriter_make_reader (es[v].sorted_writer); es[v].sorted_writer = NULL; - imax = casereader_get_case_cnt (es[v].sorted_reader); + imax = casereader_get_n_cases (es[v].sorted_reader); es[v].maxima = pool_calloc (examine->pool, examine->calc_extremes, sizeof (*es[v].maxima)); es[v].minima = pool_calloc (examine->pool, examine->calc_extremes, sizeof (*es[v].minima)); @@ -1153,8 +1149,8 @@ calculate_n (const void *aux1, void *aux2 UNUSED, void *user_data) for (reader = casereader_clone (es[v].sorted_reader); (c = casereader_read (reader)) != NULL; case_unref (c)) { - const double val = case_data_idx (c, EX_VAL)->f; - double wt = case_data_idx (c, EX_WT)->f; + const double val = case_num_idx (c, EX_VAL); + double wt = case_num_idx (c, EX_WT); wt = var_force_valid_weight (examine->wv, wt, &warn); moments_pass_two (es[v].mom, val, wt); @@ -1202,13 +1198,12 @@ calculate_n (const void *aux1, void *aux2 UNUSED, void *user_data) { const int n_os = 5 + examine->n_percentiles; - struct order_stats **os ; es[v].percentiles = pool_calloc (examine->pool, examine->n_percentiles, sizeof (*es[v].percentiles)); es[v].trimmed_mean = trimmed_mean_create (es[v].cc, 0.05); es[v].shapiro_wilk = NULL; - os = xcalloc (n_os, sizeof *os); + struct order_stats **os = XCALLOC (n_os, struct order_stats *); os[0] = &es[v].trimmed_mean->parent; es[v].quartiles[0] = percentile_create (0.25, es[v].cc); @@ -1377,7 +1372,7 @@ run_examine (struct examine *cmd, struct casereader *input) { struct ccase *c = casereader_peek (input, 0); - cmd->id_idx = case_get_value_cnt (c); + cmd->id_idx = case_get_n_values (c); input = casereader_create_arithmetic_sequence (input, 1.0, 1.0); case_unref (c); @@ -1491,7 +1486,7 @@ cmd_examine (struct lexer *lexer, struct dataset *ds) lex_match (lexer, T_SLASH); if (lex_match_id (lexer, "VARIABLES")) { - if (! lex_force_match (lexer, T_EQUALS) ) + if (! lex_force_match (lexer, T_EQUALS)) goto error; } @@ -1541,16 +1536,10 @@ cmd_examine (struct lexer *lexer, struct dataset *ds) int extr = 5; if (lex_match (lexer, T_LPAREN)) { - if (!lex_force_int (lexer)) + if (!lex_force_int_range (lexer, "EXTREME", 0, INT_MAX)) goto error; extr = lex_integer (lexer); - if (extr < 0) - { - msg (MW, _("%s may not be negative. Using default value (%g)."), "EXTREME", 5.0); - extr = 5; - } - lex_get (lexer); if (! lex_force_match (lexer, T_RPAREN)) goto error; @@ -1579,15 +1568,10 @@ cmd_examine (struct lexer *lexer, struct dataset *ds) { while (lex_is_number (lexer)) { + if (!lex_force_num_range_open (lexer, "PERCENTILES", 0, 100)) + goto error; double p = lex_number (lexer); - if ( p <= 0 || p >= 100.0) - { - lex_error (lexer, - _("Percentiles must lie in the range (0, 100)")); - goto error; - } - examine.n_percentiles++; examine.ptiles = xrealloc (examine.ptiles, @@ -1672,7 +1656,7 @@ cmd_examine (struct lexer *lexer, struct dataset *ds) } else if (lex_match_id (lexer, "REPORT")) { - examine.fctr_excl = MV_NEVER; + examine.fctr_excl = 0; } else if (lex_match_id (lexer, "NOREPORT")) { @@ -1725,9 +1709,9 @@ cmd_examine (struct lexer *lexer, struct dataset *ds) { examine.plot |= PLOT_SPREADLEVEL; examine.sl_power = 0; - if (lex_match (lexer, T_LPAREN) && lex_force_int (lexer)) + if (lex_match (lexer, T_LPAREN) && lex_force_num (lexer)) { - examine.sl_power = lex_integer (lexer); + examine.sl_power = lex_number (lexer); lex_get (lexer); if (! lex_force_match (lexer, T_RPAREN)) @@ -1752,7 +1736,7 @@ cmd_examine (struct lexer *lexer, struct dataset *ds) } else if (lex_match_id (lexer, "CINTERVAL")) { - if ( !lex_force_num (lexer)) + if (!lex_force_num (lexer)) goto error; examine.conf = lex_number (lexer); @@ -1772,7 +1756,7 @@ cmd_examine (struct lexer *lexer, struct dataset *ds) } - if ( totals_seen && nototals_seen) + if (totals_seen && nototals_seen) { msg (SE, _("%s and %s are mutually exclusive"), "TOTAL", "NOTOTAL"); goto error; @@ -1780,7 +1764,7 @@ cmd_examine (struct lexer *lexer, struct dataset *ds) /* If totals have been requested or if there are no factors in this analysis, then the totals need to be included. */ - if ( !nototals_seen || examine.n_iacts == 1) + if (!nototals_seen || examine.n_iacts == 1) { examine.iacts = &iacts_mem[0]; } @@ -1792,7 +1776,7 @@ cmd_examine (struct lexer *lexer, struct dataset *ds) } - if ( examine.id_var ) + if (examine.id_var) { examine.id_idx = var_get_case_index (examine.id_var); examine.id_width = var_get_width (examine.id_var); @@ -1817,8 +1801,7 @@ cmd_examine (struct lexer *lexer, struct dataset *ds) if (percentiles_seen && examine.n_percentiles == 0) { examine.n_percentiles = 7; - examine.ptiles = xcalloc (examine.n_percentiles, - sizeof (*examine.ptiles)); + examine.ptiles = xcalloc (examine.n_percentiles, sizeof (*examine.ptiles)); examine.ptiles[0] = 5; examine.ptiles[1] = 10;