From: John Darrington Date: Thu, 7 Jun 2012 19:20:22 +0000 (+0200) Subject: CORRELATIONS: Fixed bug displaying non-sqaure correlation matrices X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?p=pspp;a=commitdiff_plain;h=5f74f90119911893336f366f06744cd920c0010c CORRELATIONS: Fixed bug displaying non-sqaure correlation matrices When CORRELATIONS was run using the WITH keyword, the wrong index was calculated for the columns/rows - hence the program crashed. This change fixes that. Reported-by: Ebel Magnin --- diff --git a/src/language/stats/correlations.c b/src/language/stats/correlations.c index bc6508bd2f..b5495c7bb0 100644 --- a/src/language/stats/correlations.c +++ b/src/language/stats/correlations.c @@ -207,6 +207,7 @@ output_correlation (const struct corr *corr, const struct corr_opts *opts, nc - 1, nr - 1); tab_vline (t, TAL_2, heading_columns, 0, nr - 1); + tab_vline (t, TAL_1, 1, heading_rows, nr - 1); for (r = 0 ; r < corr->n_vars1 ; ++r) @@ -232,7 +233,8 @@ output_correlation (const struct corr *corr, const struct corr_opts *opts, for (c = 0 ; c < matrix_cols ; ++c) { - const struct variable *v = corr->n_vars_total > corr->n_vars1 ? corr->vars[corr->n_vars_total - corr->n_vars1 + c] : corr->vars[c]; + const struct variable *v = corr->n_vars_total > corr->n_vars1 ? + corr->vars[corr->n_vars_total - corr->n_vars1 - 1 + c] : corr->vars[c]; tab_text (t, heading_columns + c, 0, TAB_LEFT | TAT_TITLE, var_to_string (v)); } @@ -242,7 +244,9 @@ output_correlation (const struct corr *corr, const struct corr_opts *opts, for (c = 0 ; c < matrix_cols ; ++c) { unsigned char flags = 0; - const int col_index = corr->n_vars_total - corr->n_vars1 + c; + const int col_index = corr->n_vars_total > corr->n_vars1 ? + corr->n_vars_total - corr->n_vars1 - 1 + 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); @@ -309,10 +313,8 @@ run_corr (struct casereader *r, const struct corr_opts *opts, const struct corr if ( opts->statistics & STATS_DESCRIPTIVES) output_descriptives (corr, mean_matrix, var_matrix, samples_matrix); - output_correlation (corr, opts, - corr_matrix, - samples_matrix, - cov_matrix); + output_correlation (corr, opts, corr_matrix, + samples_matrix, cov_matrix); covariance_destroy (cov); gsl_matrix_free (corr_matrix); diff --git a/tests/language/stats/correlations.at b/tests/language/stats/correlations.at index f31d0593fd..599db3df28 100644 --- a/tests/language/stats/correlations.at +++ b/tests/language/stats/correlations.at @@ -116,3 +116,32 @@ AT_CHECK([pspp -O format=csv correlations1.sps], [0], [stdout]) mv stdout expout AT_CHECK([pspp -O format=csv correlations2.sps], [0], [expout]) AT_CLEANUP + + +AT_SETUP([CORRELATIONS -- non-square]) +AT_DATA([corr-ns.sps], [dnl +set format = F11.3. +data list notable list /foo * bar * wiz *. +begin data. +1 1 6 +2 2 5 +3 3 4 +4 4 3 +5 5 2 +6 6 1 +end data. + +correlations + variables = foo with bar wiz + . +]) + +AT_CHECK([pspp -O format=csv corr-ns.sps], [0], [dnl +Table: Correlations +,,bar,wiz +foo,Pearson Correlation,1.000,-1.000 +,Sig. (2-tailed),,.000 +,N,6,6 +]) + +AT_CLEANUP \ No newline at end of file