#include <language/stats/binomial.h>
#include <language/stats/chisquare.h>
#include <language/stats/runs.h>
+#include <language/stats/friedman.h>
#include <language/stats/kruskal-wallis.h>
#include <language/stats/wilcoxon.h>
#include <language/stats/sign.h>
int wilcoxon;
int sign;
int runs;
+ int friedman;
int kruskal_wallis;
int missing;
int method;
/* Prototype for custom subcommands of NPAR TESTS. */
static int npar_chisquare (struct lexer *, struct dataset *, struct npar_specs *);
static int npar_binomial (struct lexer *, struct dataset *, struct npar_specs *);
-static int npar_runs (struct lexer *lexer, struct dataset *, struct npar_specs *);
-
+static int npar_runs (struct lexer *, struct dataset *, struct npar_specs *);
+static int npar_friedman (struct lexer *, struct dataset *, struct npar_specs *);
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 *);
npt->binomial = 0;
npt->wilcoxon = 0;
npt->runs = 0;
+ npt->friedman = 0;
npt->sign = 0;
npt->missing = 0;
npt->miss = MISS_ANALYSIS;
memset (npt->a_statistics, 0, sizeof npt->a_statistics);
for (;;)
{
- if (lex_match_hyphenated_word (lexer, "RUNS"))
+ if (lex_match_hyphenated_word (lexer, "FRIEDMAN"))
+ {
+ npt->friedman++;
+ switch (npar_friedman (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, "RUNS"))
{
npt->runs++;
switch (npar_runs (lexer, ds, nps))
default:
NOT_REACHED ();
}
-
}
else if (lex_match_hyphenated_word (lexer, "CHISQUARE"))
{
return 1;
}
+static int
+npar_friedman (struct lexer *lexer, struct dataset *ds,
+ struct npar_specs *specs)
+{
+ struct one_sample_test *ft = pool_alloc (specs->pool, sizeof (*ft));
+ struct npar_test *nt = &ft->parent;
+
+ nt->execute = friedman_execute;
+ nt->insert_variables = one_sample_insert_variables;
+
+ lex_match (lexer, '=');
+
+ if (!parse_variables_const_pool (lexer, specs->pool, dataset_dict (ds),
+ &ft->vars, &ft->n_vars,
+ PV_NO_SCRATCH | PV_NO_DUPLICATE | PV_NUMERIC))
+ {
+ return 2;
+ }
+
+ 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_chisquare (struct lexer *lexer, struct dataset *ds,