X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flanguage%2Fstats%2Fcorrelations.c;h=ebfea2583e71f7f11fc4ebe21bf9c42572c8a633;hb=c84078d8498785e9a52945cc63fb663cd48027af;hp=c76f5984abfcfe76ac6abff735dc6f3d064b0e42;hpb=41a628f070c7a0d2e9468308cb1bf4ff77de9900;p=pspp diff --git a/src/language/stats/correlations.c b/src/language/stats/correlations.c index c76f5984ab..ebfea2583e 100644 --- a/src/language/stats/correlations.c +++ b/src/language/stats/correlations.c @@ -149,7 +149,7 @@ output_descriptives (const struct corr *corr, const gsl_matrix *means, NOT_REACHED (); }; - tab_double (t, c, r + heading_rows, 0, x, NULL); + tab_double (t, c, r + heading_rows, 0, x, NULL, RC_OTHER); } } @@ -188,6 +188,7 @@ output_correlation (const struct corr *corr, const struct corr_opts *opts, nr += heading_rows; t = tab_create (nc, nr); + tab_set_format (t, RC_WEIGHT, wfmt); tab_title (t, _("Correlations")); tab_headers (t, heading_columns, 0, heading_rows, 0); @@ -210,6 +211,7 @@ output_correlation (const struct corr *corr, const struct corr_opts *opts, tab_vline (t, TAL_1, 1, heading_rows, nr - 1); + /* Row Headers */ for (r = 0 ; r < corr->n_vars1 ; ++r) { tab_text (t, 0, 1 + r * rows_per_variable, TAB_LEFT | TAT_TITLE, @@ -231,6 +233,7 @@ output_correlation (const struct corr *corr, const struct corr_opts *opts, tab_hline (t, TAL_1, 0, nc - 1, r * rows_per_variable + 1); } + /* Column Headers */ for (c = 0 ; c < matrix_cols ; ++c) { const struct variable *v = corr->n_vars_total > corr->n_vars1 ? @@ -245,22 +248,22 @@ output_correlation (const struct corr *corr, const struct corr_opts *opts, { unsigned char flags = 0; const int col_index = corr->n_vars_total > corr->n_vars1 ? - corr->n_vars_total - corr->n_vars1 - 1 + c : + corr->n_vars1 + c : c; double pearson = gsl_matrix_get (cm, r, col_index); double w = gsl_matrix_get (samples, r, col_index); double sig = opts->tails * significance_of_correlation (pearson, w); if ( opts->missing_type != CORR_LISTWISE ) - tab_double (t, c + heading_columns, row + rows_per_variable - 1, 0, w, wfmt); + tab_double (t, c + heading_columns, row + rows_per_variable - 1, 0, w, NULL, RC_WEIGHT); - if ( c != r) - tab_double (t, c + heading_columns, row + 1, 0, sig, NULL); + if ( col_index != r) + tab_double (t, c + heading_columns, row + 1, 0, sig, NULL, RC_PVALUE); - if ( opts->sig && c != r && sig < 0.05) + if ( opts->sig && col_index != r && sig < 0.05) flags = TAB_EMPH; - tab_double (t, c + heading_columns, row, flags, pearson, NULL); + tab_double (t, c + heading_columns, row, flags, pearson, NULL, RC_OTHER); if (opts->statistics & STATS_XPROD) { @@ -268,8 +271,8 @@ output_correlation (const struct corr *corr, const struct corr_opts *opts, const double xprod_dev = cov * w; cov *= w / (w - 1.0); - tab_double (t, c + heading_columns, row + 2, 0, xprod_dev, NULL); - tab_double (t, c + heading_columns, row + 3, 0, cov, NULL); + tab_double (t, c + heading_columns, row + 2, 0, xprod_dev, NULL, RC_OTHER); + tab_double (t, c + heading_columns, row + 3, 0, cov, NULL, RC_OTHER); } } } @@ -283,8 +286,8 @@ run_corr (struct casereader *r, const struct corr_opts *opts, const struct corr { struct ccase *c; const gsl_matrix *var_matrix, *samples_matrix, *mean_matrix; - gsl_matrix *cov_matrix; - gsl_matrix *corr_matrix; + gsl_matrix *cov_matrix = NULL; + gsl_matrix *corr_matrix = NULL; struct covariance *cov = covariance_2pass_create (corr->n_vars_total, corr->vars, NULL, opts->wv, opts->exclude); @@ -299,11 +302,15 @@ run_corr (struct casereader *r, const struct corr_opts *opts, const struct corr { covariance_accumulate_pass2 (cov, c); } - - cov_matrix = covariance_calculate (cov); - casereader_destroy (rc); - + + cov_matrix = covariance_calculate (cov); + if (! cov_matrix) + { + msg (SE, _("The data for the chosen variables are all missing or empty.")); + goto error; + } + samples_matrix = covariance_moments (cov, MOMENT_NONE); var_matrix = covariance_moments (cov, MOMENT_VARIANCE); mean_matrix = covariance_moments (cov, MOMENT_MEAN); @@ -316,6 +323,7 @@ run_corr (struct casereader *r, const struct corr_opts *opts, const struct corr output_correlation (corr, opts, corr_matrix, samples_matrix, cov_matrix); + error: covariance_destroy (cov); gsl_matrix_free (corr_matrix); gsl_matrix_free (cov_matrix); @@ -508,7 +516,8 @@ cmd_correlation (struct lexer *lexer, struct dataset *ds) return ok ? CMD_SUCCESS : CMD_CASCADING_FAILURE; error: - free (corr->vars); + if (corr) + free (corr->vars); free (corr); return CMD_FAILURE; }