From: John Darrington Date: Fri, 25 Nov 2011 09:01:42 +0000 (+0100) Subject: categoricals.c: Effects coding. X-Git-Tag: v0.7.9~77 X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5aeb37ea9cd9d86fb050a7162cd5fd8ad7ca0abf;p=pspp-builds.git categoricals.c: Effects coding. Implemented Effects (also called Contrast) coding instead of Dummy Coding and corrected logic error. --- diff --git a/src/math/categoricals.c b/src/math/categoricals.c index fbc23ab0..88d0d5c2 100644 --- a/src/math/categoricals.c +++ b/src/math/categoricals.c @@ -32,7 +32,7 @@ #include "gl/xalloc.h" -#define EFFECTS_CODING 0 +#define EFFECTS_CODING 1 struct value_node { @@ -647,6 +647,7 @@ categoricals_get_binary_by_subscript (const struct categoricals *cat, const struct interact_params *iap = &cat->iap[i]; + double dfp = 1.0; for (v = 0; v < iact->n_vars; ++v) { const struct variable *var = iact->vars[v]; @@ -660,13 +661,14 @@ categoricals_get_binary_by_subscript (const struct categoricals *cat, double bin = 1.0; + const double df = iap->df_prod[v] / dfp; + /* Translate the subscript into an index for the individual variable */ - int index = (subscript - base_index) % iap->df_prod[v]; - if ( v > 0) - index /= iap->df_prod[v - 1]; + const int index = ((subscript - base_index) % iap->df_prod[v] ) / dfp; + dfp = iap->df_prod [v]; #if EFFECTS_CODING - if ( valn->index == 0) + if ( valn->index == df ) bin = -1.0; else #endif