X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fmath%2Flinreg.h;h=b08f7d0e431dd61190efbf82fb2850e9c7053792;hb=391b4634b4b46764360c4c39ce94bb90d6e3176a;hp=17fe3c733c990e45df1b3a4012baf6b84a3d9608;hpb=e385eeb8a2ea75fb2d9c1c628619baa03c914dae;p=pspp diff --git a/src/math/linreg.h b/src/math/linreg.h index 17fe3c733c..b08f7d0e43 100644 --- a/src/math/linreg.h +++ b/src/math/linreg.h @@ -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 @@ -16,10 +16,11 @@ #ifndef LINREG_H #define LINREG_H -#include + #include -#include #include +#include +#include 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,19 +121,12 @@ 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 / dfe, but since it is the best unbiased estimate of the population variance, it has its own entry here. */ - gsl_vector *ssx; /* Centered sums of squares for independent - variables, i.e. \sum (x[i] - mean(x))^2. */ - double ssy; /* Centered sums of squares for dependent - variable. - */ /* Covariance matrix of the parameter estimates. */ @@ -145,14 +138,8 @@ struct linreg_struct double dfe; double dfm; - /* - 'Hat' or Hessian matrix, i.e. (X'X)^{-1}, where X is our - design matrix. - */ - gsl_matrix *hat; - - struct variable *pred; - struct variable *resid; + int dependent_column; /* Column containing the dependent variable. Defaults to last column. */ + int refcnt; }; typedef struct linreg_struct linreg; @@ -162,44 +149,39 @@ typedef struct linreg_struct linreg; linreg *linreg_alloc (const struct variable *, const struct variable **, double, size_t); -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 *); -size_t linreg_n_obs (const linreg *); +double linreg_n_obs (const linreg *); double linreg_sse (const linreg *); 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 (const linreg *); #endif