Drop first category of each variable from covariance matrix.
[pspp-builds.git] / src / math / categoricals.c
index b7e51751a5b8492fe1a5057d5b5c254577ecb879..5c96c40cc359a1ec87f00594890eb00cfe75c577 100644 (file)
@@ -145,6 +145,12 @@ categoricals_dump (const struct categoricals *cat)
   printf ("Number of categorical variables: %d\n", cat->n_vp);
   printf ("Number of non-empty categorical variables: %d\n", cat->n_vars);
   printf ("Total number of categories: %d\n", cat->n_cats_total);
+
+  printf ("\nReverse variable map:\n");
+
+  for (v = 0 ; v < cat->n_cats_total - cat->n_vars; ++v)
+    printf ("%d ", cat->reverse_variable_map[v]);
+  printf ("\n");
 }
 
 
@@ -271,7 +277,9 @@ categoricals_done (struct categoricals *cat)
   */
   int v;
   int idx = 0;
-  cat->reverse_variable_map = pool_calloc (cat->pool, cat->n_cats_total, sizeof *cat->reverse_variable_map);
+  cat->reverse_variable_map = pool_calloc (cat->pool,
+                                          cat->n_cats_total - cat->n_vars,
+                                          sizeof *cat->reverse_variable_map);
   
   for (v = 0 ; v < cat->n_vp; ++v)
     {
@@ -290,7 +298,10 @@ categoricals_done (struct categoricals *cat)
          vp->reverse_value_map[vn->subscript] = vn;
        }
 
-      for (i = 0; i < vp->n_cats; ++i)
+      /* 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)
        cat->reverse_variable_map[idx++] = v;
     }