#include "gl/xalloc.h"
-#define EFFECTS_CODING 0
+#define EFFECTS_CODING 1
struct value_node
{
{
case_unref (iv->ccase);
}
+
+ free (cat->iap[i].enc_sum);
+ free (cat->iap[i].df_prod);
hmap_destroy (&cat->iap[i].ivmap);
}
return cat->iap[index].iact;
}
-/* Return the case corresponding to SUBSCRIPT */
-static const struct ccase *
-categoricals_get_case_by_subscript (const struct categoricals *cat, int subscript)
-{
- int vindex = reverse_variable_lookup_short (cat, subscript);
- const struct interact_params *vp = &cat->iap[vindex];
- const struct interaction_value *vn = vp->reverse_interaction_value_map [subscript - vp->base_subscript_short];
-
- if ( vn == NULL)
- return NULL;
-
- return vn->ccase;
-}
-
-
double
categoricals_get_weight_by_subscript (const struct categoricals *cat, int subscript)
{
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];
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