GNU General Public License for more details.
You should have received a copy of the GNU General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>.
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <config.h>
#include <gsl/gsl_cdf.h>
#include "data/format.h"
-#include "libpspp/cast.h"
+
#include "data/variable.h"
#include "data/case.h"
#include "data/casereader.h"
#include "data/casewriter.h"
#include "data/subcase.h"
+#include "data/value.h"
-
-#include "data/casereader.h"
#include "math/percentiles.h"
-
#include "math/sort.h"
+#include "libpspp/cast.h"
#include "libpspp/hmap.h"
#include "libpspp/array.h"
#include "libpspp/str.h"
-#include "data/value.h"
#include "libpspp/misc.h"
#include "output/tab.h"
struct val_node **sorted_array;
double n;
double median;
- double chisq;
+ double chisq;
};
-static int
+static int
val_node_cmp_3way (const void *a_, const void *b_, const void *aux)
{
const struct variable *indep_var = aux;
return value_compare_3way (&(*a)->val, &(*b)->val, var_get_width (indep_var));
}
-static void
+static void
show_frequencies (const struct n_sample_test *nst, const struct results *results, int n_vals, const struct dictionary *);
-static void
+static void
show_test_statistics (const struct n_sample_test *nst, const struct results *results, int, const struct dictionary *);
static struct val_node *
-find_value (const struct hmap *map, const union value *val,
+find_value (const struct hmap *map, const union value *val,
const struct variable *var)
{
struct val_node *foo = NULL;
ptl = percentile_create (0.5, cc);
os = &ptl->parent;
-
+
order_stats_accumulate (&os, 1,
rr,
wvar,
}
results[v].median = median;
-
+
for (; (c = casereader_read (r)) != NULL; case_unref (c))
{
if ( var_is_value_missing (var, case_data (c, var), exclude))
{
- case_unref (c);
continue;
}
value_compare_3way (indep_val, &nst->val2, width) > 0
)
{
- case_unref (c);
continue;
}
}
int width = var_get_width (nst->indep_var);
vn = xzalloc (sizeof *vn);
value_clone (&vn->val, indep_val, width);
-
+
hmap_insert (&map, &vn->node, value_hash (indep_val, width, 0));
}
else
n_vals = x;
hmap_destroy (&map);
- sort (results[v].sorted_array, x, sizeof (*results[v].sorted_array),
+ sort (results[v].sorted_array, x, sizeof (*results[v].sorted_array),
val_node_cmp_3way, nst->indep_var);
}
-static void
+static void
show_frequencies (const struct n_sample_test *nst, const struct results *results, int n_vals, const struct dictionary *dict)
{
const struct variable *weight = dict_get_weight (dict);
const int column_headers = 2;
const int nc = row_headers + n_vals;
const int nr = column_headers + nst->n_vars * 2;
-
+
struct tab_table *table = tab_create (nc, nr);
+ tab_set_format (table, RC_WEIGHT, wfmt);
tab_headers (table, row_headers, 0, column_headers, 0);
tab_text (table, row_headers + i, 1,
TAT_TITLE | TAB_LEFT, ds_cstr (&label));
-
+
ds_destroy (&label);
}
{
const struct val_node *vn = rs->sorted_array[i];
tab_double (table, row_headers + i, column_headers + v * 2,
- 0, vn->gt, wfmt);
+ 0, vn->gt, NULL, RC_WEIGHT);
tab_double (table, row_headers + i, column_headers + v * 2 + 1,
- 0, vn->le, wfmt);
+ 0, vn->le, NULL, RC_WEIGHT);
}
}
}
-static void
+static void
show_test_statistics (const struct n_sample_test *nst,
const struct results *results,
int n_vals,
const int column_headers = 1;
const int nc = row_headers + 5;
const int nr = column_headers + nst->n_vars;
-
+
struct tab_table *table = tab_create (nc, nr);
+ tab_set_format (table, RC_WEIGHT, wfmt);
tab_headers (table, row_headers, 0, column_headers, 0);
tab_double (table, row_headers + 0, column_headers + v,
- 0, rs->n, wfmt);
+ 0, rs->n, NULL, RC_WEIGHT);
tab_double (table, row_headers + 1, column_headers + v,
- 0, rs->median, NULL);
+ 0, rs->median, NULL, RC_OTHER);
tab_double (table, row_headers + 2, column_headers + v,
- 0, rs->chisq, NULL);
+ 0, rs->chisq, NULL, RC_OTHER);
tab_double (table, row_headers + 3, column_headers + v,
- 0, df, wfmt);
+ 0, df, NULL, RC_WEIGHT);
tab_double (table, row_headers + 4, column_headers + v,
- 0, gsl_cdf_chisq_Q (rs->chisq, df), NULL);
+ 0, gsl_cdf_chisq_Q (rs->chisq, df), NULL, RC_PVALUE);
}
-
+
tab_submit (table);
}