Fix ssq for interactions
authorJohn Darrington <john@darrington.wattle.id.au>
Mon, 11 Jul 2011 14:47:18 +0000 (16:47 +0200)
committerJohn Darrington <john@darrington.wattle.id.au>
Tue, 26 Jul 2011 10:36:38 +0000 (12:36 +0200)
src/language/stats/glm.c
src/math/covariance.c
src/math/covariance.h

index 54e60c05f9b381db93ac7b09ac21f1ffd67df1f3..3194fd8178df9f30dcd944e49e92c5aab0754e89 100644 (file)
@@ -329,9 +329,7 @@ get_ssq (struct covariance *cov, gsl_vector * ssq, const struct glm_spec *cmd)
   size_t j;
   size_t k;
   size_t *dropped = xcalloc (covariance_dim (cov), sizeof (*dropped));
-  const struct variable **vars = xcalloc (covariance_dim (cov), sizeof (*vars));
-
-  covariance_get_var_indices (cov, vars);
+  const struct categoricals *cats = covariance_get_categoricals (cov);
 
   for (k = 0; k < cmd->n_interactions; k++)
     {
@@ -341,7 +339,8 @@ get_ssq (struct covariance *cov, gsl_vector * ssq, const struct glm_spec *cmd)
       size_t n_dropped = 0;
       for (i = cmd->n_dep_vars; i < covariance_dim (cov); i++)
        {
-         if (vars[i] == cmd->interactions[k]->vars[0])
+         if (categoricals_get_interaction_by_subscript (cats, i - cmd->n_dep_vars)
+             == cmd->interactions[k])
            {
              assert (n_dropped < covariance_dim (cov));
              dropped[n_dropped++] = i;
@@ -375,7 +374,6 @@ get_ssq (struct covariance *cov, gsl_vector * ssq, const struct glm_spec *cmd)
     }
 
   free (dropped);
-  free (vars);
   gsl_matrix_free (cm);
 }
 
index aed42436ba40d95c240ef095960cae2862efb624..5dc1782638aff4f294253fd20d87c4e6b2e4c426 100644 (file)
@@ -738,36 +738,4 @@ covariance_dim (const struct covariance * cov)
   return (cov->dim);
 }
 
-/*
-  Returns an array of variables corresponding to rows of the covariance matrix.
-  In other words, element i of the array is the variable corresponding to 
-  row (and column) i of the covariance matrix.
- */
-void
-covariance_get_var_indices (const struct covariance *cov, const struct variable **vars)
-{
-  int i;
-  for (i = 0; i < cov->n_vars; i++)
-    {
-      vars[i] = cov->vars[i];
-    }
-  for (i = cov->n_vars; i < cov->dim; i++)
-    {
-      vars[i] = categoricals_get_variable_by_subscript (cov->categoricals, i - cov->n_vars);
-    }
-}
 
-
-void
-covariance_get_interaction_indices (const struct covariance *cov, const struct interaction **iacts)
-{
-  int i;
-  for (i = 0; i < cov->n_vars; i++)
-    {
-      iacts[i] = cov->vars[i];
-    }
-  for (i = cov->n_vars; i < cov->dim; i++)
-    {
-      iacts[i] = categoricals_get_interaction_by_subscript (cov->categoricals, i - cov->n_vars);
-    }
-}
index 87afd8b28210469f66fb9eb5edff9bb33af72235..ed5b3ee73426951d0084eb5df20f8492db541cb7 100644 (file)
@@ -47,9 +47,6 @@ void covariance_destroy (struct covariance *cov);
 const gsl_matrix *covariance_moments (const struct covariance *cov, int m);
 
 const struct categoricals * covariance_get_categoricals (const struct covariance *cov);
-struct interaction;
-void covariance_get_interaction_indices (const struct covariance *cov, const struct interaction **iacts);
-
-void covariance_get_var_indices (const struct covariance *cov, const struct variable **vars);
 size_t covariance_dim (const struct covariance * cov);
+
 #endif