*/
struct moments_var
{
- struct moments *m;
- struct variable *v;
+ struct moments1 *m;
+ const struct variable *v;
};
/* Linear regression models. */
/*
Variables used (both explanatory and response).
*/
-static struct variable **v_variables;
+static const struct variable **v_variables;
/*
Number of variables.
Compute the first two moments.
*/
static size_t
-mark_missing_cases (const struct casefile *cf, struct variable *v,
- int *is_missing_case, double n_data, struct moments_var *mom)
+mark_missing_cases (const struct casefile *cf, const struct variable *v,
+ int *is_missing_case, double n_data,
+ struct moments_var *mom)
{
struct casereader *r;
struct ccase c;
size_t row;
const union value *val;
+ double w = 1.0;
for (r = casefile_get_reader (cf, NULL);
casereader_read (r, &c); case_destroy (&c))
val = case_data (&c, v);
if (mom != NULL)
{
- moments_pass_one (mom->m, val->f, 1.0);
+ moments1_add (mom->m, val->f, w);
}
cat_value_update (v, val);
if (var_is_value_missing (v, val, MV_ANY))
return 2;
- if (!parse_variables (lexer, dict, &v_variables, &n_variables, PV_NONE))
+ if (!parse_variables_const (lexer, dict, &v_variables, &n_variables, PV_NONE))
{
free (v_variables);
return 0;
*/
static int
prepare_data (int n_data, int is_missing_case[],
- struct variable **indep_vars,
- struct variable *depvar, const struct casefile *cf, struct moments_var *mom)
+ const struct variable **indep_vars,
+ const struct variable *depvar, const struct casefile *cf,
+ struct moments_var *mom)
{
int i;
int j;
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));
+ }
+ }
+ }
+}
static bool
run_regression (const struct ccase *first,
const struct casefile *cf, void *cmd_ UNUSED, const struct dataset *ds)
const union value *val;
struct casereader *r;
struct ccase c;
- struct variable **indep_vars;
+ const struct variable **indep_vars;
struct design_matrix *X;
struct moments_var *mom;
gsl_vector *Y;
mom = xnmalloc (n_variables, sizeof (*mom));
for (i = 0; i < n_variables; i++)
{
- (mom + i)->m = moments_create (MOMENT_VARIANCE);
+ (mom + i)->m = moments1_create (MOMENT_VARIANCE);
(mom + i)->v = v_variables[i];
}
lopts.get_depvar_mean_std = 1;
Find the least-squares estimates and other statistics.
*/
pspp_linreg ((const gsl_vector *) Y, X->m, &lopts, models[k]);
+ compute_moments (models[k], mom, X, n_variables);
subcommand_statistics (cmd.a_statistics, models[k]);
subcommand_export (cmd.sbc_export, models[k]);
}
for (i = 0; i < n_variables; i++)
{
- moments_destroy ((mom + i)->m);
+ moments1_destroy ((mom + i)->m);
}
free (mom);
free (is_missing_case);