projects
/
pspp
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
merging works
[pspp]
/
src
/
math
/
linreg.c
diff --git
a/src/math/linreg.c
b/src/math/linreg.c
index be330bc40e211daa701243815e95072591c1b968..d417599babd94f9fa9afc9030b457ca8e03bfcb4 100644
(file)
--- a/
src/math/linreg.c
+++ b/
src/math/linreg.c
@@
-275,11
+275,11
@@
linreg_predict (const struct linreg *c, const double *vals, size_t n_vals)
size_t j;
double result;
size_t j;
double result;
- assert (n_vals = c->n_coeffs);
if (vals == NULL || c == NULL)
{
return GSL_NAN;
}
if (vals == NULL || c == NULL)
{
return GSL_NAN;
}
+ assert (n_vals == c->n_coeffs);
if (c->coeff == NULL)
{
/* The stupid model: just guess the mean. */
if (c->coeff == NULL)
{
/* The stupid model: just guess the mean. */
@@
-322,6
+322,7
@@
linreg_set_indep_variable_mean (struct linreg *c, size_t j, double m)
gsl_vector_set (c->indep_means, j, m);
}
gsl_vector_set (c->indep_means, j, m);
}
+#if 0
static void
linreg_fit_qr (const gsl_matrix *cov, struct linreg *l)
{
static void
linreg_fit_qr (const gsl_matrix *cov, struct linreg *l)
{
@@
-415,6
+416,7
@@
linreg_fit_qr (const gsl_matrix *cov, struct linreg *l)
gsl_matrix_free (xtx);
gsl_vector_free (params);
}
gsl_matrix_free (xtx);
gsl_vector_free (params);
}
+#endif
#define REG_LARGE_DATA 1000
#define REG_LARGE_DATA 1000
@@
-432,6
+434,9
@@
linreg_fit (const gsl_matrix *cov, struct linreg *l)
l->sst = gsl_matrix_get (cov, cov->size1 - 1, cov->size2 - 1);
l->sst = gsl_matrix_get (cov, cov->size1 - 1, cov->size2 - 1);
+#if 0
+ /* This QR decomposition path seems to produce the incorrect
+ values. See https://savannah.gnu.org/bugs/?51373 */
if ((l->n_obs * l->n_obs > l->n_indeps) && (l->n_obs > REG_LARGE_DATA))
{
/*
if ((l->n_obs * l->n_obs > l->n_indeps) && (l->n_obs > REG_LARGE_DATA))
{
/*
@@
-440,6
+445,7
@@
linreg_fit (const gsl_matrix *cov, struct linreg *l)
linreg_fit_qr (cov, l);
}
else
linreg_fit_qr (cov, l);
}
else
+#endif
{
gsl_matrix *params = gsl_matrix_calloc (cov->size1, cov->size2);
gsl_matrix_memcpy (params, cov);
{
gsl_matrix *params = gsl_matrix_calloc (cov->size1, cov->size2);
gsl_matrix_memcpy (params, cov);
@@
-524,19
+530,19
@@
double linreg_sst (const struct linreg *c)
}
double
}
double
-linreg_dfmodel (
const struct linreg *c)
+linreg_dfmodel (const struct linreg *c)
{
return c->dfm;
}
double
{
return c->dfm;
}
double
-linreg_dferror (
const struct linreg *c)
+linreg_dferror (const struct linreg *c)
{
return c->dfe;
}
double
{
return c->dfe;
}
double
-linreg_dftotal (
const struct linreg *c)
+linreg_dftotal (const struct linreg *c)
{
return c->dft;
}
{
return c->dft;
}