From 92f198d13c9214c0d75b936f0ea0dc2684ea914b Mon Sep 17 00:00:00 2001 From: Jason Stover Date: Fri, 14 Jul 2006 19:17:50 +0000 Subject: [PATCH] moved knowledge of pspp_linreg_cache out of pspp_coeff_init --- src/language/stats/ChangeLog | 5 +++++ src/language/stats/regression.q | 13 ++++++++++--- src/math/ChangeLog | 5 +++++ src/math/coefficient.c | 27 ++++++++++----------------- src/math/coefficient.h | 2 +- 5 files changed, 31 insertions(+), 21 deletions(-) diff --git a/src/language/stats/ChangeLog b/src/language/stats/ChangeLog index 0a0abfb6..eb943c60 100644 --- a/src/language/stats/ChangeLog +++ b/src/language/stats/ChangeLog @@ -1,3 +1,8 @@ +2006-07-14 Jason Stover + + * regression.q (run_regression): New function to move knowledge of + pspp_linreg_cache out of math/coefficient.[ch]. + Sat Jul 1 17:41:46 2006 Ben Pfaff Fix bug #11612, "q2c documentation does not agree with code". diff --git a/src/language/stats/regression.q b/src/language/stats/regression.q index 4e82a923..3706760a 100644 --- a/src/language/stats/regression.q +++ b/src/language/stats/regression.q @@ -1078,7 +1078,14 @@ prepare_data (int n_data, int is_missing_case[], return n_data; } - +static void +coeff_init (pspp_linreg_cache *c, struct design_matrix *dm) +{ + c->coeff = xnmalloc (dm->m->size2 + 1, sizeof (*c->coeff)); + c->coeff[0] = xmalloc (sizeof (*(c->coeff[0]))); /* The first coefficient is the intercept. */ + c->coeff[0]->v_info = NULL; /* Intercept has no associated variable. */ + pspp_coeff_init (c->coeff + 1, dm); +} static bool run_regression (const struct ccase *first, const struct casefile *cf, void *cmd_ UNUSED) @@ -1213,8 +1220,8 @@ run_regression (const struct ccase *first, and store pointers to the variables that correspond to the coefficients. */ - pspp_coeff_init (models[k], X); - + coeff_init (models[k], X); + /* Find the least-squares estimates and other statistics. */ diff --git a/src/math/ChangeLog b/src/math/ChangeLog index 86186777..1d99752e 100644 --- a/src/math/ChangeLog +++ b/src/math/ChangeLog @@ -1,3 +1,8 @@ +2006-07-14 Jason Stover + + * coefficient.c (pspp_coeff_init): Removed use of + pspp_linreg_cache to make the routines more generally useful. + 2006-05-19 Jason Stover * coefficient.h: Renamed pspp_linreg_coeff to pspp_coeff. diff --git a/src/math/coefficient.c b/src/math/coefficient.c index ef3eadfa..fcd7425e 100644 --- a/src/math/coefficient.c +++ b/src/math/coefficient.c @@ -53,39 +53,32 @@ pspp_coeff_free (struct pspp_coeff *c) coefficient structures for the linear model. */ void -pspp_coeff_init (pspp_linreg_cache * c, struct design_matrix *X) +pspp_coeff_init (struct pspp_coeff ** c, struct design_matrix *X) { size_t i; - size_t j; int n_vals = 1; - struct pspp_coeff *coeff; - c->coeff = xnmalloc (X->m->size2 + 1, sizeof (*c->coeff)); - c->coeff[0] = xmalloc (sizeof (*c->coeff[0])); - c->coeff[0]->v_info = NULL; /* Intercept has no associated variable. */ for (i = 0; i < X->m->size2; i++) { - j = i + 1; /* The first coefficient is the intercept. */ - c->coeff[j] = xmalloc (sizeof (*c->coeff[j])); - coeff = c->coeff[j]; - coeff->n_vars = n_vals; /* Currently, no procedures allow + c[i] = xmalloc (sizeof (*c[i])); + c[i]->n_vars = n_vals; /* Currently, no procedures allow interactions. This line will have to change when procedures that allow interaction terms are written. */ - coeff->v_info = xnmalloc (coeff->n_vars, sizeof (*coeff->v_info)); - assert (coeff->v_info != NULL); - coeff->v_info->v = + c[i]->v_info = xnmalloc (c[i]->n_vars, sizeof (*c[i]->v_info)); + assert (c[i]->v_info != NULL); + c[i]->v_info->v = (const struct variable *) design_matrix_col_to_var (X, i); - if (coeff->v_info->v->type == ALPHA) + if (c[i]->v_info->v->type == ALPHA) { size_t k; - k = design_matrix_var_to_column (X, coeff->v_info->v); + k = design_matrix_var_to_column (X, c[i]->v_info->v); assert (k <= i); k = i - k; - coeff->v_info->val = - cat_subscript_to_value (k, (struct variable *) coeff->v_info->v); + c[i]->v_info->val = + cat_subscript_to_value (k, (struct variable *) c[i]->v_info->v); } } } diff --git a/src/math/coefficient.h b/src/math/coefficient.h index 7f11e8f1..4019c549 100644 --- a/src/math/coefficient.h +++ b/src/math/coefficient.h @@ -72,7 +72,7 @@ void pspp_coeff_free (struct pspp_coeff *); Initialize the variable and value pointers inside the coefficient structures for the linear model. */ -void pspp_coeff_init (pspp_linreg_cache *, struct design_matrix *); +void pspp_coeff_init (struct pspp_coeff **, struct design_matrix *); void -- 2.30.2