Added pointer to residual variable to linreg cache
[pspp] / src / math / linreg / linreg.c
index b2c3c0d76de9fdf1670fcdf55e2cdc709997b465..2945b26d87002f9983d1267d041ca5433ce6ac25 100644 (file)
@@ -1,21 +1,21 @@
 /*
* lib/linreg/linreg.c
- * 
* Copyright (C) 2005 Free Software Foundation, Inc. Written by Jason H. Stover.
- * 
* This program is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License as published by the Free
* Software Foundation; either version 2 of the License, or (at your option)
* any later version.
- * 
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
* more details.
- * 
* You should have received a copy of the GNU General Public License along with
* this program; if not, write to the Free Software Foundation, Inc., 51
* Franklin Street, Fifth Floor, Boston, MA 02111-1307, USA.
+  lib/linreg/linreg.c
+  
+  Copyright (C) 2005 Free Software Foundation, Inc. Written by Jason H. Stover.
+  
+  This program is free software; you can redistribute it and/or modify it under
+  the terms of the GNU General Public License as published by the Free
+  Software Foundation; either version 2 of the License, or (at your option)
+  any later version.
+  
+  This program is distributed in the hope that it will be useful, but WITHOUT
+  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+  more details.
+  
+  You should have received a copy of the GNU General Public License along with
+  this program; if not, write to the Free Software Foundation, Inc., 51
+  Franklin Street, Fifth Floor, Boston, MA 02111-1307, USA.
  */
 
 #include <gsl/gsl_fit.h>
@@ -99,12 +99,15 @@ pspp_linreg_cache_alloc (size_t n, size_t p)
   pspp_linreg_cache *c;
 
   c = (pspp_linreg_cache *) malloc (sizeof (pspp_linreg_cache));
+  c->depvar = NULL;
   c->indep_means = gsl_vector_alloc (p);
   c->indep_std = gsl_vector_alloc (p);
   c->ssx = gsl_vector_alloc (p);       /* Sums of squares for the
-                                        * independent variables. */
+                                          independent variables. 
+                                       */
   c->ss_indeps = gsl_vector_alloc (p); /* Sums of squares for the
-                                        * model parameters. */
+                                          model parameters. 
+                                       */
   c->cov = gsl_matrix_alloc (p + 1, p + 1);    /* Covariance matrix. */
   c->n_obs = n;
   c->n_indeps = p;
@@ -113,19 +116,23 @@ pspp_linreg_cache_alloc (size_t n, size_t p)
    */
   c->method = PSPP_LINREG_SWEEP;
   c->predict = pspp_linreg_predict;
+  c->residual = pspp_linreg_residual; /* The procedure to comput my residuals. */
+  c->resid = NULL; /* The variable storing my residuals. */
 
   return c;
 }
 
-void
-pspp_linreg_cache_free (pspp_linreg_cache * c)
+bool
+pspp_linreg_cache_free (void * m)
 {
+  pspp_linreg_cache *c = m;
   gsl_vector_free (c->indep_means);
   gsl_vector_free (c->indep_std);
   gsl_vector_free (c->ss_indeps);
   gsl_matrix_free (c->cov);
   pspp_linreg_coeff_free (c->coeff);
   free (c);
+  return true;
 }
 
 /*
@@ -180,7 +187,8 @@ pspp_linreg (const gsl_vector * Y, const gsl_matrix * X,
   cache->dfm = cache->n_indeps;
   cache->dfe = cache->dft - cache->dfm;
   cache->n_coeffs = X->size2 + 1;      /* Adjust this later to allow for
-                                        * regression through the origin. */
+                                          regression through the origin. 
+                                       */
   if (cache->method == PSPP_LINREG_SWEEP)
     {
       gsl_matrix *sw;