Dropped weight argument. Corrected update of entries of the covariance matrix
authorJason H Stover <jhs@math.gcsu.edu>
Thu, 24 Jul 2008 21:53:50 +0000 (17:53 -0400)
committerJason H Stover <jhs@math.gcsu.edu>
Thu, 24 Jul 2008 21:53:50 +0000 (17:53 -0400)
src/language/stats/ChangeLog
src/language/stats/glm.q
src/math/ChangeLog
src/math/covariance-matrix.c
src/math/covariance-matrix.h

index 1b4a0c1d49f1ebf3acb9bfe9bb123331b30f1989..9dfdb062ad37409495e2fd2a81de08f289809b5d 100644 (file)
@@ -1,3 +1,7 @@
+2008-07-24  Jason H Stover  <jhs@math.gcsu.edu>
+
+       * glm.q (run_glm): Dropped weight argument.
+
 2008-07-22  Jason H Stover  <jhs@math.gcsu.edu>
 
        * glm.q (run_glm): Re-written to form covariance matrix rather
index ca18e842e7716b5048fca86b60f86cdc6087c529..c015afa7ec5784ab5a46c8006b560ce28040f750 100644 (file)
@@ -334,7 +334,7 @@ run_glm (struct casereader *input,
                  const struct variable *w = all_vars[j];
                  const union value *val_w = case_data (&c, w);
                  covariance_pass_two (X, *mom[i]->mean, *mom[j]->mean,
-                                      (double) 1 / n_data, (double) n_data,
+                                      (double) n_data,
                                       v, w, val_v, val_w);
                }
            }
index 124abbf50522f1277872b78e2114fcd4ac2dc2fc..dc06ded80ad63e1248fdaf26051172380c97819c 100644 (file)
@@ -1,3 +1,17 @@
+2008-07-24  Jason H Stover  <jhs@math.gcsu.edu>
+
+       * covariance-matrix.c (covariance_pass_two): Dropped weight
+       argument. Corrected update of the entries of the covariance
+       matrix. 
+
+       * covariance-matrix.c (column_iterate): Dropped weight
+       argument. Corrected update of the entries of the covariance
+       matrix. 
+
+       * covariance-matrix.c (covariance_update_categorical_numeric):
+       Dropped weight argument. Corrected update of the entries of the
+       covariance matrix.
+
 2008-07-17  Jason H Stover  <jhs@math.gcsu.edu>
 
        * covariance-matrix.c (covariance_update_categorical_numeric):
index 4af44abc1808fcfa6e0fbef519b79cace5dad086..38ddf3061fad1f5744640ba4cdaa39998a6031ea 100644 (file)
@@ -44,24 +44,28 @@ void covariance_matrix_destroy (struct design_matrix *x)
  */
 static void
 covariance_update_categorical_numeric (struct design_matrix *cov, double mean,
-                         double weight, size_t row, 
+                         size_t row, 
                          const struct variable *v2, double x, const union value *val2)
 {
   size_t col;
+  double tmp;
   
   assert (var_is_numeric (v2));
 
   col = design_matrix_var_to_column (cov, v2);
   assert (val2 != NULL);
-  gsl_matrix_set (cov->m, row, col, (val2->f - mean) * x * weight);
+  tmp = gsl_matrix_get (cov->m, row, col);
+  gsl_matrix_set (cov->m, row, col, (val2->f - mean) * x + tmp);
+  gsl_matrix_set (cov->m, col, row, (val2->f - mean) * x + tmp);
 }
 static void
-column_iterate (struct design_matrix *cov, const struct variable *v, double weight,
+column_iterate (struct design_matrix *cov, const struct variable *v,
                double ssize, double x, const union value *val1, size_t row)
 {
   size_t col;
   size_t i;
   double y;
+  double tmp;
   union value *tmp_val;
 
   col = design_matrix_var_to_column (cov, v);  
@@ -74,8 +78,9 @@ column_iterate (struct design_matrix *cov, const struct variable *v, double weig
        {
          y += -1.0;
        }
-      gsl_matrix_set (cov->m, row, col, x * y * weight);
-      gsl_matrix_set (cov->m, col, row, x * y * weight);
+      tmp = gsl_matrix_get (cov->m, row, col);
+      gsl_matrix_set (cov->m, row, col, x * y + tmp);
+      gsl_matrix_set (cov->m, col, row, x * y + tmp);
     }
 }
 /*
@@ -84,7 +89,7 @@ column_iterate (struct design_matrix *cov, const struct variable *v, double weig
   values summarized in in its OBS_VALS element.
  */
 void covariance_pass_two (struct design_matrix *cov, double mean1, double mean2,
-                         double weight, double ssize, const struct variable *v1, 
+                         double ssize, const struct variable *v1, 
                          const struct variable *v2, const union value *val1, const union value *val2)
 {
   size_t row;
@@ -107,13 +112,13 @@ void covariance_pass_two (struct design_matrix *cov, double mean1, double mean2,
            }
          if (var_is_numeric (v2))
            {
-             covariance_update_categorical_numeric (cov, mean2, weight, row, 
+             covariance_update_categorical_numeric (cov, mean2, row, 
                                                     v2, x, val2);
            }
          else
            {
-             column_iterate (cov, v1, weight, ssize, x, val1, row);
-             column_iterate (cov, v2, weight, ssize, x, val2, row);
+             column_iterate (cov, v1, ssize, x, val1, row);
+             column_iterate (cov, v2, ssize, x, val2, row);
            }
        }
     }
@@ -123,7 +128,7 @@ void covariance_pass_two (struct design_matrix *cov, double mean1, double mean2,
        Reverse the orders of V1, V2, etc. and put ourselves back
        in the previous IF scope.
        */
-      covariance_pass_two (cov, mean2, mean1, weight, ssize, v2, v1, val2, val1);
+      covariance_pass_two (cov, mean2, mean1, ssize, v2, v1, val2, val1);
     }
   else
     {
@@ -132,7 +137,8 @@ void covariance_pass_two (struct design_matrix *cov, double mean1, double mean2,
       */
       row = design_matrix_var_to_column (cov, v1);  
       col = design_matrix_var_to_column (cov, v2);
-      x = (val1->f - mean1) * (val2->f - mean2) * weight;
+      x = (val1->f - mean1) * (val2->f - mean2);
+      x += gsl_matrix_get (cov->m, col, row);
       gsl_matrix_set (cov->m, row, col, x);
       gsl_matrix_set (cov->m, col, row, x);
     }
index 60f6b0d144f661cd01faa9041b53ce53f6ec2ef8..22f979c595c0baf76974fcba537cb7423bac9c52 100644 (file)
@@ -28,7 +28,7 @@ covariance_matrix_create (int, const struct variable *[]);
 
 void covariance_matrix_destroy (struct design_matrix *);
 
-void covariance_pass_two (struct design_matrix *, double, double,
+void covariance_pass_two (struct design_matrix *, double,
                          double, double, const struct variable *, 
                          const struct variable *, const union value *, const union value *);
 #endif