[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Pspp-cvs] pspp/src regression.q
From: |
Jason H Stover |
Subject: |
[Pspp-cvs] pspp/src regression.q |
Date: |
Mon, 09 Jan 2006 00:51:19 +0000 |
CVSROOT: /sources/pspp
Module name: pspp
Branch:
Changes by: Jason H Stover <address@hidden> 06/01/09 00:51:19
Modified files:
src : regression.q
Log message:
Functions to handle coefficient-to-variable/value matching
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/pspp/pspp/src/regression.q.diff?tr1=1.34&tr2=1.35&r1=text&r2=text
Patches:
Index: pspp/src/regression.q
diff -u pspp/src/regression.q:1.34 pspp/src/regression.q:1.35
--- pspp/src/regression.q:1.34 Fri Jan 6 17:27:16 2006
+++ pspp/src/regression.q Mon Jan 9 00:51:18 2006
@@ -91,56 +91,6 @@
int pspp_reg_rc = CMD_SUCCESS;
static void run_regression (const struct casefile *, void *);
-static union value *pspp_reg_coefficient_to_value (const pspp_linreg_cache *,
- const struct
- pspp_linreg_coeff *,
- size_t);
-
-/*
- Which value of a categorical variable corresponds to the
- coefficient? This routine provides the answer IF the
- categorical variable is encoded in the usual way: The
- first value maps to the zero vector, the second value to
- the vector (0, 1, 0, ...), the third value (0, 0, 1, 0, ...),
- etc.
- */
-static union value *
-pspp_reg_coefficient_to_value (const pspp_linreg_cache * cache,
- const struct pspp_linreg_coeff *coeff,
- size_t j)
-{
- size_t which = 0;
- int k = 1; /* First coefficient is the intercept. */
- int found = 0;
- const union value *result;
- struct pspp_linreg_coeff c;
-
- assert (cache != NULL);
- assert (coeff != NULL);
- assert (coeff->v->type == ALPHA);
- while (!found && k < cache->n_coeffs)
- {
- c = cache->coeff[k];
- /*
- compare_var_names returns 0 if the variable
- names match.
- */
- if (!compare_var_names (coeff->v, c.v, NULL))
- {
- if (j == k)
- {
- found = 1;
- }
- else
- {
- which++;
- }
- }
- k++;
- }
- result = cat_subscript_to_value ((const size_t) which, coeff->v);
- return result;
-}
/*
STATISTICS subcommand output functions.
@@ -213,6 +163,7 @@
double beta;
const char *label;
char *tmp;
+ const struct variable *v;
const union value *val;
const char *val_s;
struct tab_table *t;
@@ -248,18 +199,20 @@
for (j = 1; j <= c->n_indeps; j++)
{
i = indep_vars[j];
- label = var_to_string (c->coeff[j].v);
+ v = pspp_linreg_coeff_get_var (c->coeff + j, 0);
+ label = var_to_string (v);
/* Do not overwrite the variable's name. */
strncpy (tmp, label, MAX_STRING);
- if (c->coeff[j].v->type == ALPHA)
+ if (v->type == ALPHA)
{
/*
Append the value associated with this coefficient.
This makes sense only if we us the usual binary encoding
for that value.
*/
- val = pspp_reg_coefficient_to_value (c, &(c->coeff[j]), j);
- val_s = value_to_string (val, c->coeff[j].v);
+
+ val = pspp_linreg_coeff_get_value (c->coeff + j, v);
+ val_s = value_to_string (val, v);
strncat (tmp, val_s, MAX_STRING);
}
@@ -544,7 +497,7 @@
statistics_keyword_output (reg_stats_selection, keywords[selection], c);
}
static int
-reg_inserted (struct variable *v, struct variable **varlist, int n_vars)
+reg_inserted (const struct variable *v, struct variable **varlist, int n_vars)
{
int i;
@@ -564,7 +517,8 @@
size_t j;
int n_vars = 0;
struct variable **varlist;
- struct pspp_linreg_coeff coeff;
+ struct pspp_linreg_coeff *coeff;
+ const struct variable *v;
union value *val;
fprintf (fp, "%s", reg_export_categorical_encode_1);
@@ -572,14 +526,15 @@
varlist = xnmalloc (c->n_indeps, sizeof (*varlist));
for (i = 1; i < c->n_indeps; i++) /* c->coeff[0] is the intercept. */
{
- coeff = c->coeff[i];
- if (coeff.v->type == ALPHA)
+ coeff = c->coeff + i;
+ v = pspp_linreg_coeff_get_var (coeff, 0);
+ if (v->type == ALPHA)
{
- if (!reg_inserted (coeff.v, varlist, n_vars))
+ if (!reg_inserted (v, varlist, n_vars))
{
fprintf (fp, "struct pspp_reg_categorical_variable %s;\n\t",
- coeff.v->name);
- varlist[n_vars] = coeff.v;
+ v->name);
+ varlist[n_vars] = (struct variable *) v;
n_vars++;
}
}
@@ -595,7 +550,7 @@
for (i = 0; i < n_vars; i++)
{
- coeff = c->coeff[i];
+ coeff = c->coeff + i;
fprintf (fp, "%s.name = \"%s\";\n\t", varlist[i]->name,
varlist[i]->name);
fprintf (fp, "%s.n_vals = %d;\n\t", varlist[i]->name,
@@ -615,16 +570,19 @@
reg_print_depvars (FILE * fp, pspp_linreg_cache * c)
{
int i;
- struct pspp_linreg_coeff coeff;
+ struct pspp_linreg_coeff *coeff;
+ const struct variable *v;
fprintf (fp, "char *model_depvars[%d] = {", c->n_indeps);
for (i = 1; i < c->n_indeps; i++)
{
- coeff = c->coeff[i];
- fprintf (fp, "\"%s\",\n\t\t", coeff.v->name);
- }
- coeff = c->coeff[i];
- fprintf (fp, "\"%s\"};\n\t", coeff.v->name);
+ coeff = c->coeff + i;
+ v = pspp_linreg_coeff_get_var (coeff, 0);
+ fprintf (fp, "\"%s\",\n\t\t", v->name);
+ }
+ coeff = c->coeff + i;
+ v = pspp_linreg_coeff_get_var (coeff, 0);
+ fprintf (fp, "\"%s\"};\n\t", v->name);
}
static void
reg_print_getvar (FILE * fp, pspp_linreg_cache * c)
@@ -640,7 +598,6 @@
static void
subcommand_export (int export, pspp_linreg_cache * c)
{
- FILE *fp;
size_t i;
size_t j;
int n_quantiles = 100;
@@ -650,6 +607,7 @@
if (export)
{
+ FILE *fp;
assert (c != NULL);
assert (model_file != NULL);
assert (fp != NULL);
@@ -776,12 +734,12 @@
*/
static size_t
mark_missing_cases (const struct casefile *cf, struct variable *v,
- double *is_missing_case, double n_data)
+ int *is_missing_case, double n_data)
{
struct casereader *r;
struct ccase c;
size_t row;
- union value *val;
+ const union value *val;
for (r = casefile_get_reader (cf);
casereader_read (r, &c); case_destroy (&c))
@@ -804,6 +762,7 @@
return n_data;
}
+
static void
run_regression (const struct casefile *cf, void *cmd_ UNUSED)
{
@@ -955,14 +914,7 @@
and store pointers to the variables that correspond to the
coefficients.
*/
- lcache->coeff = xnmalloc (X->m->size2 + 1, sizeof (*lcache->coeff));
- for (i = 0; i < X->m->size2; i++)
- {
- j = i + 1; /* The first coeff is the intercept. */
- lcache->coeff[j].v =
- (const struct variable *) design_matrix_col_to_var (X, i);
- assert (lcache->coeff[j].v != NULL);
- }
+ pspp_linreg_coeff_init (lcache, X);
/*
Find the least-squares estimates and other statistics.