projects
/
pspp
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Actually implement the new procedure code and adapt all of its clients
[pspp]
/
src
/
language
/
stats
/
examine.q
diff --git
a/src/language/stats/examine.q
b/src/language/stats/examine.q
index ca986972acbea7fc10aeedd640c06a8530ce89df..e15d294975eb2ba26960db79b225d3ff8939635e 100644
(file)
--- a/
src/language/stats/examine.q
+++ b/
src/language/stats/examine.q
@@
-1,7
+1,6
@@
/* PSPP - EXAMINE data for normality . -*-c-*-
Copyright (C) 2004 Free Software Foundation, Inc.
/* PSPP - EXAMINE data for normality . -*-c-*-
Copyright (C) 2004 Free Software Foundation, Inc.
-Author: John Darrington 2004
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
@@
-27,7
+26,8
@@
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
#include <stdlib.h>
#include <data/case.h>
#include <stdlib.h>
#include <data/case.h>
-#include <data/casefile.h>
+#include <data/casegrouper.h>
+#include <data/casereader.h>
#include <data/dictionary.h>
#include <data/procedure.h>
#include <data/value-labels.h>
#include <data/dictionary.h>
#include <data/procedure.h>
#include <data/value-labels.h>
@@
-85,12
+85,12
@@
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
static struct cmd_examine cmd;
static struct cmd_examine cmd;
-static struct variable **dependent_vars;
+static
const
struct variable **dependent_vars;
static size_t n_dependent_vars;
static size_t n_dependent_vars;
-struct factor
+struct factor
{
/* The independent variable */
struct variable *indep_var[2];
{
/* The independent variable */
struct variable *indep_var[2];
@@
-107,9
+107,9
@@
struct factor
};
/* Linked list of factors */
};
/* Linked list of factors */
-static struct factor *factors
=
0;
+static struct factor *factors
=
0;
-static struct metrics *totals
=
0;
+static struct metrics *totals
=
0;
/* Parse the clause specifying the factors */
static int examine_parse_independent_vars (struct lexer *lexer, const struct dictionary *dict, struct cmd_examine *cmd);
/* Parse the clause specifying the factors */
static int examine_parse_independent_vars (struct lexer *lexer, const struct dictionary *dict, struct cmd_examine *cmd);
@@
-117,20
+117,20
@@
static int examine_parse_independent_vars (struct lexer *lexer, const struct dic
/* Output functions */
/* Output functions */
-static void show_summary (
struct variable **dependent_var, int n_dep_var,
+static void show_summary (
const struct variable **dependent_var, int n_dep_var,
const struct factor *f);
const struct factor *f);
-static void show_extremes (
struct variable **dependent_var,
- int n_dep_var,
+static void show_extremes (
const struct variable **dependent_var,
+ int n_dep_var,
const struct factor *factor,
int n_extremities);
const struct factor *factor,
int n_extremities);
-static void show_descriptives (
struct variable **dependent_var,
- int n_dep_var,
+static void show_descriptives (
const struct variable **dependent_var,
+ int n_dep_var,
struct factor *factor);
struct factor *factor);
-static void show_percentiles (
struct variable **dependent_var,
- int n_dep_var,
+static void show_percentiles (
const struct variable **dependent_var,
+ int n_dep_var,
struct factor *factor);
struct factor *factor);
@@
-139,49
+139,48
@@
static void show_percentiles (struct variable **dependent_var,
void np_plot (const struct metrics *m, const char *factorname);
void np_plot (const struct metrics *m, const char *factorname);
-void box_plot_group (const struct factor *fctr,
+void box_plot_group (const struct factor *fctr,
const struct variable **vars, int n_vars,
const struct variable *id
) ;
const struct variable **vars, int n_vars,
const struct variable *id
) ;
-void box_plot_variables (const struct factor *fctr,
- const struct variable **vars, int n_vars,
+void box_plot_variables (const struct factor *fctr,
+ const struct variable **vars, int n_vars,
const struct variable *id
);
/* Per Split function */
const struct variable *id
);
/* Per Split function */
-static
bool run_examine (const struct ccase
*,
-
const struct casefile *cf, void *cmd_, const
struct dataset *);
+static
void run_examine (struct cmd_examine *, struct casereader
*,
+ struct dataset *);
static void output_examine (void);
static void output_examine (void);
-void factor_calc (
struct ccase *c, int case_no,
- double weight, int case_missing);
+void factor_calc (
const struct ccase *c, int case_no,
+
double weight, int case_missing);
/* Represent a factor as a string, so it can be
printed in a human readable fashion */
/* Represent a factor as a string, so it can be
printed in a human readable fashion */
-const char * factor_to_string (const struct factor *fctr,
- struct factor_statistics *fs,
- const struct variable *var);
+const char * factor_to_string (const struct factor *fctr,
+
const
struct factor_statistics *fs,
+
const struct variable *var);
/* Represent a factor as a string, so it can be
printed in a human readable fashion,
but sacrificing some readablility for the sake of brevity */
/* Represent a factor as a string, so it can be
printed in a human readable fashion,
but sacrificing some readablility for the sake of brevity */
-const char *factor_to_string_concise (const struct factor *fctr,
+const char *factor_to_string_concise (const struct factor *fctr,
struct factor_statistics *fs);
struct factor_statistics *fs);
-/* Function to use for testing for missing values */
-static is_missing_func *value_is_missing;
-
+/* Categories of missing values to exclude. */
+static enum mv_class exclude_values;
/* PERCENTILES */
/* PERCENTILES */
@@
-195,6
+194,8
@@
static short sbc_percentile;
int
cmd_examine (struct lexer *lexer, struct dataset *ds)
{
int
cmd_examine (struct lexer *lexer, struct dataset *ds)
{
+ struct casegrouper *grouper;
+ struct casereader *group;
bool ok;
subc_list_double_create (&percentile_list);
bool ok;
subc_list_double_create (&percentile_list);
@@
-207,18
+208,15
@@
cmd_examine (struct lexer *lexer, struct dataset *ds)
}
/* If /MISSING=INCLUDE is set, then user missing values are ignored */
}
/* If /MISSING=INCLUDE is set, then user missing values are ignored */
- if (cmd.incl == XMN_INCLUDE )
- value_is_missing = mv_is_value_system_missing;
- else
- value_is_missing = mv_is_value_missing;
+ exclude_values = cmd.incl == XMN_INCLUDE ? MV_SYSTEM : MV_ANY;
- if ( cmd.st_n == SYSMIS )
+ if ( cmd.st_n == SYSMIS )
cmd.st_n = 5;
cmd.st_n = 5;
- if ( ! cmd.sbc_cinterval)
+ if ( ! cmd.sbc_cinterval)
cmd.n_cinterval[0] = 95.0;
cmd.n_cinterval[0] = 95.0;
- /* If descriptives have been requested, make sure the
+ /* If descriptives have been requested, make sure the
quartiles are calculated */
if ( cmd.a_statistics[XMN_ST_DESCRIPTIVES] )
{
quartiles are calculated */
if ( cmd.a_statistics[XMN_ST_DESCRIPTIVES] )
{
@@
-227,19
+225,23
@@
cmd_examine (struct lexer *lexer, struct dataset *ds)
subc_list_double_push (&percentile_list, 75);
}
subc_list_double_push (&percentile_list, 75);
}
- ok = multipass_procedure_with_splits (ds, run_examine, &cmd);
+ grouper = casegrouper_create_splits (proc_open (ds), dataset_dict (ds));
+ while (casegrouper_get_next_group (grouper, &group))
+ run_examine (&cmd, group, ds);
+ ok = casegrouper_destroy (grouper);
+ ok = proc_commit (ds) && ok;
- if ( totals )
+ if ( totals )
{
free ( totals );
}
{
free ( totals );
}
-
- if ( dependent_vars )
+
+ if ( dependent_vars )
free (dependent_vars);
{
struct factor *f = factors ;
free (dependent_vars);
{
struct factor *f = factors ;
- while ( f )
+ while ( f )
{
struct factor *ff = f;
{
struct factor *ff = f;
@@
-269,36
+271,36
@@
output_examine (void)
{
show_summary (dependent_vars, n_dependent_vars, 0);
{
show_summary (dependent_vars, n_dependent_vars, 0);
- if ( cmd.sbc_statistics )
+ if ( cmd.sbc_statistics )
{
{
- if ( cmd.a_statistics[XMN_ST_EXTREME])
+ if ( cmd.a_statistics[XMN_ST_EXTREME])
show_extremes (dependent_vars, n_dependent_vars, 0, cmd.st_n);
show_extremes (dependent_vars, n_dependent_vars, 0, cmd.st_n);
- if ( cmd.a_statistics[XMN_ST_DESCRIPTIVES])
+ if ( cmd.a_statistics[XMN_ST_DESCRIPTIVES])
show_descriptives (dependent_vars, n_dependent_vars, 0);
}
show_descriptives (dependent_vars, n_dependent_vars, 0);
}
- if ( sbc_percentile )
+ if ( sbc_percentile )
show_percentiles (dependent_vars, n_dependent_vars, 0);
show_percentiles (dependent_vars, n_dependent_vars, 0);
- if ( cmd.sbc_plot)
+ if ( cmd.sbc_plot)
{
int v;
{
int v;
- if ( cmd.a_plot[XMN_PLT_STEMLEAF] )
+ if ( cmd.a_plot[XMN_PLT_STEMLEAF] )
msg (SW, _ ("%s is not currently supported."), "STEMLEAF");
msg (SW, _ ("%s is not currently supported."), "STEMLEAF");
- if ( cmd.a_plot[XMN_PLT_SPREADLEVEL] )
+ if ( cmd.a_plot[XMN_PLT_SPREADLEVEL] )
msg (SW, _ ("%s is not currently supported."), "SPREADLEVEL");
msg (SW, _ ("%s is not currently supported."), "SPREADLEVEL");
- if ( cmd.a_plot[XMN_PLT_NPPLOT] )
+ if ( cmd.a_plot[XMN_PLT_NPPLOT] )
{
{
- for ( v = 0 ; v < n_dependent_vars; ++v )
+ for ( v = 0 ; v < n_dependent_vars; ++v )
np_plot (&totals[v], var_to_string (dependent_vars[v]));
}
np_plot (&totals[v], var_to_string (dependent_vars[v]));
}
- if ( cmd.a_plot[XMN_PLT_BOXPLOT] )
+ if ( cmd.a_plot[XMN_PLT_BOXPLOT] )
{
{
- if ( cmd.cmp == XMN_GROUPS )
+ if ( cmd.cmp == XMN_GROUPS )
{
box_plot_group (0, (const struct variable **) dependent_vars,
n_dependent_vars, cmd.v_id);
{
box_plot_group (0, (const struct variable **) dependent_vars,
n_dependent_vars, cmd.v_id);
@@
-309,17
+311,17
@@
output_examine (void)
n_dependent_vars, cmd.v_id);
}
n_dependent_vars, cmd.v_id);
}
- if ( cmd.a_plot[XMN_PLT_HISTOGRAM] )
+ if ( cmd.a_plot[XMN_PLT_HISTOGRAM] )
{
{
- for ( v = 0 ; v < n_dependent_vars; ++v )
+ for ( v = 0 ; v < n_dependent_vars; ++v )
{
struct normal_curve normal;
normal.N = totals[v].n;
normal.mean = totals[v].mean;
normal.stddev = totals[v].stddev;
{
struct normal_curve normal;
normal.N = totals[v].n;
normal.mean = totals[v].mean;
normal.stddev = totals[v].stddev;
-
- histogram_plot (totals[v].histogram,
+
+ histogram_plot (totals[v].histogram,
var_to_string (dependent_vars[v]),
&normal, 0);
}
var_to_string (dependent_vars[v]),
&normal, 0);
}
@@
-332,24
+334,24
@@
output_examine (void)
/* Show grouped statistics as appropriate */
fctr = factors;
/* Show grouped statistics as appropriate */
fctr = factors;
- while ( fctr )
+ while ( fctr )
{
show_summary (dependent_vars, n_dependent_vars, fctr);
{
show_summary (dependent_vars, n_dependent_vars, fctr);
- if ( cmd.sbc_statistics )
+ if ( cmd.sbc_statistics )
{
{
- if ( cmd.a_statistics[XMN_ST_EXTREME])
+ if ( cmd.a_statistics[XMN_ST_EXTREME])
show_extremes (dependent_vars, n_dependent_vars, fctr, cmd.st_n);
show_extremes (dependent_vars, n_dependent_vars, fctr, cmd.st_n);
- if ( cmd.a_statistics[XMN_ST_DESCRIPTIVES])
+ if ( cmd.a_statistics[XMN_ST_DESCRIPTIVES])
show_descriptives (dependent_vars, n_dependent_vars, fctr);
}
show_descriptives (dependent_vars, n_dependent_vars, fctr);
}
- if ( sbc_percentile )
+ if ( sbc_percentile )
show_percentiles (dependent_vars, n_dependent_vars, fctr);
show_percentiles (dependent_vars, n_dependent_vars, fctr);
- if ( cmd.sbc_plot)
+ if ( cmd.sbc_plot)
{
size_t v;
{
size_t v;
@@
-357,7
+359,7
@@
output_examine (void)
if ( cmd.a_plot[XMN_PLT_BOXPLOT] )
{
if ( cmd.a_plot[XMN_PLT_BOXPLOT] )
{
- if ( cmd.cmp == XMN_VARIABLES )
+ if ( cmd.cmp == XMN_VARIABLES )
box_plot_variables (fctr,
(const struct variable **) dependent_vars,
n_dependent_vars, cmd.v_id);
box_plot_variables (fctr,
(const struct variable **) dependent_vars,
n_dependent_vars, cmd.v_id);
@@
-370,25
+372,25
@@
output_examine (void)
for ( v = 0 ; v < n_dependent_vars; ++v )
{
for ( v = 0 ; v < n_dependent_vars; ++v )
{
- for ( fs = fctr->fs ; *fs ; ++fs )
+ for ( fs = fctr->fs ; *fs ; ++fs )
{
const char *s = factor_to_string (fctr, *fs, dependent_vars[v]);
{
const char *s = factor_to_string (fctr, *fs, dependent_vars[v]);
- if ( cmd.a_plot[XMN_PLT_NPPLOT] )
+ if ( cmd.a_plot[XMN_PLT_NPPLOT] )
np_plot (& (*fs)->m[v], s);
np_plot (& (*fs)->m[v], s);
- if ( cmd.a_plot[XMN_PLT_HISTOGRAM] )
+ if ( cmd.a_plot[XMN_PLT_HISTOGRAM] )
{
struct normal_curve normal;
normal.N = (*fs)->m[v].n;
normal.mean = (*fs)->m[v].mean;
normal.stddev = (*fs)->m[v].stddev;
{
struct normal_curve normal;
normal.N = (*fs)->m[v].n;
normal.mean = (*fs)->m[v].mean;
normal.stddev = (*fs)->m[v].stddev;
-
- histogram_plot ((*fs)->m[v].histogram,
+
+ histogram_plot ((*fs)->m[v].histogram,
s, &normal, 0);
}
s, &normal, 0);
}
-
+
} /* for ( fs .... */
} /* for ( v = 0 ..... */
} /* for ( fs .... */
} /* for ( v = 0 ..... */
@@
-407,12
+409,12
@@
static struct hsh_table *
list_to_ptile_hash (const subc_list_double *l)
{
int i;
list_to_ptile_hash (const subc_list_double *l)
{
int i;
-
- struct hsh_table *h ;
- h = hsh_create (subc_list_double_count (l),
+ struct hsh_table *h ;
+
+ h = hsh_create (subc_list_double_count (l),
(hsh_compare_func *) ptile_compare,
(hsh_compare_func *) ptile_compare,
- (hsh_hash_func *) ptile_hash,
+ (hsh_hash_func *) ptile_hash,
(hsh_free_func *) free,
0);
(hsh_free_func *) free,
0);
@@
-420,7
+422,7
@@
list_to_ptile_hash (const subc_list_double *l)
for ( i = 0 ; i < subc_list_double_count (l) ; ++i )
{
struct percentile *p = xmalloc (sizeof *p);
for ( i = 0 ; i < subc_list_double_count (l) ; ++i )
{
struct percentile *p = xmalloc (sizeof *p);
-
+
p->p = subc_list_double_at (l,i);
p->v = SYSMIS;
p->p = subc_list_double_at (l,i);
p->v = SYSMIS;
@@
-434,7
+436,7
@@
list_to_ptile_hash (const subc_list_double *l)
/* Parse the PERCENTILES subcommand */
static int
/* Parse the PERCENTILES subcommand */
static int
-xmn_custom_percentiles (struct lexer *lexer, struct dataset *ds UNUSED,
+xmn_custom_percentiles (struct lexer *lexer, struct dataset *ds UNUSED,
struct cmd_examine *p UNUSED, void *aux UNUSED)
{
sbc_percentile = 1;
struct cmd_examine *p UNUSED, void *aux UNUSED)
{
sbc_percentile = 1;
@@
-443,7
+445,7
@@
xmn_custom_percentiles (struct lexer *lexer, struct dataset *ds UNUSED,
lex_match (lexer, '(');
lex_match (lexer, '(');
- while ( lex_is_number (lexer) )
+ while ( lex_is_number (lexer) )
{
subc_list_double_push (&percentile_list, lex_number (lexer));
{
subc_list_double_push (&percentile_list, lex_number (lexer));
@@
-456,10
+458,10
@@
xmn_custom_percentiles (struct lexer *lexer, struct dataset *ds UNUSED,
lex_match (lexer, '=');
if ( lex_match_id (lexer, "HAVERAGE"))
lex_match (lexer, '=');
if ( lex_match_id (lexer, "HAVERAGE"))
- percentile_algorithm = PC_HAVERAGE;
+ percentile_algorithm = PC_HAVERAGE;
else if ( lex_match_id (lexer, "WAVERAGE"))
else if ( lex_match_id (lexer, "WAVERAGE"))
- percentile_algorithm = PC_WAVERAGE;
+ percentile_algorithm = PC_WAVERAGE;
else if ( lex_match_id (lexer, "ROUND"))
percentile_algorithm = PC_ROUND;
else if ( lex_match_id (lexer, "ROUND"))
percentile_algorithm = PC_ROUND;
@@
-468,10
+470,10
@@
xmn_custom_percentiles (struct lexer *lexer, struct dataset *ds UNUSED,
percentile_algorithm = PC_EMPIRICAL;
else if ( lex_match_id (lexer, "AEMPIRICAL"))
percentile_algorithm = PC_EMPIRICAL;
else if ( lex_match_id (lexer, "AEMPIRICAL"))
- percentile_algorithm = PC_AEMPIRICAL;
+ percentile_algorithm = PC_AEMPIRICAL;
else if ( lex_match_id (lexer, "NONE"))
else if ( lex_match_id (lexer, "NONE"))
- percentile_algorithm = PC_NONE;
+ percentile_algorithm = PC_NONE;
if ( 0 == subc_list_double_count (&percentile_list))
if ( 0 == subc_list_double_count (&percentile_list))
@@
-492,7
+494,7
@@
xmn_custom_percentiles (struct lexer *lexer, struct dataset *ds UNUSED,
static int
xmn_custom_total (struct lexer *lexer UNUSED, struct dataset *ds UNUSED, struct cmd_examine *p, void *aux UNUSED)
{
static int
xmn_custom_total (struct lexer *lexer UNUSED, struct dataset *ds UNUSED, struct cmd_examine *p, void *aux UNUSED)
{
- if ( p->sbc_nototal )
+ if ( p->sbc_nototal )
{
msg (SE, _ ("%s and %s are mutually exclusive"),"TOTAL","NOTOTAL");
return 0;
{
msg (SE, _ ("%s and %s are mutually exclusive"),"TOTAL","NOTOTAL");
return 0;
@@
-502,10
+504,10
@@
xmn_custom_total (struct lexer *lexer UNUSED, struct dataset *ds UNUSED, struct
}
static int
}
static int
-xmn_custom_nototal (struct lexer *lexer UNUSED, struct dataset *ds UNUSED,
+xmn_custom_nototal (struct lexer *lexer UNUSED, struct dataset *ds UNUSED,
struct cmd_examine *p, void *aux UNUSED)
{
struct cmd_examine *p, void *aux UNUSED)
{
- if ( p->sbc_total )
+ if ( p->sbc_total )
{
msg (SE, _ ("%s and %s are mutually exclusive"),"TOTAL","NOTOTAL");
return 0;
{
msg (SE, _ ("%s and %s are mutually exclusive"),"TOTAL","NOTOTAL");
return 0;
@@
-516,7
+518,7
@@
xmn_custom_nototal (struct lexer *lexer UNUSED, struct dataset *ds UNUSED,
-/* Parser for the variables sub command
+/* Parser for the variables sub command
Returns 1 on success */
static int
xmn_custom_variables (struct lexer *lexer, struct dataset *ds, struct cmd_examine *cmd, void *aux UNUSED)
Returns 1 on success */
static int
xmn_custom_variables (struct lexer *lexer, struct dataset *ds, struct cmd_examine *cmd, void *aux UNUSED)
@@
-529,8
+531,8
@@
xmn_custom_variables (struct lexer *lexer, struct dataset *ds, struct cmd_examin
{
return 2;
}
{
return 2;
}
-
- if (!parse_variables (lexer, dict, &dependent_vars, &n_dependent_vars,
+
+ if (!parse_variables
_const
(lexer, dict, &dependent_vars, &n_dependent_vars,
PV_NO_DUPLICATE | PV_NUMERIC | PV_NO_SCRATCH) )
{
free (dependent_vars);
PV_NO_DUPLICATE | PV_NUMERIC | PV_NO_SCRATCH) )
{
free (dependent_vars);
@@
-543,11
+545,11
@@
xmn_custom_variables (struct lexer *lexer, struct dataset *ds, struct cmd_examin
if ( lex_match (lexer, T_BY))
{
if ( lex_match (lexer, T_BY))
{
- int success ;
+ int success ;
success = examine_parse_independent_vars (lexer, dict, cmd);
if ( success != 1 ) {
free (dependent_vars);
success = examine_parse_independent_vars (lexer, dict, cmd);
if ( success != 1 ) {
free (dependent_vars);
- free (totals) ;
+ free (totals) ;
}
return success;
}
}
return success;
}
@@
-575,7
+577,7
@@
examine_parse_independent_vars (struct lexer *lexer, const struct dictionary *di
sf->indep_var[0] = parse_variable (lexer, dict);
sf->indep_var[1] = 0;
sf->indep_var[0] = parse_variable (lexer, dict);
sf->indep_var[1] = 0;
- if ( lex_token (lexer) == T_BY )
+ if ( lex_token (lexer) == T_BY )
{
lex_match (lexer, T_BY);
{
lex_match (lexer, T_BY);
@@
-600,16
+602,16
@@
examine_parse_independent_vars (struct lexer *lexer, const struct dictionary *di
sf->next = factors;
factors = sf;
sf->next = factors;
factors = sf;
-
+
lex_match (lexer, ',');
lex_match (lexer, ',');
- if ( lex_token (lexer) == '.' || lex_token (lexer) == '/' )
+ if ( lex_token (lexer) == '.' || lex_token (lexer) == '/' )
return 1;
success = examine_parse_independent_vars (lexer, dict, cmd);
return 1;
success = examine_parse_independent_vars (lexer, dict, cmd);
-
- if ( success != 1 )
- free ( sf ) ;
+
+ if ( success != 1 )
+ free ( sf ) ;
return success;
}
return success;
}
@@
-617,13
+619,13
@@
examine_parse_independent_vars (struct lexer *lexer, const struct dictionary *di
-void populate_percentiles (struct tab_table *tbl, int col, int row,
+void populate_percentiles (struct tab_table *tbl, int col, int row,
const struct metrics *m);
const struct metrics *m);
-void populate_descriptives (struct tab_table *t, int col, int row,
+void populate_descriptives (struct tab_table *t, int col, int row,
const struct metrics *fs);
const struct metrics *fs);
-void populate_extremes (struct tab_table *t, int col, int row, int n,
+void populate_extremes (struct tab_table *t, int col, int row, int n,
const struct metrics *m);
void populate_summary (struct tab_table *t, int col, int row,
const struct metrics *m);
void populate_summary (struct tab_table *t, int col, int row,
@@
-632,84
+634,106
@@
void populate_summary (struct tab_table *t, int col, int row,
-static bool bad_weight_warn = true;
-
-
/* Perform calculations for the sub factors */
void
/* Perform calculations for the sub factors */
void
-factor_calc (struct ccase *c, int case_no, double weight, int case_missing)
+factor_calc (const struct ccase *c, int case_no, double weight,
+ int case_missing)
{
size_t v;
struct factor *fctr = factors;
{
size_t v;
struct factor *fctr = factors;
- while ( fctr)
+ while ( fctr)
{
struct factor_statistics **foo ;
{
struct factor_statistics **foo ;
- union value indep_vals[2] ;
+ union value
*
indep_vals[2] ;
- indep_vals[0] = * case_data (c, fctr->indep_var[0]->fv);
+ indep_vals[0] = value_dup (
+ case_data (c, fctr->indep_var[0]),
+ var_get_width (fctr->indep_var[0])
+ );
- if ( fctr->indep_var[1] )
- indep_vals[1] = * case_data (c, fctr->indep_var[1]->fv);
+ if ( fctr->indep_var[1] )
+ indep_vals[1] = value_dup (
+ case_data (c, fctr->indep_var[1]),
+ var_get_width (fctr->indep_var[1])
+ );
else
else
- indep_vals[1].f = SYSMIS;
+ {
+ const union value sm = {SYSMIS};
+ indep_vals[1] = value_dup (&sm, 0);
+ }
assert (fctr->fstats);
assert (fctr->fstats);
- foo = ( struct factor_statistics ** )
+ foo = ( struct factor_statistics ** )
hsh_probe (fctr->fstats, (void *) &indep_vals);
hsh_probe (fctr->fstats, (void *) &indep_vals);
- if ( !*foo )
+ if ( !*foo )
{
{
- *foo = create_factor_statistics (n_dependent_vars,
-
&
indep_vals[0],
-
&
indep_vals[1]);
+ *foo = create_factor_statistics (n_dependent_vars,
+ indep_vals[0],
+ indep_vals[1]);
- for ( v = 0 ; v < n_dependent_vars ; ++v )
+ for ( v = 0 ; v < n_dependent_vars ; ++v )
{
metrics_precalc ( & (*foo)->m[v] );
}
}
{
metrics_precalc ( & (*foo)->m[v] );
}
}
+ else
+ {
+ free (indep_vals[0]);
+ free (indep_vals[1]);
+ }
- for ( v = 0 ; v < n_dependent_vars ; ++v )
+ for ( v = 0 ; v < n_dependent_vars ; ++v )
{
const struct variable *var = dependent_vars[v];
{
const struct variable *var = dependent_vars[v];
- const union value *val = case_data (c, var->fv);
+ union value *val = value_dup (
+ case_data (c, var),
+ var_get_width (var)
+ );
+
+ if (case_missing || var_is_value_missing (var, val, exclude_values))
+ {
+ free (val);
+ continue;
+ }
- if ( value_is_missing (&var->miss, val) || case_missing )
- val = 0;
-
metrics_calc ( & (*foo)->m[v], val, weight, case_no);
metrics_calc ( & (*foo)->m[v], val, weight, case_no);
-
+
+ free (val);
}
fctr = fctr->next;
}
}
fctr = fctr->next;
}
-
-
}
}
-static
bool
-run_examine (
const struct ccase *first, const struct casefile *cf,
-
void *cmd_, const
struct dataset *ds)
+static
void
+run_examine (
struct cmd_examine *cmd, struct casereader *input,
+
struct dataset *ds)
{
struct dictionary *dict = dataset_dict (ds);
{
struct dictionary *dict = dataset_dict (ds);
-
struct casereader *r
;
+
casenumber case_no
;
struct ccase c;
int v;
struct ccase c;
int v;
-
- const struct cmd_examine *cmd = (struct cmd_examine *) cmd_;
+ bool ok;
struct factor *fctr;
struct factor *fctr;
- output_split_file_values (ds, first);
+ if (!casereader_peek (input, 0, &c))
+ return;
+ output_split_file_values (ds, &c);
+ case_destroy (&c);
+
+ input = casereader_create_filter_weight (input, dict, NULL, NULL);
+ input = casereader_create_counter (input, &case_no, 0);
- /* Make sure we haven't got rubbish left over from a
- previous split */
+ /* Make sure we haven't got rubbish left over from a
+ previous split
.
*/
fctr = factors;
fctr = factors;
- while (fctr)
+ while (fctr)
{
struct factor *next = fctr->next;
{
struct factor *next = fctr->next;
@@
-720,53
+744,59
@@
run_examine (const struct ccase *first, const struct casefile *cf,
fctr = next;
}
fctr = next;
}
- for ( v = 0 ; v < n_dependent_vars ; ++v )
+ for ( v = 0 ; v < n_dependent_vars ; ++v )
metrics_precalc (&totals[v]);
metrics_precalc (&totals[v]);
- for (r = casefile_get_reader (cf, NULL);
- casereader_read (r, &c) ;
- case_destroy (&c) )
+ for (; casereader_read (input, &c); case_destroy (&c))
{
{
- int case_missing
=
0;
- const
int case_no = casereader_cnum (r
);
+ int case_missing
=
0;
+ const
double weight = dict_get_case_weight (dict, &c, NULL
);
- const double weight =
- dict_get_case_weight (dict, &c, &bad_weight_warn);
-
- if ( cmd->miss == XMN_LISTWISE )
+ if ( cmd->miss == XMN_LISTWISE )
{
{
- for ( v = 0 ; v < n_dependent_vars ; ++v )
+ for ( v = 0 ; v < n_dependent_vars ; ++v )
{
const struct variable *var = dependent_vars[v];
{
const struct variable *var = dependent_vars[v];
- const union value *val = case_data (&c, var->fv);
+ union value *val = value_dup (
+ case_data (&c, var),
+ var_get_width (var)
+ );
- if ( va
lue_is_missing (&var->miss, val
))
+ if ( va
r_is_value_missing (var, val, exclude_values
))
case_missing = 1;
case_missing = 1;
-
+
+ free (val);
}
}
}
}
- for ( v = 0 ; v < n_dependent_vars ; ++v )
+ for ( v = 0 ; v < n_dependent_vars ; ++v )
{
const struct variable *var = dependent_vars[v];
{
const struct variable *var = dependent_vars[v];
- const union value *val = case_data (&c, var->fv);
+ union value *val = value_dup (
+ case_data (&c, var),
+ var_get_width (var)
+ );
- if ( value_is_missing (&var->miss, val) || case_missing )
- val = 0;
+ if ( var_is_value_missing (var, val, exclude_values)
+ || case_missing )
+ {
+ free (val) ;
+ continue ;
+ }
metrics_calc (&totals[v], val, weight, case_no);
metrics_calc (&totals[v], val, weight, case_no);
-
+
+ free (val);
}
factor_calc (&c, case_no, weight, case_missing);
}
factor_calc (&c, case_no, weight, case_missing);
-
}
}
-
+ ok = casereader_destroy (input);
for ( v = 0 ; v < n_dependent_vars ; ++v)
{
fctr = factors;
for ( v = 0 ; v < n_dependent_vars ; ++v)
{
fctr = factors;
- while ( fctr )
+ while ( fctr )
{
struct hsh_iterator hi;
struct factor_statistics *fs;
{
struct hsh_iterator hi;
struct factor_statistics *fs;
@@
-775,7
+805,7
@@
run_examine (const struct ccase *first, const struct casefile *cf,
fs != 0 ;
fs = hsh_next (fctr->fstats, &hi))
{
fs != 0 ;
fs = hsh_next (fctr->fstats, &hi))
{
-
+
fs->m[v].ptile_hash = list_to_ptile_hash (&percentile_list);
fs->m[v].ptile_alg = percentile_algorithm;
metrics_postcalc (&fs->m[v]);
fs->m[v].ptile_hash = list_to_ptile_hash (&percentile_list);
fs->m[v].ptile_alg = percentile_algorithm;
metrics_postcalc (&fs->m[v]);
@@
-793,7
+823,7
@@
run_examine (const struct ccase *first, const struct casefile *cf,
/* Make sure that the combination of factors are complete */
fctr = factors;
/* Make sure that the combination of factors are complete */
fctr = factors;
- while ( fctr )
+ while ( fctr )
{
struct hsh_iterator hi;
struct hsh_iterator hi0;
{
struct hsh_iterator hi;
struct hsh_iterator hi0;
@@
-804,7
+834,7
@@
run_examine (const struct ccase *first, const struct casefile *cf,
struct hsh_table *idh1=0;
union value *val0;
union value *val1;
struct hsh_table *idh1=0;
union value *val0;
union value *val1;
-
+
idh0 = hsh_create (4, (hsh_compare_func *) compare_values,
(hsh_hash_func *) hash_value,
0,0);
idh0 = hsh_create (4, (hsh_compare_func *) compare_values,
(hsh_hash_func *) hash_value,
0,0);
@@
-835,15
+865,15
@@
run_examine (const struct ccase *first, const struct casefile *cf,
union value key[2];
key[0] = *val0;
key[1] = *val1;
union value key[2];
key[0] = *val0;
key[1] = *val1;
-
- ffs = (struct factor_statistics **)
+
+ ffs = (struct factor_statistics **)
hsh_probe (fctr->fstats, (void *) &key );
if ( !*ffs ) {
size_t i;
(*ffs) = create_factor_statistics (n_dependent_vars,
&key[0], &key[1]);
hsh_probe (fctr->fstats, (void *) &key );
if ( !*ffs ) {
size_t i;
(*ffs) = create_factor_statistics (n_dependent_vars,
&key[0], &key[1]);
- for ( i = 0 ; i < n_dependent_vars ; ++i )
+ for ( i = 0 ; i < n_dependent_vars ; ++i )
metrics_precalc ( & (*ffs)->m[i]);
}
}
metrics_precalc ( & (*ffs)->m[i]);
}
}
@@
-857,24
+887,23
@@
run_examine (const struct ccase *first, const struct casefile *cf,
fctr = fctr->next;
}
fctr = fctr->next;
}
- output_examine ();
+ if (ok)
+ output_examine ();
- if ( totals )
+ if ( totals )
{
size_t i;
{
size_t i;
- for ( i = 0 ; i < n_dependent_vars ; ++i )
+ for ( i = 0 ; i < n_dependent_vars ; ++i )
{
metrics_destroy (&totals[i]);
}
}
{
metrics_destroy (&totals[i]);
}
}
-
- return true;
}
static void
}
static void
-show_summary (
struct variable **dependent_var, int n_dep_var,
+show_summary (
const struct variable **dependent_var, int n_dep_var,
const struct factor *fctr)
{
static const char *subtitle[]=
const struct factor *fctr)
{
static const char *subtitle[]=
@@
-916,16
+945,16
@@
show_summary (struct variable **dependent_var, int n_dep_var,
tab_headers (tbl, heading_columns, 0, heading_rows, 0);
tab_dim (tbl, tab_natural_dimensions);
tab_headers (tbl, heading_columns, 0, heading_rows, 0);
tab_dim (tbl, tab_natural_dimensions);
-
+
/* Outline the box */
/* Outline the box */
- tab_box (tbl,
+ tab_box (tbl,
TAL_2, TAL_2,
-1, -1,
0, 0,
n_cols - 1, n_rows - 1);
/* Vertical lines for the data only */
TAL_2, TAL_2,
-1, -1,
0, 0,
n_cols - 1, n_rows - 1);
/* Vertical lines for the data only */
- tab_box (tbl,
+ tab_box (tbl,
-1, -1,
-1, TAL_1,
heading_columns, 0,
-1, -1,
-1, TAL_1,
heading_columns, 0,
@@
-940,26
+969,26
@@
show_summary (struct variable **dependent_var, int n_dep_var,
tab_title (tbl, _ ("Case Processing Summary"));
tab_title (tbl, _ ("Case Processing Summary"));
-
- tab_joint_text (tbl, heading_columns, 0,
+
+ tab_joint_text (tbl, heading_columns, 0,
n_cols -1, 0,
TAB_CENTER | TAT_TITLE,
_ ("Cases"));
/* Remove lines ... */
n_cols -1, 0,
TAB_CENTER | TAT_TITLE,
_ ("Cases"));
/* Remove lines ... */
- tab_box (tbl,
+ tab_box (tbl,
-1, -1,
TAL_0, TAL_0,
heading_columns, 0,
n_cols - 1, 0);
-1, -1,
TAL_0, TAL_0,
heading_columns, 0,
n_cols - 1, 0);
- for ( i = 0 ; i < 3 ; ++i )
+ for ( i = 0 ; i < 3 ; ++i )
{
{
- tab_text (tbl, heading_columns + i*2 , 2, TAB_CENTER | TAT_TITLE,
+ tab_text (tbl, heading_columns + i*2 , 2, TAB_CENTER | TAT_TITLE,
_ ("N"));
_ ("N"));
- tab_text (tbl, heading_columns + i*2 + 1, 2, TAB_CENTER | TAT_TITLE,
+ tab_text (tbl, heading_columns + i*2 + 1, 2, TAB_CENTER | TAT_TITLE,
_ ("Percent"));
tab_joint_text (tbl, heading_columns + i*2 , 1,
_ ("Percent"));
tab_joint_text (tbl, heading_columns + i*2 , 1,
@@
-976,39
+1005,39
@@
show_summary (struct variable **dependent_var, int n_dep_var,
/* Titles for the independent variables */
/* Titles for the independent variables */
- if ( fctr )
+ if ( fctr )
{
{
- tab_text (tbl, 1, heading_rows - 1, TAB_CENTER | TAT_TITLE,
+ tab_text (tbl, 1, heading_rows - 1, TAB_CENTER | TAT_TITLE,
var_to_string (fctr->indep_var[0]));
var_to_string (fctr->indep_var[0]));
- if ( fctr->indep_var[1] )
+ if ( fctr->indep_var[1] )
{
{
- tab_text (tbl, 2, heading_rows - 1, TAB_CENTER | TAT_TITLE,
+ tab_text (tbl, 2, heading_rows - 1, TAB_CENTER | TAT_TITLE,
var_to_string (fctr->indep_var[1]));
}
var_to_string (fctr->indep_var[1]));
}
-
+
}
}
- for ( i = 0 ; i < n_dep_var ; ++i )
+ for ( i = 0 ; i < n_dep_var ; ++i )
{
int n_factors = 1;
{
int n_factors = 1;
- if ( fctr )
+ if ( fctr )
n_factors = hsh_count (fctr->fstats);
n_factors = hsh_count (fctr->fstats);
-
- if ( i > 0 )
+
+ if ( i > 0 )
tab_hline (tbl, TAL_1, 0, n_cols -1 , i * n_factors + heading_rows);
tab_hline (tbl, TAL_1, 0, n_cols -1 , i * n_factors + heading_rows);
-
- tab_text (tbl,
+
+ tab_text (tbl,
0, i * n_factors + heading_rows,
0, i * n_factors + heading_rows,
- TAB_LEFT | TAT_TITLE,
+ TAB_LEFT | TAT_TITLE,
var_to_string (dependent_var[i])
);
var_to_string (dependent_var[i])
);
- if ( !fctr )
- populate_summary (tbl, heading_columns,
+ if ( !fctr )
+ populate_summary (tbl, heading_columns,
(i * n_factors) + heading_rows,
&totals[i]);
(i * n_factors) + heading_rows,
&totals[i]);
@@
-1017,46
+1046,47
@@
show_summary (struct variable **dependent_var, int n_dep_var,
{
struct factor_statistics **fs = fctr->fs;
int count = 0 ;
{
struct factor_statistics **fs = fctr->fs;
int count = 0 ;
+ const union value *prev = NULL;
- while (*fs)
+ while (*fs)
{
{
- static union value prev;
-
- if ( 0 != compare_values (&prev, & (*fs)->id[0],
- fctr->indep_var[0]->width))
+ if ( !prev ||
+ 0 != compare_values (prev, (*fs)->id[0],
+ var_get_width (fctr->indep_var[0])))
{
{
- tab_text (tbl,
+ tab_text (tbl,
1,
1,
- (i * n_factors ) + count +
+ (i * n_factors ) + count +
heading_rows,
heading_rows,
- TAB_LEFT | TAT_TITLE,
- value_to_string (& (*fs)->id[0], fctr->indep_var[0])
+ TAB_LEFT | TAT_TITLE,
+ var_get_value_name (fctr->indep_var[0],
+ (*fs)->id[0])
);
);
- if (fctr->indep_var[1] && count > 0 )
- tab_hline (tbl, TAL_1, 1, n_cols - 1,
+ if (fctr->indep_var[1] && count > 0 )
+ tab_hline (tbl, TAL_1, 1, n_cols - 1,
(i * n_factors ) + count + heading_rows);
}
(i * n_factors ) + count + heading_rows);
}
-
+
prev = (*fs)->id[0];
prev = (*fs)->id[0];
- if ( fctr->indep_var[1])
- tab_text (tbl,
+ if ( fctr->indep_var[1])
+ tab_text (tbl,
2,
2,
- (i * n_factors ) + count +
+ (i * n_factors ) + count +
heading_rows,
heading_rows,
- TAB_LEFT | TAT_TITLE,
- va
lue_to_string (& (*fs)->id[1], fctr->indep_var
[1])
+ TAB_LEFT | TAT_TITLE,
+ va
r_get_value_name (fctr->indep_var[1], (*fs)->id
[1])
);
);
- populate_summary (tbl, heading_columns,
- (i * n_factors) + count
+ populate_summary (tbl, heading_columns,
+ (i * n_factors) + count
+ heading_rows,
& (*fs)->m[i]);
+ heading_rows,
& (*fs)->m[i]);
- count++ ;
+ count++ ;
fs++;
}
}
fs++;
}
}
@@
-1066,12
+1096,12
@@
show_summary (struct variable **dependent_var, int n_dep_var,
}
}
-void
+void
populate_summary (struct tab_table *t, int col, int row,
const struct metrics *m)
{
populate_summary (struct tab_table *t, int col, int row,
const struct metrics *m)
{
- const double total = m->n + m->n_missing ;
+ const double total = m->n + m->n_missing ;
tab_float (t, col + 0, row + 0, TAB_RIGHT, m->n, 8, 0);
tab_float (t, col + 2, row + 0, TAB_RIGHT, m->n_missing, 8, 0);
tab_float (t, col + 0, row + 0, TAB_RIGHT, m->n, 8, 0);
tab_float (t, col + 2, row + 0, TAB_RIGHT, m->n_missing, 8, 0);
@@
-1079,26
+1109,26
@@
populate_summary (struct tab_table *t, int col, int row,
if ( total > 0 ) {
if ( total > 0 ) {
- tab_text (t, col + 1, row + 0, TAB_RIGHT | TAT_PRINTF, "%2.0f%%",
+ tab_text (t, col + 1, row + 0, TAB_RIGHT | TAT_PRINTF, "%2.0f%%",
100.0 * m->n / total );
100.0 * m->n / total );
- tab_text (t, col + 3, row + 0, TAB_RIGHT | TAT_PRINTF, "%2.0f%%",
+ tab_text (t, col + 3, row + 0, TAB_RIGHT | TAT_PRINTF, "%2.0f%%",
100.0 * m->n_missing / total );
/* This seems a bit pointless !!! */
100.0 * m->n_missing / total );
/* This seems a bit pointless !!! */
- tab_text (t, col + 5, row + 0, TAB_RIGHT | TAT_PRINTF, "%2.0f%%",
+ tab_text (t, col + 5, row + 0, TAB_RIGHT | TAT_PRINTF, "%2.0f%%",
100.0 * total / total );
}
100.0 * total / total );
}
-}
+}
-static void
-show_extremes (
struct variable **dependent_var, int n_dep_var,
+static void
+show_extremes (
const struct variable **dependent_var, int n_dep_var,
const struct factor *fctr, int n_extremities)
{
int i;
const struct factor *fctr, int n_extremities)
{
int i;
@@
-1135,9
+1165,9
@@
show_extremes (struct variable **dependent_var, int n_dep_var,
tab_headers (tbl, heading_columns, 0, heading_rows, 0);
tab_dim (tbl, tab_natural_dimensions);
tab_headers (tbl, heading_columns, 0, heading_rows, 0);
tab_dim (tbl, tab_natural_dimensions);
-
+
/* Outline the box, No internal lines*/
/* Outline the box, No internal lines*/
- tab_box (tbl,
+ tab_box (tbl,
TAL_2, TAL_2,
-1, -1,
0, 0,
TAL_2, TAL_2,
-1, -1,
0, 0,
@@
-1150,35
+1180,35
@@
show_extremes (struct variable **dependent_var, int n_dep_var,
tab_vline (tbl, TAL_2, n_cols - 2, 0, n_rows -1);
tab_vline (tbl, TAL_1, n_cols - 1, 0, n_rows -1);
tab_vline (tbl, TAL_2, n_cols - 2, 0, n_rows -1);
tab_vline (tbl, TAL_1, n_cols - 1, 0, n_rows -1);
- if ( fctr )
+ if ( fctr )
{
{
- tab_text (tbl, 1, heading_rows - 1, TAB_CENTER | TAT_TITLE,
+ tab_text (tbl, 1, heading_rows - 1, TAB_CENTER | TAT_TITLE,
var_to_string (fctr->indep_var[0]));
var_to_string (fctr->indep_var[0]));
- if ( fctr->indep_var[1] )
- tab_text (tbl, 2, heading_rows - 1, TAB_CENTER | TAT_TITLE,
+ if ( fctr->indep_var[1] )
+ tab_text (tbl, 2, heading_rows - 1, TAB_CENTER | TAT_TITLE,
var_to_string (fctr->indep_var[1]));
}
tab_text (tbl, n_cols - 1, 0, TAB_CENTER | TAT_TITLE, _ ("Value"));
tab_text (tbl, n_cols - 2, 0, TAB_CENTER | TAT_TITLE, _ ("Case Number"));
var_to_string (fctr->indep_var[1]));
}
tab_text (tbl, n_cols - 1, 0, TAB_CENTER | TAT_TITLE, _ ("Value"));
tab_text (tbl, n_cols - 2, 0, TAB_CENTER | TAT_TITLE, _ ("Case Number"));
- for ( i = 0 ; i < n_dep_var ; ++i )
+ for ( i = 0 ; i < n_dep_var ; ++i )
{
{
- if ( i > 0 )
- tab_hline (tbl, TAL_1, 0, n_cols -1 ,
+ if ( i > 0 )
+ tab_hline (tbl, TAL_1, 0, n_cols -1 ,
i * 2 * n_extremities * n_factors + heading_rows);
i * 2 * n_extremities * n_factors + heading_rows);
-
+
tab_text (tbl, 0,
i * 2 * n_extremities * n_factors + heading_rows,
tab_text (tbl, 0,
i * 2 * n_extremities * n_factors + heading_rows,
- TAB_LEFT | TAT_TITLE,
+ TAB_LEFT | TAT_TITLE,
var_to_string (dependent_var[i])
);
var_to_string (dependent_var[i])
);
- if ( !fctr )
- populate_extremes (tbl, heading_columns - 2,
+ if ( !fctr )
+ populate_extremes (tbl, heading_columns - 2,
i * 2 * n_extremities * n_factors + heading_rows,
n_extremities, &totals[i]);
i * 2 * n_extremities * n_factors + heading_rows,
n_extremities, &totals[i]);
@@
-1186,45
+1216,45
@@
show_extremes (struct variable **dependent_var, int n_dep_var,
{
struct factor_statistics **fs = fctr->fs;
int count = 0 ;
{
struct factor_statistics **fs = fctr->fs;
int count = 0 ;
+ const union value *prev = NULL;
- while (*fs)
+ while (*fs)
{
{
- static union value prev ;
-
- const int row = heading_rows + ( 2 * n_extremities ) *
+ const int row = heading_rows + ( 2 * n_extremities ) *
( ( i * n_factors ) + count );
( ( i * n_factors ) + count );
- if (
0 != compare_values (&prev, & (*fs)->id[0],
-
fctr->indep_var[0]->width
))
+ if (
!prev || 0 != compare_values (prev, (*fs)->id[0],
+
var_get_width (fctr->indep_var[0])
))
{
{
-
- if ( count > 0 )
+
+ if ( count > 0 )
tab_hline (tbl, TAL_1, 1, n_cols - 1, row);
tab_hline (tbl, TAL_1, 1, n_cols - 1, row);
- tab_text (tbl,
+ tab_text (tbl,
1, row,
1, row,
- TAB_LEFT | TAT_TITLE,
- value_to_string (& (*fs)->id[0], fctr->indep_var[0])
+ TAB_LEFT | TAT_TITLE,
+ var_get_value_name (fctr->indep_var[0],
+ (*fs)->id[0])
);
}
prev = (*fs)->id[0];
);
}
prev = (*fs)->id[0];
- if (fctr->indep_var[1] && count > 0 )
+ if (fctr->indep_var[1] && count > 0 )
tab_hline (tbl, TAL_1, 2, n_cols - 1, row);
tab_hline (tbl, TAL_1, 2, n_cols - 1, row);
- if ( fctr->indep_var[1])
+ if ( fctr->indep_var[1])
tab_text (tbl, 2, row,
tab_text (tbl, 2, row,
- TAB_LEFT | TAT_TITLE,
- va
lue_to_string (& (*fs)->id[1], fctr->indep_var
[1])
+ TAB_LEFT | TAT_TITLE,
+ va
r_get_value_name (fctr->indep_var[1], (*fs)->id
[1])
);
);
- populate_extremes (tbl, heading_columns - 2,
+ populate_extremes (tbl, heading_columns - 2,
row, n_extremities,
& (*fs)->m[i]);
row, n_extremities,
& (*fs)->m[i]);
- count++ ;
+ count++ ;
fs++;
}
}
fs++;
}
}
@@
-1236,8
+1266,8
@@
show_extremes (struct variable **dependent_var, int n_dep_var,
/* Fill in the extremities table */
/* Fill in the extremities table */
-void
-populate_extremes (struct tab_table *t,
+void
+populate_extremes (struct tab_table *t,
int col, int row, int n, const struct metrics *m)
{
int extremity;
int col, int row, int n, const struct metrics *m)
{
int extremity;
@@
-1256,8
+1286,8
@@
populate_extremes (struct tab_table *t,
tab_hline (t, TAL_1, col, col + 3, row + n );
tab_hline (t, TAL_1, col, col + 3, row + n );
-
- for (extremity = 0; extremity < n ; ++extremity )
+
+ for (extremity = 0; extremity < n ; ++extremity )
{
/* Highest */
tab_float (t, col + 1, row + extremity,
{
/* Highest */
tab_float (t, col + 1, row + extremity,
@@
-1274,16
+1304,16
@@
populate_extremes (struct tab_table *t,
/* Lowest */
/* Lowest */
- for (idx = 0, extremity = 0; extremity < n && idx < m->n_data ; ++idx )
+ for (idx = 0, extremity = 0; extremity < n && idx < m->n_data ; ++idx )
{
int j;
const struct weighted_value *wv = m->wvp[idx];
struct case_node *cn = wv->case_nos;
{
int j;
const struct weighted_value *wv = m->wvp[idx];
struct case_node *cn = wv->case_nos;
-
+
for (j = 0 ; j < wv->w ; ++j )
{
for (j = 0 ; j < wv->w ; ++j )
{
- if ( extremity + j >= n )
+ if ( extremity + j >= n )
break ;
tab_float (t, col + 3, row + extremity + j + n,
break ;
tab_float (t, col + 3, row + extremity + j + n,
@@
-1294,7
+1324,7
@@
populate_extremes (struct tab_table *t,
TAB_RIGHT,
cn->num, 8, 0);
TAB_RIGHT,
cn->num, 8, 0);
- if ( cn->next )
+ if ( cn->next )
cn = cn->next;
}
cn = cn->next;
}
@@
-1304,7
+1334,7
@@
populate_extremes (struct tab_table *t,
/* Highest */
/* Highest */
- for (idx = m->n_data - 1, extremity = 0; extremity < n && idx >= 0; --idx )
+ for (idx = m->n_data - 1, extremity = 0; extremity < n && idx >= 0; --idx )
{
int j;
const struct weighted_value *wv = m->wvp[idx];
{
int j;
const struct weighted_value *wv = m->wvp[idx];
@@
-1312,7
+1342,7
@@
populate_extremes (struct tab_table *t,
for (j = 0 ; j < wv->w ; ++j )
{
for (j = 0 ; j < wv->w ; ++j )
{
- if ( extremity + j >= n )
+ if ( extremity + j >= n )
break ;
tab_float (t, col + 3, row + extremity + j,
break ;
tab_float (t, col + 3, row + extremity + j,
@@
-1323,7
+1353,7
@@
populate_extremes (struct tab_table *t,
TAB_RIGHT,
cn->num, 8, 0);
TAB_RIGHT,
cn->num, 8, 0);
- if ( cn->next )
+ if ( cn->next )
cn = cn->next;
}
cn = cn->next;
}
@@
-1335,8
+1365,8
@@
populate_extremes (struct tab_table *t,
/* Show the descriptives table */
void
/* Show the descriptives table */
void
-show_descriptives (
struct variable **dependent_var,
- int n_dep_var,
+show_descriptives (
const struct variable **dependent_var,
+ int n_dep_var,
struct factor *fctr)
{
int i;
struct factor *fctr)
{
int i;
@@
-1379,7
+1409,7
@@
show_descriptives (struct variable **dependent_var,
tab_dim (tbl, tab_natural_dimensions);
/* Outline the box and have no internal lines*/
tab_dim (tbl, tab_natural_dimensions);
/* Outline the box and have no internal lines*/
- tab_box (tbl,
+ tab_box (tbl,
TAL_2, TAL_2,
-1, -1,
0, 0,
TAL_2, TAL_2,
-1, -1,
0, 0,
@@
-1397,7
+1427,7
@@
show_descriptives (struct variable **dependent_var,
tab_title (tbl, _ ("Descriptives"));
tab_title (tbl, _ ("Descriptives"));
- for ( i = 0 ; i < n_dep_var ; ++i )
+ for ( i = 0 ; i < n_dep_var ; ++i )
{
const int row = heading_rows + i * n_stat_rows * n_factors ;
{
const int row = heading_rows + i * n_stat_rows * n_factors ;
@@
-1406,71
+1436,71
@@
show_descriptives (struct variable **dependent_var,
tab_text (tbl, 0,
i * n_stat_rows * n_factors + heading_rows,
tab_text (tbl, 0,
i * n_stat_rows * n_factors + heading_rows,
- TAB_LEFT | TAT_TITLE,
+ TAB_LEFT | TAT_TITLE,
var_to_string (dependent_var[i])
);
if ( fctr )
{
var_to_string (dependent_var[i])
);
if ( fctr )
{
+ const union value *prev = NULL;
+
struct factor_statistics **fs = fctr->fs;
int count = 0;
struct factor_statistics **fs = fctr->fs;
int count = 0;
- tab_text (tbl, 1, heading_rows - 1, TAB_CENTER | TAT_TITLE,
+ tab_text (tbl, 1, heading_rows - 1, TAB_CENTER | TAT_TITLE,
var_to_string (fctr->indep_var[0]));
if ( fctr->indep_var[1])
var_to_string (fctr->indep_var[0]));
if ( fctr->indep_var[1])
- tab_text (tbl, 2, heading_rows - 1, TAB_CENTER | TAT_TITLE,
+ tab_text (tbl, 2, heading_rows - 1, TAB_CENTER | TAT_TITLE,
var_to_string (fctr->indep_var[1]));
var_to_string (fctr->indep_var[1]));
- while ( *fs )
+ while ( *fs )
{
{
-
- static union value prev ;
-
- const int row = heading_rows + n_stat_rows *
+ const int row = heading_rows + n_stat_rows *
( ( i * n_factors ) + count );
( ( i * n_factors ) + count );
- if (
0 != compare_values (&prev, & (*fs)->id[0],
-
fctr->indep_var[0]->width
))
+ if (
!prev || 0 != compare_values (prev, (*fs)->id[0],
+
var_get_width (fctr->indep_var[0])
))
{
{
-
- if ( count > 0 )
+
+ if ( count > 0 )
tab_hline (tbl, TAL_1, 1, n_cols - 1, row);
tab_hline (tbl, TAL_1, 1, n_cols - 1, row);
- tab_text (tbl,
+ tab_text (tbl,
1, row,
1, row,
- TAB_LEFT | TAT_TITLE,
- value_to_string (& (*fs)->id[0], fctr->indep_var[0])
+ TAB_LEFT | TAT_TITLE,
+ var_get_value_name (fctr->indep_var[0],
+ (*fs)->id[0])
);
}
prev = (*fs)->id[0];
);
}
prev = (*fs)->id[0];
- if (fctr->indep_var[1] && count > 0 )
+ if (fctr->indep_var[1] && count > 0 )
tab_hline (tbl, TAL_1, 2, n_cols - 1, row);
tab_hline (tbl, TAL_1, 2, n_cols - 1, row);
- if ( fctr->indep_var[1])
+ if ( fctr->indep_var[1])
tab_text (tbl, 2, row,
tab_text (tbl, 2, row,
- TAB_LEFT | TAT_TITLE,
- va
lue_to_string (& (*fs)->id[1], fctr->indep_var
[1])
+ TAB_LEFT | TAT_TITLE,
+ va
r_get_value_name (fctr->indep_var[1], (*fs)->id
[1])
);
);
- populate_descriptives (tbl, heading_columns - 2,
+ populate_descriptives (tbl, heading_columns - 2,
row, & (*fs)->m[i]);
row, & (*fs)->m[i]);
- count++ ;
+ count++ ;
fs++;
}
}
fs++;
}
}
- else
+ else
{
{
-
- populate_descriptives (tbl, heading_columns - 2,
+
+ populate_descriptives (tbl, heading_columns - 2,
i * n_stat_rows * n_factors + heading_rows,
&totals[i]);
}
i * n_stat_rows * n_factors + heading_rows,
&totals[i]);
}
@@
-1481,19
+1511,15
@@
show_descriptives (struct variable **dependent_var,
}
}
-
-
/* Fill in the descriptives data */
void
/* Fill in the descriptives data */
void
-populate_descriptives (struct tab_table *tbl, int col, int row,
+populate_descriptives (struct tab_table *tbl, int col, int row,
const struct metrics *m)
{
const struct metrics *m)
{
-
- const double t = gsl_cdf_tdist_Qinv (1 - cmd.n_cinterval[0]/100.0/2.0, \
+ const double t = gsl_cdf_tdist_Qinv ((1 - cmd.n_cinterval[0] / 100.0)/2.0,
m->n -1);
m->n -1);
-
- tab_text (tbl, col,
+ tab_text (tbl, col,
row,
TAB_LEFT | TAT_TITLE,
_ ("Mean"));
row,
TAB_LEFT | TAT_TITLE,
_ ("Mean"));
@@
-1503,21
+1529,21
@@
populate_descriptives (struct tab_table *tbl, int col, int row,
TAB_CENTER,
m->mean,
8,2);
TAB_CENTER,
m->mean,
8,2);
-
+
tab_float (tbl, col + 3,
row,
TAB_CENTER,
m->se_mean,
8,3);
tab_float (tbl, col + 3,
row,
TAB_CENTER,
m->se_mean,
8,3);
-
- tab_text (tbl, col,
+
+ tab_text (tbl, col,
row + 1,
TAB_LEFT | TAT_TITLE | TAT_PRINTF,
_ ("%g%% Confidence Interval for Mean"), cmd.n_cinterval[0]);
row + 1,
TAB_LEFT | TAT_TITLE | TAT_PRINTF,
_ ("%g%% Confidence Interval for Mean"), cmd.n_cinterval[0]);
- tab_text (tbl, col + 1,
+ tab_text (tbl, col + 1,
row + 1,
TAB_LEFT | TAT_TITLE,
_ ("Lower Bound"));
row + 1,
TAB_LEFT | TAT_TITLE,
_ ("Lower Bound"));
@@
-1525,10
+1551,10
@@
populate_descriptives (struct tab_table *tbl, int col, int row,
tab_float (tbl, col + 2,
row + 1,
TAB_CENTER,
tab_float (tbl, col + 2,
row + 1,
TAB_CENTER,
- m->mean - t * m->se_mean,
+ m->mean - t * m->se_mean,
8,3);
8,3);
- tab_text (tbl, col + 1,
+ tab_text (tbl, col + 1,
row + 2,
TAB_LEFT | TAT_TITLE,
_ ("Upper Bound"));
row + 2,
TAB_LEFT | TAT_TITLE,
_ ("Upper Bound"));
@@
-1537,21
+1563,21
@@
populate_descriptives (struct tab_table *tbl, int col, int row,
tab_float (tbl, col + 2,
row + 2,
TAB_CENTER,
tab_float (tbl, col + 2,
row + 2,
TAB_CENTER,
- m->mean + t * m->se_mean,
+ m->mean + t * m->se_mean,
8,3);
8,3);
- tab_text (tbl, col,
+ tab_text (tbl, col,
row + 3,
TAB_LEFT | TAT_TITLE | TAT_PRINTF,
_ ("5%% Trimmed Mean"));
row + 3,
TAB_LEFT | TAT_TITLE | TAT_PRINTF,
_ ("5%% Trimmed Mean"));
- tab_float (tbl, col + 2,
+ tab_float (tbl, col + 2,
row + 3,
TAB_CENTER,
m->trimmed_mean,
8,2);
row + 3,
TAB_CENTER,
m->trimmed_mean,
8,2);
- tab_text (tbl, col,
+ tab_text (tbl, col,
row + 4,
TAB_LEFT | TAT_TITLE,
_ ("Median"));
row + 4,
TAB_LEFT | TAT_TITLE,
_ ("Median"));
@@
-1559,21
+1585,21
@@
populate_descriptives (struct tab_table *tbl, int col, int row,
{
struct percentile *p;
double d = 50;
{
struct percentile *p;
double d = 50;
-
+
p = hsh_find (m->ptile_hash, &d);
p = hsh_find (m->ptile_hash, &d);
-
+
assert (p);
assert (p);
- tab_float (tbl, col + 2,
+ tab_float (tbl, col + 2,
row + 4,
TAB_CENTER,
p->v,
8, 2);
}
row + 4,
TAB_CENTER,
p->v,
8, 2);
}
-
- tab_text (tbl, col,
+
+ tab_text (tbl, col,
row + 5,
TAB_LEFT | TAT_TITLE,
_ ("Variance"));
row + 5,
TAB_LEFT | TAT_TITLE,
_ ("Variance"));
@@
-1585,7
+1611,7
@@
populate_descriptives (struct tab_table *tbl, int col, int row,
8,3);
8,3);
- tab_text (tbl, col,
+ tab_text (tbl, col,
row + 6,
TAB_LEFT | TAT_TITLE,
_ ("Std. Deviation"));
row + 6,
TAB_LEFT | TAT_TITLE,
_ ("Std. Deviation"));
@@
-1597,8
+1623,8
@@
populate_descriptives (struct tab_table *tbl, int col, int row,
m->stddev,
8,3);
m->stddev,
8,3);
-
- tab_text (tbl, col,
+
+ tab_text (tbl, col,
row + 7,
TAB_LEFT | TAT_TITLE,
_ ("Minimum"));
row + 7,
TAB_LEFT | TAT_TITLE,
_ ("Minimum"));
@@
-1609,7
+1635,7
@@
populate_descriptives (struct tab_table *tbl, int col, int row,
m->min,
8,3);
m->min,
8,3);
- tab_text (tbl, col,
+ tab_text (tbl, col,
row + 8,
TAB_LEFT | TAT_TITLE,
_ ("Maximum"));
row + 8,
TAB_LEFT | TAT_TITLE,
_ ("Maximum"));
@@
-1621,7
+1647,7
@@
populate_descriptives (struct tab_table *tbl, int col, int row,
8,3);
8,3);
- tab_text (tbl, col,
+ tab_text (tbl, col,
row + 9,
TAB_LEFT | TAT_TITLE,
_ ("Range"));
row + 9,
TAB_LEFT | TAT_TITLE,
_ ("Range"));
@@
-1633,7
+1659,7
@@
populate_descriptives (struct tab_table *tbl, int col, int row,
m->max - m->min,
8,3);
m->max - m->min,
8,3);
- tab_text (tbl, col,
+ tab_text (tbl, col,
row + 10,
TAB_LEFT | TAT_TITLE,
_ ("Interquartile Range"));
row + 10,
TAB_LEFT | TAT_TITLE,
_ ("Interquartile Range"));
@@
-1651,7
+1677,7
@@
populate_descriptives (struct tab_table *tbl, int col, int row,
assert (p1);
assert (p2);
assert (p1);
assert (p2);
- tab_float (tbl, col + 2,
+ tab_float (tbl, col + 2,
row + 10,
TAB_CENTER,
p1->v - p2->v,
row + 10,
TAB_CENTER,
p1->v - p2->v,
@@
-1660,7
+1686,7
@@
populate_descriptives (struct tab_table *tbl, int col, int row,
- tab_text (tbl, col,
+ tab_text (tbl, col,
row + 11,
TAB_LEFT | TAT_TITLE,
_ ("Skewness"));
row + 11,
TAB_LEFT | TAT_TITLE,
_ ("Skewness"));
@@
-1680,7
+1706,7
@@
populate_descriptives (struct tab_table *tbl, int col, int row,
8,3);
8,3);
- tab_text (tbl, col,
+ tab_text (tbl, col,
row + 12,
TAB_LEFT | TAT_TITLE,
_ ("Kurtosis"));
row + 12,
TAB_LEFT | TAT_TITLE,
_ ("Kurtosis"));
@@
-1705,21
+1731,21
@@
populate_descriptives (struct tab_table *tbl, int col, int row,
void
void
-box_plot_variables (const struct factor *fctr,
- const struct variable **vars, int n_vars,
+box_plot_variables (const struct factor *fctr,
+ const struct variable **vars, int n_vars,
const struct variable *id)
{
int i;
struct factor_statistics **fs ;
const struct variable *id)
{
int i;
struct factor_statistics **fs ;
- if ( ! fctr )
+ if ( ! fctr )
{
box_plot_group (fctr, vars, n_vars, id);
return;
}
{
box_plot_group (fctr, vars, n_vars, id);
return;
}
- for ( fs = fctr->fs ; *fs ; ++fs )
+ for ( fs = fctr->fs ; *fs ; ++fs )
{
double y_min = DBL_MAX;
double y_max = -DBL_MAX;
{
double y_min = DBL_MAX;
double y_max = -DBL_MAX;
@@
-1728,23
+1754,23
@@
box_plot_variables (const struct factor *fctr,
chart_write_title (ch, s);
chart_write_title (ch, s);
- for ( i = 0 ; i < n_vars ; ++i )
+ for ( i = 0 ; i < n_vars ; ++i )
{
y_max = MAX (y_max, (*fs)->m[i].max);
y_min = MIN (y_min, (*fs)->m[i].min);
}
{
y_max = MAX (y_max, (*fs)->m[i].max);
y_min = MIN (y_min, (*fs)->m[i].min);
}
-
+
boxplot_draw_yscale (ch, y_max, y_min);
boxplot_draw_yscale (ch, y_max, y_min);
-
- for ( i = 0 ; i < n_vars ; ++i )
+
+ for ( i = 0 ; i < n_vars ; ++i )
{
{
- const double box_width = (ch->data_right - ch->data_left)
+ const double box_width = (ch->data_right - ch->data_left)
/ (n_vars * 2.0 ) ;
/ (n_vars * 2.0 ) ;
- const double box_centre = ( i * 2 + 1) * box_width
+ const double box_centre = ( i * 2 + 1) * box_width
+ ch->data_left;
+ ch->data_left;
-
+
boxplot_draw_boxplot (ch,
box_centre, box_width,
& (*fs)->m[i],
boxplot_draw_boxplot (ch,
box_centre, box_width,
& (*fs)->m[i],
@@
-1764,15
+1790,15
@@
box_plot_variables (const struct factor *fctr,
each dependent variable has its own plot.
*/
void
each dependent variable has its own plot.
*/
void
-box_plot_group (const struct factor *fctr,
- const struct variable **vars,
+box_plot_group (const struct factor *fctr,
+ const struct variable **vars,
int n_vars,
const struct variable *id UNUSED)
{
int i;
int n_vars,
const struct variable *id UNUSED)
{
int i;
- for ( i = 0 ; i < n_vars ; ++i )
+ for ( i = 0 ; i < n_vars ; ++i )
{
struct factor_statistics **fs ;
struct chart *ch;
{
struct factor_statistics **fs ;
struct chart *ch;
@@
-1781,27
+1807,27
@@
box_plot_group (const struct factor *fctr,
boxplot_draw_yscale (ch, totals[i].max, totals[i].min);
boxplot_draw_yscale (ch, totals[i].max, totals[i].min);
- if ( fctr )
+ if ( fctr )
{
int n_factors = 0;
int f=0;
{
int n_factors = 0;
int f=0;
- for ( fs = fctr->fs ; *fs ; ++fs )
+ for ( fs = fctr->fs ; *fs ; ++fs )
++n_factors;
++n_factors;
- chart_write_title (ch, _ ("Boxplot of %s vs. %s"),
+ chart_write_title (ch, _ ("Boxplot of %s vs. %s"),
var_to_string (vars[i]), var_to_string (fctr->indep_var[0]) );
var_to_string (vars[i]), var_to_string (fctr->indep_var[0]) );
- for ( fs = fctr->fs ; *fs ; ++fs )
+ for ( fs = fctr->fs ; *fs ; ++fs )
{
{
-
+
const char *s = factor_to_string_concise (fctr, *fs);
const char *s = factor_to_string_concise (fctr, *fs);
- const double box_width = (ch->data_right - ch->data_left)
+ const double box_width = (ch->data_right - ch->data_left)
/ (n_factors * 2.0 ) ;
/ (n_factors * 2.0 ) ;
- const double box_centre = ( f++ * 2 + 1) * box_width
+ const double box_centre = ( f++ * 2 + 1) * box_width
+ ch->data_left;
+ ch->data_left;
-
+
boxplot_draw_boxplot (ch,
box_centre, box_width,
& (*fs)->m[i],
boxplot_draw_boxplot (ch,
box_centre, box_width,
& (*fs)->m[i],
@@
-1816,10
+1842,10
@@
box_plot_group (const struct factor *fctr,
chart_write_title (ch, _ ("Boxplot"));
boxplot_draw_boxplot (ch,
chart_write_title (ch, _ ("Boxplot"));
boxplot_draw_boxplot (ch,
- box_centre, box_width,
+ box_centre, box_width,
&totals[i],
var_to_string (vars[i]) );
&totals[i],
var_to_string (vars[i]) );
-
+
}
chart_submit (ch);
}
chart_submit (ch);
@@
-1846,13
+1872,13
@@
np_plot (const struct metrics *m, const char *factorname)
const double intercept = - m->mean / m->stddev;
/* Cowardly refuse to plot an empty data set */
const double intercept = - m->mean / m->stddev;
/* Cowardly refuse to plot an empty data set */
- if ( m->n_data == 0 )
- return ;
+ if ( m->n_data == 0 )
+ return ;
np_chart = chart_create ();
dnp_chart = chart_create ();
np_chart = chart_create ();
dnp_chart = chart_create ();
- if ( !np_chart || ! dnp_chart )
+ if ( !np_chart || ! dnp_chart )
return ;
chart_write_title (np_chart, _ ("Normal Q-Q Plot of %s"), factorname);
return ;
chart_write_title (np_chart, _ ("Normal Q-Q Plot of %s"), factorname);
@@
-1860,7
+1886,7
@@
np_plot (const struct metrics *m, const char *factorname)
chart_write_ylabel (np_chart, _ ("Expected Normal"));
chart_write_ylabel (np_chart, _ ("Expected Normal"));
- chart_write_title (dnp_chart, _ ("Detrended Normal Q-Q Plot of %s"),
+ chart_write_title (dnp_chart, _ ("Detrended Normal Q-Q Plot of %s"),
factorname);
chart_write_xlabel (dnp_chart, _ ("Observed Value"));
chart_write_ylabel (dnp_chart, _ ("Dev from Normal"));
factorname);
chart_write_xlabel (dnp_chart, _ ("Observed Value"));
chart_write_ylabel (dnp_chart, _ ("Dev from Normal"));
@@
-1885,25
+1911,25
@@
np_plot (const struct metrics *m, const char *factorname)
chart_write_yscale (np_chart, yfirst, ylast, 5);
{
chart_write_yscale (np_chart, yfirst, ylast, 5);
{
- /* We have to cache the detrended data, beacause we need to
+ /* We have to cache the detrended data, beacause we need to
find its limits before we can plot it */
double *d_data = xnmalloc (m->n_data, sizeof *d_data);
double d_max = -DBL_MAX;
double d_min = DBL_MAX;
find its limits before we can plot it */
double *d_data = xnmalloc (m->n_data, sizeof *d_data);
double d_max = -DBL_MAX;
double d_min = DBL_MAX;
- for ( i = 0 ; i < m->n_data; ++i )
+ for ( i = 0 ; i < m->n_data; ++i )
{
const double ns = gsl_cdf_ugaussian_Pinv (m->wvp[i]->rank / ( m->n + 1));
chart_datum (np_chart, 0, m->wvp[i]->v.f, ns);
d_data[i] = (m->wvp[i]->v.f - m->mean) / m->stddev - ns;
{
const double ns = gsl_cdf_ugaussian_Pinv (m->wvp[i]->rank / ( m->n + 1));
chart_datum (np_chart, 0, m->wvp[i]->v.f, ns);
d_data[i] = (m->wvp[i]->v.f - m->mean) / m->stddev - ns;
-
+
if ( d_data[i] < d_min ) d_min = d_data[i];
if ( d_data[i] > d_max ) d_max = d_data[i];
}
chart_write_yscale (dnp_chart, d_min, d_max, 5);
if ( d_data[i] < d_min ) d_min = d_data[i];
if ( d_data[i] > d_max ) d_max = d_data[i];
}
chart_write_yscale (dnp_chart, d_min, d_max, 5);
- for ( i = 0 ; i < m->n_data; ++i )
+ for ( i = 0 ; i < m->n_data; ++i )
chart_datum (dnp_chart, 0, m->wvp[i]->v.f, d_data[i]);
free (d_data);
chart_datum (dnp_chart, 0, m->wvp[i]->v.f, d_data[i]);
free (d_data);
@@
-1921,13
+1947,13
@@
np_plot (const struct metrics *m, const char *factorname)
/* Show the percentiles */
void
/* Show the percentiles */
void
-show_percentiles (
struct variable **dependent_var,
- int n_dep_var,
+show_percentiles (
const struct variable **dependent_var,
+ int n_dep_var,
struct factor *fctr)
{
struct tab_table *tbl;
int i;
struct factor *fctr)
{
struct tab_table *tbl;
int i;
-
+
int n_cols, n_rows;
int n_factors;
int n_cols, n_rows;
int n_factors;
@@
-1941,7
+1967,7
@@
show_percentiles (struct variable **dependent_var,
if ( fctr )
{
if ( fctr )
{
- struct factor_statistics **fs = fctr->fs ;
+ struct factor_statistics **fs = fctr->fs ;
n_heading_columns = 3;
n_factors = hsh_count (fctr->fstats);
n_heading_columns = 3;
n_factors = hsh_count (fctr->fstats);
@@
-1962,7
+1988,7
@@
show_percentiles (struct variable **dependent_var,
n_rows = n_heading_rows + n_dep_var * n_stat_rows * n_factors;
n_rows = n_heading_rows + n_dep_var * n_stat_rows * n_factors;
- n_cols = n_heading_columns + n_ptiles ;
+ n_cols = n_heading_columns + n_ptiles ;
tbl = tab_create (n_cols, n_rows, 0);
tbl = tab_create (n_cols, n_rows, 0);
@@
-1971,7
+1997,7
@@
show_percentiles (struct variable **dependent_var,
tab_dim (tbl, tab_natural_dimensions);
/* Outline the box and have no internal lines*/
tab_dim (tbl, tab_natural_dimensions);
/* Outline the box and have no internal lines*/
- tab_box (tbl,
+ tab_box (tbl,
TAL_2, TAL_2,
-1, -1,
0, 0,
TAL_2, TAL_2,
-1, -1,
0, 0,
@@
-1988,14
+2014,14
@@
show_percentiles (struct variable **dependent_var,
tab_hline (tbl, TAL_1, n_heading_columns, n_cols - 1, 1 );
tab_hline (tbl, TAL_1, n_heading_columns, n_cols - 1, 1 );
- tab_box (tbl,
+ tab_box (tbl,
-1, -1,
-1, TAL_1,
0, n_heading_rows,
n_heading_columns - 1, n_rows - 1);
-1, -1,
-1, TAL_1,
0, n_heading_rows,
n_heading_columns - 1, n_rows - 1);
- tab_box (tbl,
+ tab_box (tbl,
-1, -1,
-1, TAL_1,
n_heading_columns, n_heading_rows - 1,
-1, -1,
-1, TAL_1,
n_heading_columns, n_heading_rows - 1,
@@
-2013,18
+2039,18
@@
show_percentiles (struct variable **dependent_var,
struct percentile **p = (struct percentile **) hsh_sort (ptiles);
i = 0;
struct percentile **p = (struct percentile **) hsh_sort (ptiles);
i = 0;
- while ( (*p) )
+ while ( (*p) )
{
{
- tab_float (tbl, n_heading_columns + i++ , 1,
+ tab_float (tbl, n_heading_columns + i++ , 1,
TAB_CENTER,
(*p)->p, 8, 0);
TAB_CENTER,
(*p)->p, 8, 0);
-
+
p++;
}
}
p++;
}
}
- for ( i = 0 ; i < n_dep_var ; ++i )
+ for ( i = 0 ; i < n_dep_var ; ++i )
{
const int n_stat_rows = 2;
const int row = n_heading_rows + i * n_stat_rows * n_factors ;
{
const int n_stat_rows = 2;
const int row = n_heading_rows + i * n_stat_rows * n_factors ;
@@
-2034,44
+2060,43
@@
show_percentiles (struct variable **dependent_var,
tab_text (tbl, 0,
i * n_stat_rows * n_factors + n_heading_rows,
tab_text (tbl, 0,
i * n_stat_rows * n_factors + n_heading_rows,
- TAB_LEFT | TAT_TITLE,
+ TAB_LEFT | TAT_TITLE,
var_to_string (dependent_var[i])
);
if ( fctr )
{
var_to_string (dependent_var[i])
);
if ( fctr )
{
+ const union value *prev = NULL ;
struct factor_statistics **fs = fctr->fs;
int count = 0;
struct factor_statistics **fs = fctr->fs;
int count = 0;
- tab_text (tbl, 1, n_heading_rows - 1,
- TAB_CENTER | TAT_TITLE,
+ tab_text (tbl, 1, n_heading_rows - 1,
+ TAB_CENTER | TAT_TITLE,
var_to_string (fctr->indep_var[0]));
if ( fctr->indep_var[1])
var_to_string (fctr->indep_var[0]));
if ( fctr->indep_var[1])
- tab_text (tbl, 2, n_heading_rows - 1, TAB_CENTER | TAT_TITLE,
+ tab_text (tbl, 2, n_heading_rows - 1, TAB_CENTER | TAT_TITLE,
var_to_string (fctr->indep_var[1]));
var_to_string (fctr->indep_var[1]));
- while ( *fs )
+ while ( *fs )
{
{
-
- static union value prev ;
-
- const int row = n_heading_rows + n_stat_rows *
+ const int row = n_heading_rows + n_stat_rows *
( ( i * n_factors ) + count );
( ( i * n_factors ) + count );
- if (
0 != compare_values (&prev, & (*fs)->id[0],
-
fctr->indep_var[0]->width
))
+ if (
!prev || 0 != compare_values (prev, (*fs)->id[0],
+
var_get_width (fctr->indep_var[0])
))
{
{
-
- if ( count > 0 )
+
+ if ( count > 0 )
tab_hline (tbl, TAL_1, 1, n_cols - 1, row);
tab_hline (tbl, TAL_1, 1, n_cols - 1, row);
- tab_text (tbl,
+ tab_text (tbl,
1, row,
1, row,
- TAB_LEFT | TAT_TITLE,
- value_to_string (& (*fs)->id[0], fctr->indep_var[0])
+ TAB_LEFT | TAT_TITLE,
+ var_get_value_name (fctr->indep_var[0],
+ (*fs)->id[0])
);
);
@@
-2079,29
+2104,29
@@
show_percentiles (struct variable **dependent_var,
prev = (*fs)->id[0];
prev = (*fs)->id[0];
- if (fctr->indep_var[1] && count > 0 )
+ if (fctr->indep_var[1] && count > 0 )
tab_hline (tbl, TAL_1, 2, n_cols - 1, row);
tab_hline (tbl, TAL_1, 2, n_cols - 1, row);
- if ( fctr->indep_var[1])
+ if ( fctr->indep_var[1])
tab_text (tbl, 2, row,
tab_text (tbl, 2, row,
- TAB_LEFT | TAT_TITLE,
- va
lue_to_string (& (*fs)->id[1], fctr->indep_var
[1])
+ TAB_LEFT | TAT_TITLE,
+ va
r_get_value_name (fctr->indep_var[1], (*fs)->id
[1])
);
);
- populate_percentiles (tbl, n_heading_columns - 1,
+ populate_percentiles (tbl, n_heading_columns - 1,
row, & (*fs)->m[i]);
row, & (*fs)->m[i]);
- count++ ;
+ count++ ;
fs++;
}
}
fs++;
}
}
- else
+ else
{
{
- populate_percentiles (tbl, n_heading_columns - 1,
+ populate_percentiles (tbl, n_heading_columns - 1,
i * n_stat_rows * n_factors + n_heading_rows,
&totals[i]);
}
i * n_stat_rows * n_factors + n_heading_rows,
&totals[i]);
}
@@
-2119,44
+2144,44
@@
show_percentiles (struct variable **dependent_var,
void
void
-populate_percentiles (struct tab_table *tbl, int col, int row,
+populate_percentiles (struct tab_table *tbl, int col, int row,
const struct metrics *m)
{
int i;
struct percentile **p = (struct percentile **) hsh_sort (m->ptile_hash);
const struct metrics *m)
{
int i;
struct percentile **p = (struct percentile **) hsh_sort (m->ptile_hash);
-
- tab_text (tbl,
+
+ tab_text (tbl,
col, row + 1,
col, row + 1,
- TAB_LEFT | TAT_TITLE,
+ TAB_LEFT | TAT_TITLE,
_ ("Tukey\'s Hinges")
);
_ ("Tukey\'s Hinges")
);
- tab_text (tbl,
- col, row,
- TAB_LEFT | TAT_TITLE,
+ tab_text (tbl,
+ col, row,
+ TAB_LEFT | TAT_TITLE,
ptile_alg_desc[m->ptile_alg]
);
i = 0;
ptile_alg_desc[m->ptile_alg]
);
i = 0;
- while ( (*p) )
+ while ( (*p) )
{
{
- tab_float (tbl, col + i + 1 , row,
+ tab_float (tbl, col + i + 1 , row,
TAB_CENTER,
(*p)->v, 8, 2);
TAB_CENTER,
(*p)->v, 8, 2);
- if ( (*p)->p == 25 )
- tab_float (tbl, col + i + 1 , row + 1,
+ if ( (*p)->p == 25 )
+ tab_float (tbl, col + i + 1 , row + 1,
TAB_CENTER,
m->hinge[0], 8, 2);
TAB_CENTER,
m->hinge[0], 8, 2);
- if ( (*p)->p == 50 )
- tab_float (tbl, col + i + 1 , row + 1,
+ if ( (*p)->p == 50 )
+ tab_float (tbl, col + i + 1 , row + 1,
TAB_CENTER,
m->hinge[1], 8, 2);
TAB_CENTER,
m->hinge[1], 8, 2);
- if ( (*p)->p == 75 )
- tab_float (tbl, col + i + 1 , row + 1,
+ if ( (*p)->p == 75 )
+ tab_float (tbl, col + i + 1 , row + 1,
TAB_CENTER,
m->hinge[2], 8, 2);
TAB_CENTER,
m->hinge[2], 8, 2);
@@
-2171,9
+2196,9
@@
populate_percentiles (struct tab_table *tbl, int col, int row,
const char *
const char *
-factor_to_string (const struct factor *fctr,
- struct factor_statistics *fs,
- const struct variable *var)
+factor_to_string (const struct factor *fctr,
+
const
struct factor_statistics *fs,
+
const struct variable *var)
{
static char buf1[100];
{
static char buf1[100];
@@
-2184,24
+2209,23
@@
factor_to_string (const struct factor *fctr,
if (var)
sprintf (buf1, "%s (",var_to_string (var) );
if (var)
sprintf (buf1, "%s (",var_to_string (var) );
-
+
snprintf (buf2, 100, "%s = %s",
var_to_string (fctr->indep_var[0]),
snprintf (buf2, 100, "%s = %s",
var_to_string (fctr->indep_var[0]),
-
value_to_string (&fs->id[0],fctr->indep_var
[0]));
-
+
var_get_value_name (fctr->indep_var[0], fs->id
[0]));
+
strcat (buf1, buf2);
strcat (buf1, buf2);
-
- if ( fctr->indep_var[1] )
+
+ if ( fctr->indep_var[1] )
{
sprintf (buf2, "; %s = %s)",
var_to_string (fctr->indep_var[1]),
{
sprintf (buf2, "; %s = %s)",
var_to_string (fctr->indep_var[1]),
- value_to_string (&fs->id[1],
- fctr->indep_var[1]));
+ var_get_value_name (fctr->indep_var[1], fs->id[1]));
strcat (buf1, buf2);
}
else
{
strcat (buf1, buf2);
}
else
{
- if ( var )
+ if ( var )
strcat (buf1, ")");
}
strcat (buf1, ")");
}
@@
-2211,7
+2235,7
@@
factor_to_string (const struct factor *fctr,
const char *
const char *
-factor_to_string_concise (const struct factor *fctr,
+factor_to_string_concise (const struct factor *fctr,
struct factor_statistics *fs)
{
struct factor_statistics *fs)
{
@@
-2221,11
+2245,12
@@
factor_to_string_concise (const struct factor *fctr,
char buf2[100];
snprintf (buf, 100, "%s",
char buf2[100];
snprintf (buf, 100, "%s",
-
value_to_string (&fs->id[0], fctr->indep_var
[0]));
-
- if ( fctr->indep_var[1] )
+
var_get_value_name (fctr->indep_var[0], fs->id
[0]));
+
+ if ( fctr->indep_var[1] )
{
{
- sprintf (buf2, ",%s)", value_to_string (&fs->id[1], fctr->indep_var[1]) );
+ sprintf (buf2, ",%s)", var_get_value_name (fctr->indep_var[1],
+ fs->id[1]) );
strcat (buf, buf2);
}
strcat (buf, buf2);
}