X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fmath%2Flinreg.c;h=6a0d57f4c3eb20bb67026ff2c36959580cac4174;hb=e385eeb8a2ea75fb2d9c1c628619baa03c914dae;hp=bb4de0c21c57a08faaf46e76022d52485c8f800f;hpb=74469ec6a0f6b5b33c4afaace173710adac46634;p=pspp-builds.git diff --git a/src/math/linreg.c b/src/math/linreg.c index bb4de0c2..6a0d57f4 100644 --- a/src/math/linreg.c +++ b/src/math/linreg.c @@ -70,10 +70,15 @@ linreg_alloc (const struct variable *depvar, const struct variable **indep_vars, double n, size_t p) { linreg *c; + size_t i; - c = xmalloc (sizeof (linreg)); + c = xmalloc (sizeof (*c)); c->depvar = depvar; - c->indep_vars = indep_vars; + c->indep_vars = xnmalloc (p, sizeof (*indep_vars)); + for (i = 0; i < p; i++) + { + c->indep_vars[i] = indep_vars[i]; + } c->indep_means = gsl_vector_alloc (p); c->indep_std = gsl_vector_alloc (p); c->ssx = gsl_vector_alloc (p); /* Sums of squares for the @@ -95,8 +100,8 @@ linreg_alloc (const struct variable *depvar, const struct variable **indep_vars, Default settings. */ c->method = LINREG_SWEEP; - c->resid = NULL; /* The variable storing my residuals. */ - c->pred = NULL; /* The variable storing my predicted values. */ + c->pred = NULL; + c->resid = NULL; return c; } @@ -111,6 +116,7 @@ linreg_free (void *m) gsl_vector_free (c->indep_std); gsl_matrix_free (c->cov); gsl_vector_free (c->ssx); + free (c->indep_vars); free (c->coeff); free (c); } @@ -359,6 +365,7 @@ linreg_fit (const gsl_matrix *cov, linreg *l) params = gsl_matrix_calloc (cov->size1, cov->size2); gsl_matrix_memcpy (params, cov); + l->sst = gsl_matrix_get (cov, cov->size1 - 1, cov->size2 - 1); if (l->method == LINREG_SWEEP) { @@ -413,10 +420,21 @@ linreg_n_obs (const linreg *c) return c->n_obs; } +double +linreg_sse (const linreg *c) +{ + return c->sse; +} + double linreg_ssreg (const linreg *c) { - return c->ssm; + return (c->sst - c->sse); +} + +double linreg_sst (const linreg *c) +{ + return c->sst; } double