/* PSPP - a program for statistical analysis.
- Copyright (C) 1997-9, 2000, 2007, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
+ Copyright (C) 1997-9, 2000, 2007, 2009, 2010, 2011, 2012, 2013 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
/* Workspace variable for each dependent variable */
struct per_var_ws
{
+ struct interaction *iact;
struct categoricals *cat;
struct covariance *cov;
struct levene *nl;
static void output_oneway (const struct oneway_spec *, struct oneway_workspace *ws);
static void run_oneway (const struct oneway_spec *cmd, struct casereader *input, const struct dataset *ds);
+
+static void
+destroy_coeff_list (struct contrasts_node *coeff_list)
+{
+ struct coeff_node *cn = NULL;
+ struct coeff_node *cnx = NULL;
+ struct ll_list *cl = &coeff_list->coefficient_list;
+
+ ll_for_each_safe (cn, cnx, struct coeff_node, ll, cl)
+ {
+ free (cn);
+ }
+
+ free (coeff_list);
+}
+
static void
oneway_cleanup (struct oneway_spec *cmd)
{
struct contrasts_node *coeff_next = NULL;
ll_for_each_safe (coeff_list, coeff_next, struct contrasts_node, ll, &cmd->contrast_list)
{
- struct coeff_node *cn = NULL;
- struct coeff_node *cnx = NULL;
- struct ll_list *cl = &coeff_list->coefficient_list;
-
- ll_for_each_safe (cn, cnx, struct coeff_node, ll, cl)
- {
- free (cn);
- }
-
- free (coeff_list);
+ destroy_coeff_list (coeff_list);
}
+
+ free (cmd->posthoc);
}
}
else
{
+ destroy_coeff_list (cl);
lex_error (lexer, NULL);
goto error;
}
return dd;
}
+static void
+killit (const void *aux1 UNUSED, void *aux2 UNUSED, void *user_data)
+{
+ struct descriptive_data *dd = user_data;
+
+ dd_destroy (dd);
+}
+
+
static void
updateit (const void *aux1, void *aux2, void *user_data,
const struct ccase *c, double weight)
for (v = 0; v < cmd->n_vars; ++v)
{
- struct interaction *inter = interaction_create (cmd->indep_var);
-
struct payload payload;
payload.create = makeit;
payload.update = updateit;
- payload.destroy = NULL;
+ payload.calculate = NULL;
+ payload.destroy = killit;
- ws.vws[v].cat = categoricals_create (&inter, 1, cmd->wv,
+ ws.vws[v].iact = interaction_create (cmd->indep_var);
+ ws.vws[v].cat = categoricals_create (&ws.vws[v].iact, 1, cmd->wv,
cmd->exclude, cmd->exclude);
categoricals_set_payload (ws.vws[v].cat, &payload,
for (v = 0; v < cmd->n_vars; ++v)
{
+ const gsl_matrix *ucm;
gsl_matrix *cm;
struct per_var_ws *pvw = &ws.vws[v];
const struct categoricals *cats = covariance_get_categoricals (pvw->cov);
- const bool ok = categoricals_done (cats);
+ const bool ok = categoricals_sane (cats);
if ( ! ok)
{
continue;
}
- cm = covariance_calculate_unnormalized (pvw->cov);
+ ucm = covariance_calculate_unnormalized (pvw->cov);
+
+ cm = gsl_matrix_alloc (ucm->size1, ucm->size2);
+ gsl_matrix_memcpy (cm, ucm);
moments1_calculate (ws.dd_total[v]->mom, &pvw->n, NULL, NULL, NULL, NULL);
reg_sweep (cm, 0);
pvw->sse = gsl_matrix_get (cm, 0, 0);
+ gsl_matrix_free (cm);
pvw->ssa = pvw->sst - pvw->sse;
pvw->n_groups = categoricals_n_total (cats);
pvw->mse = (pvw->sst - pvw->ssa) / (pvw->n - pvw->n_groups);
-
- gsl_matrix_free (cm);
}
for (v = 0; v < cmd->n_vars; ++v)
covariance_destroy (ws.vws[v].cov);
levene_destroy (ws.vws[v].nl);
dd_destroy (ws.dd_total[v]);
+ interaction_destroy (ws.vws[v].iact);
}
+
free (ws.vws);
free (ws.dd_total);
}
i, ll_count (cl), ws->actual_number_of_groups);
ll_remove (&coeff_list->ll);
+ destroy_coeff_list (coeff_list);
continue;
}
tab_vline (t, TAL_2, heading_cols, 0, n_rows - 1);
- tab_title (t, _("Multiple Comparisons"));
+ tab_title (t, _("Multiple Comparisons (%s)"), var_to_string (cmd->vars[v]));
tab_text_format (t, 1, 1, TAB_LEFT | TAT_TITLE, _("(I) %s"), var_to_string (cmd->indep_var));
tab_text_format (t, 2, 1, TAB_LEFT | TAT_TITLE, _("(J) %s"), var_to_string (cmd->indep_var));