#include <data/procedure.h>
#include <data/settings.h>
#include <data/variable.h>
+#include <libpspp/array.h>
#include <libpspp/assertion.h>
#include <libpspp/cast.h>
#include <libpspp/hmapx.h>
#include <language/stats/runs.h>
#include <language/stats/friedman.h>
#include <language/stats/kruskal-wallis.h>
+#include <language/stats/mann-whitney.h>
#include <language/stats/wilcoxon.h>
#include <language/stats/sign.h>
#include <math/moments.h>
int runs;
int friedman;
int kruskal_wallis;
+ int mann_whitney;
int missing;
int method;
int statistics;
static int npar_wilcoxon (struct lexer *, struct dataset *, struct npar_specs *);
static int npar_sign (struct lexer *, struct dataset *, struct npar_specs *);
static int npar_kruskal_wallis (struct lexer *, struct dataset *, struct npar_specs *);
+static int npar_mann_whitney (struct lexer *, struct dataset *, struct npar_specs *);
static int npar_method (struct lexer *, struct npar_specs *);
/* Command parsing functions. */
parse_npar_tests (struct lexer *lexer, struct dataset *ds, struct cmd_npar_tests *npt,
struct npar_specs *nps)
{
- npt->chisquare = 0;
npt->binomial = 0;
- npt->wilcoxon = 0;
- npt->runs = 0;
+ npt->chisquare = 0;
npt->friedman = 0;
+ npt->kruskal_wallis = 0;
+ npt->mann_whitney = 0;
+ npt->runs = 0;
npt->sign = 0;
+ npt->wilcoxon = 0;
npt->missing = 0;
npt->miss = MISS_ANALYSIS;
npt->method = 0;
NOT_REACHED ();
}
}
+ else if (lex_match_hyphenated_word (lexer, "M-W") ||
+ lex_match_hyphenated_word (lexer, "MANN-WHITNEY"))
+ {
+ lex_match (lexer, '=');
+ npt->mann_whitney++;
+ switch (npar_mann_whitney (lexer, ds, nps))
+ {
+ case 0:
+ goto lossage;
+ case 1:
+ break;
+ case 2:
+ lex_error (lexer, NULL);
+ goto lossage;
+ default:
+ NOT_REACHED ();
+ }
+ }
else if (lex_match_hyphenated_word (lexer, "WILCOXON"))
{
lex_match (lexer, '=');
}
}
- qsort (npar_specs.vv, npar_specs.n_vars, sizeof (*npar_specs.vv),
- compare_var_ptrs_by_name);
+ sort (npar_specs.vv, npar_specs.n_vars, sizeof (*npar_specs.vv),
+ compare_var_ptrs_by_name, NULL);
if ( cmd.statistics )
{
return false;
}
- if ( ! lex_force_match (lexer, ','))
- return false;
+ lex_match (lexer, ',');
value_init (&nst->val2, var_get_width (nst->indep_var));
if ( ! parse_value (lexer, &nst->val2, var_get_width (nst->indep_var)))
return 1;
}
+
+static int
+npar_mann_whitney (struct lexer *lexer,
+ struct dataset *ds,
+ struct npar_specs *specs )
+{
+ struct n_sample_test *tp = pool_alloc (specs->pool, sizeof (*tp));
+ struct npar_test *nt = &tp->parent;
+
+ nt->insert_variables = n_sample_insert_variables;
+ nt->execute = mann_whitney_execute;
+
+ if (!parse_n_sample_related_test (lexer, dataset_dict (ds),
+ tp, specs->pool) )
+ return 0;
+
+ specs->n_tests++;
+ specs->test = pool_realloc (specs->pool,
+ specs->test,
+ sizeof (*specs->test) * specs->n_tests);
+ specs->test[specs->n_tests - 1] = nt;
+
+ return 1;
+}
+
+
static int
npar_sign (struct lexer *lexer, struct dataset *ds,
struct npar_specs *specs)