projects
/
pspp
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
removed "written by" line
[pspp]
/
src
/
math
/
coefficient.c
diff --git
a/src/math/coefficient.c
b/src/math/coefficient.c
index ef3eadfa17a1d1776dcd30d55f96da290b8a8469..fe0cd43877f3ab57c71f95b8a4b43d30b63098ee 100644
(file)
--- a/
src/math/coefficient.c
+++ b/
src/math/coefficient.c
@@
-21,6
+21,7
@@
/*
Accessor functions for matching coefficients and variables.
*/
/*
Accessor functions for matching coefficients and variables.
*/
+#include <config.h>
#include <math/coefficient.h>
#include <math/linreg/linreg.h>
#include "src/math/design-matrix.h"
#include <math/coefficient.h>
#include <math/linreg/linreg.h>
#include "src/math/design-matrix.h"
@@
-53,39
+54,32
@@
pspp_coeff_free (struct pspp_coeff *c)
coefficient structures for the linear model.
*/
void
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, const
struct design_matrix *X)
{
size_t i;
{
size_t i;
- size_t j;
int n_vals = 1;
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++)
{
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.
*/
interactions. This line will have to
change when procedures that allow
interaction terms are written.
*/
- c
oeff->v_info = xnmalloc (coeff->n_vars, sizeof (*coeff
->v_info));
- assert (c
oeff
->v_info != NULL);
- c
oeff
->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);
(const struct variable *) design_matrix_col_to_var (X, i);
- if (
coeff->v_info->v->type == ALPHA
)
+ if (
var_is_alpha (c[i]->v_info->v)
)
{
size_t k;
{
size_t k;
- k = design_matrix_var_to_column (X, c
oeff
->v_info->v);
+ k = design_matrix_var_to_column (X, c
[i]
->v_info->v);
assert (k <= i);
k = i - k;
assert (k <= i);
k = i - k;
- c
oeff
->v_info->val =
- cat_subscript_to_value (k, (struct variable *) c
oeff
->v_info->v);
+ c
[i]
->v_info->val =
+ cat_subscript_to_value (k, (struct variable *) c
[i]
->v_info->v);
}
}
}
}
}
}
@@
-169,14
+163,14
@@
pspp_coeff_get_value (struct pspp_coeff *c,
{
return NULL;
}
{
return NULL;
}
- if (v
->type == NUMERIC
)
+ if (v
ar_is_numeric (v)
)
{
return NULL;
}
while (i < c->n_vars)
{
candidate = pspp_coeff_get_var (c, i);
{
return NULL;
}
while (i < c->n_vars)
{
candidate = pspp_coeff_get_var (c, i);
- if (v
->index == candidate->index
)
+ if (v
== candidate
)
{
return (c->v_info + i)->val;
}
{
return (c->v_info + i)->val;
}
@@
-208,7
+202,7
@@
pspp_linreg_get_coeff (const pspp_linreg_cache * c,
result = c->coeff[i];
tmp = pspp_coeff_get_var (result, 0);
result = c->coeff[i];
tmp = pspp_coeff_get_var (result, 0);
- while (tmp
->index != v->index
&& i < c->n_coeffs)
+ while (tmp
!= v
&& i < c->n_coeffs)
{
result = c->coeff[i];
tmp = pspp_coeff_get_var (result, 0);
{
result = c->coeff[i];
tmp = pspp_coeff_get_var (result, 0);
@@
-218,7
+212,7
@@
pspp_linreg_get_coeff (const pspp_linreg_cache * c,
{
return NULL;
}
{
return NULL;
}
- if (v
->type == NUMERIC
)
+ if (v
ar_is_numeric (v)
)
{
return result;
}
{
return result;
}
@@
-228,9
+222,9
@@
pspp_linreg_get_coeff (const pspp_linreg_cache * c,
If v is categorical, we need to ensure the coefficient
matches the VAL.
*/
If v is categorical, we need to ensure the coefficient
matches the VAL.
*/
- while (tmp
->index != v->index
&& i < c->n_coeffs
+ while (tmp
!= v
&& i < c->n_coeffs
&& compare_values (pspp_coeff_get_value (result, tmp),
&& compare_values (pspp_coeff_get_value (result, tmp),
- val, v
->width
))
+ val, v
ar_get_width (v)
))
{ /* FIX THIS */
i++;
result = c->coeff[i];
{ /* FIX THIS */
i++;
result = c->coeff[i];