X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flanguage%2Fstats%2Foneway.c;h=1c80c2ba98e7f5f8aa41674e8601a4db2be35cdb;hb=4010cd95ae15efa542a324c4c2081b19ab10b902;hp=bdac117c7ce860b88b73fc1af24a7989eb1fa3bd;hpb=631e2243322503338b497cd13529fbb2c5833e3d;p=pspp-builds.git diff --git a/src/language/stats/oneway.c b/src/language/stats/oneway.c index bdac117c..1c80c2ba 100644 --- a/src/language/stats/oneway.c +++ b/src/language/stats/oneway.c @@ -39,6 +39,7 @@ #include "linreg/sweep.h" #include "tukey/tukey.h" #include "math/categoricals.h" +#include "math/interaction.h" #include "math/covariance.h" #include "math/levene.h" #include "math/moments.h" @@ -181,7 +182,7 @@ static double bonferroni_pinv (double std_err, double alpha, double df, int k, c return std_err * gsl_cdf_tdist_Pinv (1.0 - alpha / (2.0 * m), df); } -static double sidak_pinv (double std_err, double alpha, double df, int k, const struct moments1 *mom_i, const struct moments1 *mom_j) +static double sidak_pinv (double std_err, double alpha, double df, int k, const struct moments1 *mom_i UNUSED, const struct moments1 *mom_j UNUSED) { const double m = k * (k - 1) / 2; double lp = 1.0 - exp (log (1.0 - alpha) / m ) ; @@ -271,21 +272,22 @@ static double scheffe_1tailsig (double ts, double df1, double df2) } -static double tukey_test_stat (int k, const struct moments1 *mom_i, const struct moments1 *mom_j, double std_err) +static double tukey_test_stat (int k UNUSED, const struct moments1 *mom_i, const struct moments1 *mom_j, double std_err) { + double ts; double n_i, mean_i, var_i; double n_j, mean_j, var_j; moments1_calculate (mom_i, &n_i, &mean_i, &var_i, 0, 0); moments1_calculate (mom_j, &n_j, &mean_j, &var_j, 0, 0); - double ts = (mean_i - mean_j) / std_err; + ts = (mean_i - mean_j) / std_err; ts = fabs (ts) * sqrt (2.0); return ts; } -static double lsd_test_stat (int k, const struct moments1 *mom_i, const struct moments1 *mom_j, double std_err) +static double lsd_test_stat (int k UNUSED, const struct moments1 *mom_i, const struct moments1 *mom_j, double std_err) { double n_i, mean_i, var_i; double n_j, mean_j, var_j; @@ -298,32 +300,35 @@ static double lsd_test_stat (int k, const struct moments1 *mom_i, const struct m static double scheffe_test_stat (int k, const struct moments1 *mom_i, const struct moments1 *mom_j, double std_err) { + double t; double n_i, mean_i, var_i; double n_j, mean_j, var_j; moments1_calculate (mom_i, &n_i, &mean_i, &var_i, 0, 0); moments1_calculate (mom_j, &n_j, &mean_j, &var_j, 0, 0); - double t = (mean_i - mean_j) / std_err; + t = (mean_i - mean_j) / std_err; t = pow2 (t); t /= k - 1; return t; } -static double gh_test_stat (int k, const struct moments1 *mom_i, const struct moments1 *mom_j, double std_err) +static double gh_test_stat (int k UNUSED, const struct moments1 *mom_i, const struct moments1 *mom_j, double std_err UNUSED) { + double ts; + double thing; double n_i, mean_i, var_i; double n_j, mean_j, var_j; moments1_calculate (mom_i, &n_i, &mean_i, &var_i, 0, 0); moments1_calculate (mom_j, &n_j, &mean_j, &var_j, 0, 0); - double thing = var_i / n_i + var_j / n_j; + thing = var_i / n_i + var_j / n_j; thing /= 2.0; thing = sqrt (thing); - double ts = (mean_i - mean_j) / thing; + ts = (mean_i - mean_j) / thing; return fabs (ts); } @@ -647,10 +652,10 @@ run_oneway (const struct oneway_spec *cmd, for (v = 0; v < cmd->n_vars; ++v) { - ws.vws[v].cat = categoricals_create (&cmd->indep_var, 1, cmd->wv, + struct interaction *inter = interaction_create (cmd->indep_var); + ws.vws[v].cat = categoricals_create (&inter, 1, cmd->wv, cmd->exclude, makeit, updateit, - CONST_CAST (struct variable *, - cmd->vars[v]), + CONST_CAST (struct variable *, cmd->vars[v]), ws.dd_total[v]); ws.vws[v].cov = covariance_2pass_create (1, &cmd->vars[v], @@ -750,9 +755,12 @@ run_oneway (const struct oneway_spec *cmd, for (v = 0; v < cmd->n_vars; ++v) { + gsl_matrix *cm; struct per_var_ws *pvw = &ws.vws[v]; - gsl_matrix *cm = covariance_calculate_unnormalized (pvw->cov); const struct categoricals *cats = covariance_get_categoricals (pvw->cov); + categoricals_done (cats); + + cm = covariance_calculate_unnormalized (pvw->cov); moments1_calculate (ws.dd_total[v]->mom, &pvw->n, NULL, NULL, NULL, NULL); @@ -764,7 +772,7 @@ run_oneway (const struct oneway_spec *cmd, pvw->ssa = pvw->sst - pvw->sse; - pvw->n_groups = categoricals_total (cats); + pvw->n_groups = categoricals_n_total (cats); pvw->mse = (pvw->sst - pvw->ssa) / (pvw->n - pvw->n_groups); @@ -775,10 +783,8 @@ run_oneway (const struct oneway_spec *cmd, { const struct categoricals *cats = covariance_get_categoricals (ws.vws[v].cov); - categoricals_done (cats); - - if (categoricals_total (cats) > ws.actual_number_of_groups) - ws.actual_number_of_groups = categoricals_total (cats); + if (categoricals_n_total (cats) > ws.actual_number_of_groups) + ws.actual_number_of_groups = categoricals_n_total (cats); } casereader_destroy (input); @@ -1009,7 +1015,7 @@ show_descriptives (const struct oneway_spec *cmd, const struct oneway_workspace if ( v > 0) tab_hline (t, TAL_1, 0, n_cols - 1, row); - for (count = 0; count < categoricals_total (cats); ++count) + for (count = 0; count < categoricals_n_total (cats); ++count) { double T; double n, mean, variance; @@ -1017,7 +1023,7 @@ show_descriptives (const struct oneway_spec *cmd, const struct oneway_workspace struct string vstr; - const union value *gval = categoricals_get_value_by_category (cats, count); + const struct ccase *gcc = categoricals_get_case_by_category (cats, count); const struct descriptive_data *dd = categoricals_get_user_data_by_category (cats, count); moments1_calculate (dd->mom, &n, &mean, &variance, NULL, NULL); @@ -1027,7 +1033,7 @@ show_descriptives (const struct oneway_spec *cmd, const struct oneway_workspace ds_init_empty (&vstr); - var_append_value_name (cmd->indep_var, gval, &vstr); + var_append_value_name (cmd->indep_var, case_data (gcc, cmd->indep_var), &vstr); tab_text (t, 1, row + count, TAB_LEFT | TAT_TITLE, @@ -1098,7 +1104,7 @@ show_descriptives (const struct oneway_spec *cmd, const struct oneway_workspace tab_double (t, 9, row + count, 0, ws->dd_total[v]->maximum, fmt); } - row += categoricals_total (cats) + 1; + row += categoricals_n_total (cats) + 1; } tab_submit (t); @@ -1227,13 +1233,13 @@ show_contrast_coeffs (const struct oneway_spec *cmd, const struct oneway_workspa ++count, coeffi = ll_next (coeffi)) { const struct categoricals *cats = covariance_get_categoricals (cov); - const union value *val = categoricals_get_value_by_category (cats, count); + const struct ccase *gcc = categoricals_get_case_by_category (cats, count); struct coeff_node *coeffn = ll_data (coeffi, struct coeff_node, ll); struct string vstr; ds_init_empty (&vstr); - var_append_value_name (cmd->indep_var, val, &vstr); + var_append_value_name (cmd->indep_var, case_data (gcc, cmd->indep_var), &vstr); tab_text (t, count + 2, 1, TAB_CENTER | TAT_TITLE, ds_cstr (&vstr)); @@ -1514,10 +1520,11 @@ show_comparisons (const struct oneway_spec *cmd, const struct oneway_workspace * struct string vstr; int j; struct descriptive_data *dd_i = categoricals_get_user_data_by_category (cat, i); - const union value *gval = categoricals_get_value_by_category (cat, i); + const struct ccase *gcc = categoricals_get_case_by_category (cat, i); + ds_init_empty (&vstr); - var_append_value_name (cmd->indep_var, gval, &vstr); + var_append_value_name (cmd->indep_var, case_data (gcc, cmd->indep_var), &vstr); if ( i != 0) tab_hline (t, TAL_1, 1, n_cols - 1, r); @@ -1527,22 +1534,24 @@ show_comparisons (const struct oneway_spec *cmd, const struct oneway_workspace * for (j = 0 ; j < pvw->n_groups; ++j) { + double std_err; double weight_j, mean_j, var_j; double half_range; + const struct ccase *cc; struct descriptive_data *dd_j = categoricals_get_user_data_by_category (cat, j); if (j == i) continue; ds_clear (&vstr); - gval = categoricals_get_value_by_category (cat, j); - var_append_value_name (cmd->indep_var, gval, &vstr); + cc = categoricals_get_case_by_category (cat, j); + var_append_value_name (cmd->indep_var, case_data (cc, cmd->indep_var), &vstr); tab_text (t, 2, r + rx, TAB_LEFT | TAT_TITLE, ds_cstr (&vstr)); moments1_calculate (dd_j->mom, &weight_j, &mean_j, &var_j, 0, 0); tab_double (t, 3, r + rx, 0, mean_i - mean_j, 0); - double std_err = pvw->mse; + std_err = pvw->mse; std_err *= weight_i + weight_j; std_err /= weight_i * weight_j; std_err = sqrt (std_err);