From 5aeb37ea9cd9d86fb050a7162cd5fd8ad7ca0abf Mon Sep 17 00:00:00 2001 From: John Darrington Date: Fri, 25 Nov 2011 10:01:42 +0100 Subject: [PATCH] categoricals.c: Effects coding. Implemented Effects (also called Contrast) coding instead of Dummy Coding and corrected logic error. --- src/math/categoricals.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) 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 -- 2.30.2