Categoricals.c Create entries for all groups.
authorJohn Darrington <john@darrington.wattle.id.au>
Sun, 8 Aug 2010 07:33:19 +0000 (09:33 +0200)
committerJohn Darrington <john@darrington.wattle.id.au>
Tue, 24 Aug 2010 14:37:12 +0000 (16:37 +0200)
Although for the purposes of creating a covariance matrix, only
n - 1 entries are needed,  for other purposes (such as descriptive
statistics, contrasts, planned comparisons etc) all n entries are required.
(where n is the number of distinct values).  This change updates
categories.c so that all n categories are generated.  Covariance matrix
routines are free to ignore the ones not of interest.

src/math/categoricals.c

index 5aba65b78e92d35499a886064edb12e1b81ce39d..c544f97e98000ade273bd78785bd9a9a4b924e1b 100644 (file)
@@ -152,7 +152,7 @@ categoricals_dump (const struct categoricals *cat)
 
   printf ("\nReverse variable map:\n");
 
-  for (v = 0 ; v < cat->n_cats_total - cat->n_vars; ++v)
+  for (v = 0 ; v < cat->n_cats_total; ++v)
     printf ("%d ", cat->reverse_variable_map[v]);
   printf ("\n");
 }
@@ -283,7 +283,7 @@ categoricals_done (struct categoricals *cat)
   int v;
   int idx = 0;
   cat->reverse_variable_map = pool_calloc (cat->pool,
-                                          cat->n_cats_total - cat->n_vars,
+                                          cat->n_cats_total,
                                           sizeof *cat->reverse_variable_map);
   
   for (v = 0 ; v < cat->n_vp; ++v)
@@ -304,9 +304,8 @@ categoricals_done (struct categoricals *cat)
        }
 
       /* Populate the reverse variable map.
-        This implementation considers the first value of each categorical variable
-        as the basis.  Therefore, this loop starts from 1 instead of 0 */
-      for (i = 1; i < vp->n_cats; ++i)
+       */
+      for (i = 0; i < vp->n_cats; ++i)
        cat->reverse_variable_map[idx++] = v;
     }
 
@@ -319,7 +318,7 @@ reverse_variable_lookup (const struct categoricals *cat, int subscript)
 {
   assert (cat->reverse_variable_map);
   assert (subscript >= 0);
-  assert (subscript < cat->n_cats_total - cat->n_vars);
+  assert (subscript < cat->n_cats_total);
 
   return cat->reverse_variable_map[subscript];
 }