Moved is_origin and get_exact_subscript to design-matrix.[ch]
authorJason H Stover <jhs@math.gcsu.edu>
Wed, 29 Apr 2009 21:23:17 +0000 (17:23 -0400)
committerJason H Stover <jhs@math.gcsu.edu>
Wed, 29 Apr 2009 21:23:17 +0000 (17:23 -0400)
src/math/covariance-matrix.c
src/math/design-matrix.c
src/math/design-matrix.h

index 17799cfc930ca11acd25c7860ab5728d89e55793..275d7cfe3cd00fee4025483b1c2c00c9fab8686b 100644 (file)
@@ -735,47 +735,6 @@ covariance_matrix_accumulate (struct covariance_matrix *cov,
 {
   cov->accumulate (cov, ccase, (const struct interaction_variable **) aux, n_intr);
 }
-/*
-  If VAR is categorical with d categories, its first category should
-  correspond to the origin in d-dimensional Euclidean space.
- */
-static bool
-is_origin (const struct variable *var, const union value *val)
-{
-  if (var_is_numeric (var))
-    {
-      return false;
-    }
-  if (cat_value_find (var, val) == 0)
-    {
-      return true;
-    }
-  return false;
-}
-
-/*
-  Return the subscript of the column of the design matrix
-  corresponding to VAL. If VAR is categorical with d categories, its
-  first category should correspond to the origin in d-dimensional
-  Euclidean space, so there is no subscript for this value.
- */
-static size_t
-get_exact_subscript (const struct design_matrix *dm, const struct variable *var,
-                    const union value *val)
-{
-  size_t result;
-
-  result = design_matrix_var_to_column (dm, var);
-  if (var_is_alpha (var))
-    {
-      if (is_origin (var, val))
-       {
-         return -1u;
-       }
-      result += cat_value_find (var, val) - 1;
-    }
-  return result;
-}
 
 /*
   Return the value corresponding to subscript TARGET. If that value corresponds
@@ -796,7 +755,7 @@ get_value_from_subscript (const struct design_matrix *dm, size_t target)
   for (i = 0; i < cat_get_n_categories (var); i++)
     {
       result = cat_subscript_to_value (i, var);
-      if (get_exact_subscript (dm, var, result) == target)
+      if (dm_get_exact_subscript (dm, var, result) == target)
        {
          return result;
        }
@@ -819,10 +778,10 @@ is_covariance_contributor (const struct covariance_accumulator *ca, const struct
     {
       if (var_get_dict_index (v2) == var_get_dict_index (ca->v2))
        {
-         k = get_exact_subscript (dm, v1, ca->val1);
+         k = dm_get_exact_subscript (dm, v1, ca->val1);
          if (k == i)
            {
-             k = get_exact_subscript (dm, v2, ca->val2);
+             k = dm_get_exact_subscript (dm, v2, ca->val2);
              if (k == j)
                {
                  return true;
@@ -834,10 +793,10 @@ is_covariance_contributor (const struct covariance_accumulator *ca, const struct
     {
       if (var_get_dict_index (v2) == var_get_dict_index (ca->v1))
        {
-         k = get_exact_subscript (dm, v1, ca->val2);
+         k = dm_get_exact_subscript (dm, v1, ca->val2);
          if (k == i)
            {
-             k = get_exact_subscript (dm, v2, ca->val1);
+             k = dm_get_exact_subscript (dm, v2, ca->val1);
              if (k == j)
                {
                  return true;
index b81859aa5a539099f6e7a437ab053f31ce5fa202..030efd7a2d3316ac23989b0a5ab5de38473cc4d2 100644 (file)
@@ -281,3 +281,44 @@ design_matrix_set_element (const struct design_matrix *d, size_t row, size_t col
 {
   gsl_matrix_set (d->m, row, col, x);
 }
+/*
+  If VAR is categorical with d categories, its first category should
+  correspond to the origin in d-dimensional Euclidean space.
+ */
+static bool
+is_origin (const struct variable *var, const union value *val)
+{
+  if (var_is_numeric (var))
+    {
+      return false;
+    }
+  if (cat_value_find (var, val) == 0)
+    {
+      return true;
+    }
+  return false;
+}
+
+/*
+  Return the subscript of the column of the design matrix
+  corresponding to VAL. If VAR is categorical with d categories, its
+  first category should correspond to the origin in d-dimensional
+  Euclidean space, so there is no subscript for this value.
+ */
+size_t
+dm_get_exact_subscript (const struct design_matrix *dm, const struct variable *var,
+                    const union value *val)
+{
+  size_t result;
+
+  result = design_matrix_var_to_column (dm, var);
+  if (var_is_alpha (var))
+    {
+      if (is_origin (var, val))
+       {
+         return -1u;
+       }
+      result += cat_value_find (var, val) - 1;
+    }
+  return result;
+}
index 458145801fa0d4686776c923becc270b2a328056..b1cda5a9068d38be49ed45dd53a5016f78368056 100644 (file)
@@ -94,4 +94,7 @@ size_t design_matrix_get_n_cols (const struct design_matrix *);
 size_t design_matrix_get_n_rows (const struct design_matrix *);
 double design_matrix_get_element (const struct design_matrix *, size_t, size_t);
 void design_matrix_set_element (const struct design_matrix *, size_t, size_t, double);
+size_t dm_get_exact_subscript (const struct design_matrix *, const struct variable *,
+                                  const union value *);
+
 #endif