#include <libpspp/taint.h>
#include <math/group-proc.h>
#include <math/levene.h>
-#include <output/manager.h>
-#include <output/table.h>
+#include <math/correlation.h>
+#include <output/tab.h>
#include <data/format.h>
#include "minmax.h"
ssbox_base_init (struct ssbox *this, int cols, int rows)
{
this->finalize = ssbox_base_finalize;
- this->t = tab_create (cols, rows, 0);
+ this->t = tab_create (cols, rows);
- tab_columns (this->t, SOM_COL_DOWN, 1);
tab_headers (this->t, 0, 0, 1, 0);
tab_box (this->t, TAL_2, TAL_2, TAL_0, TAL_1, 0, 0, cols - 1, rows - 1);
tab_hline (this->t, TAL_2, 0, cols- 1, 1);
- tab_dim (this->t, tab_natural_dimensions, NULL);
}
\f
/* ssbox implementations. */
const size_t rows = 3 + data_rows;
self->finalize = trbox_base_finalize;
- self->t = tab_create (cols, rows, 0);
+ self->t = tab_create (cols, rows);
tab_headers (self->t, 0, 0, 3, 0);
tab_box (self->t, TAL_2, TAL_2, TAL_0, TAL_0, 0, 0, cols - 1, rows - 1);
tab_hline (self->t, TAL_2, 0, cols- 1, 3);
- tab_dim (self->t, tab_natural_dimensions, NULL);
}
/* Base finalizer for the trbox */
struct tab_table *table;
- table = tab_create (cols, rows, 0);
+ table = tab_create (cols, rows);
- tab_columns (table, SOM_COL_DOWN, 1);
tab_headers (table, 0, 0, 1, 0);
tab_box (table, TAL_2, TAL_2, TAL_0, TAL_1, 0, 0, cols - 1, rows - 1);
tab_hline (table, TAL_2, 0, cols - 1, 1);
tab_vline (table, TAL_2, 2, 0, rows - 1);
- tab_dim (table, tab_natural_dimensions, NULL);
tab_title (table, _("Paired Samples Correlations"));
/* column headings */
for (i = 0; i < proc->n_pairs; i++)
{
struct pair *pair = &proc->pairs[i];
- double df = pair->n - 2;
- double p, q;
-
- /* corr2 will mathematically always be in the range [0, 1.0]. Inaccurate
- calculations sometimes cause it to be slightly greater than 1.0, so
- force it into the correct range to avoid NaN from sqrt(). */
- double corr2 = MIN (1.0, pow2 (pair->correlation));
- double correlation_t = pair->correlation * sqrt (df) / sqrt (1 - corr2);
/* row headings */
tab_text_format (table, 0, i + 1, TAB_LEFT | TAT_TITLE,
tab_double (table, 2, i + 1, TAB_RIGHT, pair->n, &proc->weight_format);
tab_double (table, 3, i + 1, TAB_RIGHT, pair->correlation, NULL);
- p = gsl_cdf_tdist_P (correlation_t, df);
- q = gsl_cdf_tdist_Q (correlation_t, df);
- tab_double (table, 4, i + 1, TAB_RIGHT,
- 2.0 * (correlation_t > 0 ? q : p), NULL);
+ tab_double (table, 4, i + 1, TAB_RIGHT,
+ 2.0 * significance_of_correlation (pair->correlation, pair->n), NULL);
}
tab_submit (table);
return 0;
}
+
+static bool
+is_criteria_value (const struct ccase *c, void *aux)
+{
+ const struct t_test_proc *proc = aux;
+ const union value *val = case_data (c, proc->indep_var);
+ int width = var_get_width (proc->indep_var);
+
+ if ( value_equal (val, &proc->g_value[0], width))
+ return true;
+
+ if ( value_equal (val, &proc->g_value[1], width))
+ return true;
+
+ return false;
+}
+
static void
calculate (struct t_test_proc *proc,
struct casereader *input, const struct dataset *ds)
struct trbox test_results_box;
struct taint *taint;
struct ccase *c;
-
+ int i;
c = casereader_peek (input, 0);
if (c == NULL)
{
break;
case T_IND_SAMPLES:
group_calc (dict, proc, casereader_clone (input));
- levene (dict, input, proc->indep_var, proc->n_vars, proc->vars,
- proc->exclude);
+
+ for (i = 0; i < proc->n_vars; ++i)
+ {
+ struct group_proc *grp_data = group_proc_get (proc->vars[i]);
+
+ if ( proc->criterion == CMP_EQ )
+ {
+ input = casereader_create_filter_func (input, is_criteria_value, NULL,
+ proc,
+ NULL);
+ }
+
+ grp_data->levene = levene ( input, proc->indep_var, proc->vars[i], dict_get_weight (dict), proc->exclude);
+ }
break;
default:
NOT_REACHED ();