X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flanguage%2Fstats%2Fnpar.c;h=fbcdeae058e1dd1c47abc8cdcab01c905496598b;hb=9cbe8f135bb944db20c630e991d995af0027d058;hp=e0d50d4adecd9c33120400b7c5eb5377bccedbc3;hpb=1babb2ecc20dcae51f6cc639d39cce197d31dbdc;p=pspp diff --git a/src/language/stats/npar.c b/src/language/stats/npar.c index e0d50d4ade..fbcdeae058 100644 --- a/src/language/stats/npar.c +++ b/src/language/stats/npar.c @@ -37,6 +37,7 @@ #include "language/stats/ks-one-sample.h" #include "language/stats/cochran.h" #include "language/stats/friedman.h" +#include "language/stats/jonckheere-terpstra.h" #include "language/stats/kruskal-wallis.h" #include "language/stats/mann-whitney.h" #include "language/stats/mcnemar.h" @@ -95,6 +96,7 @@ struct cmd_npar_tests int mann_whitney; int mcnemar; int median; + int jonckheere_terpstra; int missing; int method; int statistics; @@ -138,6 +140,7 @@ static int npar_cochran (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 *); +static int npar_jonckheere_terpstra (struct lexer *, struct dataset *, struct npar_specs *); static int npar_mann_whitney (struct lexer *, struct dataset *, struct npar_specs *); static int npar_mcnemar (struct lexer *, struct dataset *, struct npar_specs *); static int npar_median (struct lexer *, struct dataset *, struct npar_specs *); @@ -152,21 +155,26 @@ static int parse_npar_tests (struct lexer *lexer, struct dataset *ds, struct cmd_npar_tests *npt, struct npar_specs *nps) { - npt->binomial = 0; npt->chisquare = 0; - npt->ks_one_sample = 0; npt->cochran = 0; + npt->binomial = 0; + npt->ks_one_sample = 0; + npt->wilcoxon = 0; + npt->sign = 0; + npt->runs = 0; npt->friedman = 0; + npt->kendall = 0; npt->kruskal_wallis = 0; npt->mann_whitney = 0; npt->mcnemar = 0; - npt->runs = 0; - npt->sign = 0; - npt->wilcoxon = 0; - npt->missing = 0; + npt->median = 0; + npt->jonckheere_terpstra = 0; + npt->miss = MISS_ANALYSIS; + npt->missing = 0; npt->method = 0; npt->statistics = 0; + memset (npt->a_statistics, 0, sizeof npt->a_statistics); for (;;) { @@ -288,6 +296,24 @@ parse_npar_tests (struct lexer *lexer, struct dataset *ds, struct cmd_npar_tests NOT_REACHED (); } } + else if (lex_match_phrase (lexer, "J-T") || + lex_match_phrase (lexer, "JONCKHEERE-TERPSTRA")) + { + lex_match (lexer, T_EQUALS); + npt->jonckheere_terpstra++; + switch (npar_jonckheere_terpstra (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_phrase (lexer, "K-W") || lex_match_phrase (lexer, "KRUSKAL-WALLIS")) { @@ -398,7 +424,7 @@ parse_npar_tests (struct lexer *lexer, struct dataset *ds, struct cmd_npar_tests npt->missing++; if (npt->missing > 1) { - msg (SE, _("The %s subcommand may be given only once."), "MISSING"); + lex_sbc_only_once ("MISSING"); goto lossage; } while (lex_token (lexer) != T_SLASH && lex_token (lexer) != T_ENDCMD) @@ -425,7 +451,7 @@ parse_npar_tests (struct lexer *lexer, struct dataset *ds, struct cmd_npar_tests npt->method++; if (npt->method > 1) { - msg (SE, _("The %s subcommand may be given only once."), "METHOD"); + lex_sbc_only_once ("METHOD"); goto lossage; } switch (npar_method (lexer, nps)) @@ -804,11 +830,11 @@ npar_chisquare (struct lexer *lexer, struct dataset *ds, { cstp->ranged = true; if ( ! lex_force_num (lexer)) return 0; - cstp->lo = lex_integer (lexer); + cstp->lo = lex_number (lexer); lex_get (lexer); lex_force_match (lexer, T_COMMA); if (! lex_force_num (lexer) ) return 0; - cstp->hi = lex_integer (lexer); + cstp->hi = lex_number (lexer); if ( cstp->lo >= cstp->hi ) { msg (ME, @@ -919,7 +945,8 @@ npar_binomial (struct lexer *lexer, struct dataset *ds, { if (lex_match (lexer, T_LPAREN)) { - lex_force_num (lexer); + if (! lex_force_num (lexer)) + return 2; btp->category1 = lex_number (lexer); lex_get (lexer); if ( lex_match (lexer, T_COMMA)) @@ -1054,7 +1081,7 @@ parse_two_sample_related_test (struct lexer *lexer, if (!parse_variables_const_pool (lexer, pool, dict, &vlist1, &n_vlist1, - PV_NUMERIC | PV_NO_SCRATCH | PV_NO_DUPLICATE) ) + PV_NUMERIC | PV_NO_SCRATCH | PV_DUPLICATE) ) return false; if ( lex_match (lexer, T_WITH)) @@ -1062,7 +1089,7 @@ parse_two_sample_related_test (struct lexer *lexer, with = true; if ( !parse_variables_const_pool (lexer, pool, dict, &vlist2, &n_vlist2, - PV_NUMERIC | PV_NO_SCRATCH | PV_NO_DUPLICATE) ) + PV_NUMERIC | PV_NO_SCRATCH | PV_DUPLICATE) ) return false; paired = (lex_match (lexer, T_LPAREN) && @@ -1075,9 +1102,12 @@ parse_two_sample_related_test (struct lexer *lexer, if (paired) { if ( n_vlist1 != n_vlist2) - msg (SE, _("PAIRED was specified but the number of variables " + { + msg (SE, _("PAIRED was specified but the number of variables " "preceding WITH (%zu) did not match the number " "following (%zu)."), n_vlist1, n_vlist2); + return false; + } test_parameters->n_pairs = n_vlist1 ; } @@ -1317,6 +1347,30 @@ npar_mcnemar (struct lexer *lexer, struct dataset *ds, } +static int +npar_jonckheere_terpstra (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 = jonckheere_terpstra_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_kruskal_wallis (struct lexer *lexer, struct dataset *ds, struct npar_specs *specs)