- 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);
-}
-
-/*
- Put the moments in the linreg cache.
- */
-static void
-compute_moments (pspp_linreg_cache * c, struct moments_var *mom,
- struct design_matrix *dm, size_t n)
-{
- size_t i;
- size_t j;
- double weight;
- double mean;
- double variance;
- double skewness;
- double kurtosis;
- /*
- Scan the variable names in the columns of the design matrix.
- When we find the variable we need, insert its mean in the cache.
- */
- for (i = 0; i < dm->m->size2; i++)
- {
- for (j = 0; j < n; j++)
- {
- if (design_matrix_col_to_var (dm, i) == (mom + j)->v)
- {
- moments1_calculate ((mom + j)->m, &weight, &mean, &variance,
- &skewness, &kurtosis);
- gsl_vector_set (c->indep_means, i, mean);
- gsl_vector_set (c->indep_std, i, sqrt (variance));
- }
- }
- }
-}
-
-/* Encode categorical variables.
- Returns number of valid cases. */
-static int
-data_pass_one (struct casereader *input,
- const struct variable **vars, size_t n_vars,
- struct moments_var **mom)
-{
- int n_data;
- struct ccase c;
- size_t i;
-
- for (i = 0; i < n_vars; i++)
- {
- mom[i] = xmalloc (sizeof (*mom[i]));
- mom[i]->v = vars[i];
- mom[i]->mean = xmalloc (sizeof (*mom[i]->mean));
- mom[i]->variance = xmalloc (sizeof (*mom[i]->mean));
- mom[i]->weight = xmalloc (sizeof (*mom[i]->weight));
- mom[i]->m = moments1_create (MOMENT_VARIANCE);
- if (var_is_alpha (vars[i]))
- cat_stored_values_create (vars[i]);
- }
-
- n_data = 0;
- for (; casereader_read (input, &c); case_destroy (&c))
- {
- /*
- The second condition ensures the program will run even if
- there is only one variable to act as both explanatory and
- response.
- */
- for (i = 0; i < n_vars; i++)
- {
- const union value *val = case_data (&c, vars[i]);
- if (var_is_alpha (vars[i]))
- cat_value_update (vars[i], val);
- else
- moments1_add (mom[i]->m, val->f, 1.0);
- }
- n_data++;
- }
- casereader_destroy (input);
- for (i = 0; i < n_vars; i++)
- {
- if (var_is_numeric (mom[i]->v))
- {
- moments1_calculate (mom[i]->m, mom[i]->weight, mom[i]->mean,
- mom[i]->variance, NULL, NULL);
- }
- }
-
- return n_data;