REGRESSION: Implement /ORIGIN subcommand.
[pspp] / src / math / linreg.h
index 349d5a909c300c4713ee14a0196d967abbbcb5b6..39cda89f295806bc46cf9930aac99dddaad94c17 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 2005 Free Software Foundation, Inc. Written by Jason H. Stover.
+   Copyright (C) 2005, 2011 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
 
 #ifndef LINREG_H
 #define LINREG_H
-#include <stdbool.h>
+
 #include <gsl/gsl_math.h>
-#include <gsl/gsl_vector.h>
 #include <gsl/gsl_matrix.h>
+#include <gsl/gsl_vector.h>
+#include <stdbool.h>
 
 enum
 {
@@ -113,7 +114,6 @@ struct linreg_struct
      column of the design matrix.
    */
   double depvar_mean;
-  double depvar_std;
   gsl_vector *indep_means;
   gsl_vector *indep_std;
 
@@ -121,8 +121,6 @@ struct linreg_struct
      Sums of squares.
    */
   double ssm;                  /* Sums of squares for the overall model. */
-  gsl_vector *ss_indeps;       /* Sums of squares from each
-                                  independent variable. */
   double sst;                  /* Sum of squares total. */
   double sse;                  /* Sum of squares error. */
   double mse;                  /* Mean squared error. This is just sse /
@@ -140,49 +138,44 @@ struct linreg_struct
   double dfe;
   double dfm;
 
-  struct variable *pred;
-  struct variable *resid;
+  int dependent_column; /* Column containing the dependent variable. Defaults to last column. */
+  int refcnt;
+
+  bool origin;
 };
 
 typedef struct linreg_struct linreg;
 
 
 
-linreg *linreg_alloc (const struct variable *, const struct variable **, 
-                     double, size_t);
+linreg *linreg_alloc (const struct variable *, const struct variable **,
+                     double, size_t, bool);
 
-bool linreg_free (void *);
+void linreg_unref (linreg *);
+void linreg_ref (linreg *);
 
 /*
   Fit the linear model via least squares. All pointers passed to pspp_linreg
   are assumed to be allocated to the correct size and initialized to the
   values as indicated by opts.
  */
-void
-linreg_fit (const gsl_matrix *, linreg *);
+void linreg_fit (const gsl_matrix *, linreg *);
 
-double
-linreg_predict (const linreg *, const double *, size_t);
-double
-linreg_residual (const linreg *, double, const double *, size_t);
+double linreg_predict (const linreg *, const double *, size_t);
+double linreg_residual (const linreg *, double, const double *, size_t);
 const struct variable ** linreg_get_vars (const linreg *);
 
-/*
-  Return or set the standard deviation of the independent variable.
- */
-double linreg_get_indep_variable_sd (linreg *, size_t);
-void linreg_set_indep_variable_sd (linreg *, size_t, double);
 /*
   Mean of the independent variable.
  */
-double linreg_get_indep_variable_mean (linreg *, size_t);
+double linreg_get_indep_variable_mean (const linreg *, size_t);
 void linreg_set_indep_variable_mean (linreg *, size_t, double);
 
 double linreg_mse (const linreg *);
 
 double linreg_intercept (const linreg *);
 
-gsl_matrix * linreg_cov (const linreg *);
+const gsl_matrix * linreg_cov (const linreg *);
 double linreg_coeff (const linreg *, size_t);
 const struct variable * linreg_indep_var (const linreg *, size_t);
 size_t linreg_n_coeffs (const linreg *);
@@ -192,5 +185,5 @@ double linreg_ssreg (const linreg *);
 double linreg_dfmodel (const linreg *);
 double linreg_sst (const linreg *);
 void linreg_set_depvar_mean (linreg *, double);
-double linreg_get_depvar_mean (linreg *);
+double linreg_get_depvar_mean (const linreg *);
 #endif