X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flanguage%2Fstats%2Foneway.c;h=0fc6e1fcb27604447832d4d1080b10f363aa03a6;hb=refs%2Fbuilds%2F20131219033048%2Fpspp;hp=9d31b4201f20ca2c0d552a110e74c2d2ff69aad9;hpb=d3c2a76521cd79ae441da0f816a09fa6ce91f839;p=pspp diff --git a/src/language/stats/oneway.c b/src/language/stats/oneway.c index 9d31b4201f..0fc6e1fcb2 100644 --- a/src/language/stats/oneway.c +++ b/src/language/stats/oneway.c @@ -52,6 +52,7 @@ /* Workspace variable for each dependent variable */ struct per_var_ws { + struct interaction *iact; struct categoricals *cat; struct covariance *cov; struct levene *nl; @@ -702,15 +703,14 @@ run_oneway (const struct oneway_spec *cmd, 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.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, @@ -815,6 +815,7 @@ run_oneway (const struct oneway_spec *cmd, 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); @@ -828,7 +829,10 @@ run_oneway (const struct oneway_spec *cmd, 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); @@ -837,14 +841,13 @@ run_oneway (const struct oneway_spec *cmd, 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) @@ -874,7 +877,9 @@ run_oneway (const struct oneway_spec *cmd, 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); }