#include <gsl/gsl_multifit.h>
#include <linreg/sweep.h>
#include <math/linreg.h>
-#include <src/data/category.h>
#include <src/data/variable.h>
#include <src/data/value.h>
#include <gl/xalloc.h>
c = xmalloc (sizeof (*c));
c->depvar = depvar;
c->indep_vars = xnmalloc (p, sizeof (*indep_vars));
+ c->dependent_column = p;
for (i = 0; i < p; i++)
{
c->indep_vars[i] = indep_vars[i];
assert (c != NULL);
gsl_vector_set (c->indep_means, j, m);
}
-static void invert_r (gsl_matrix *r, gsl_matrix *r_inv)
-{
- size_t i;
- size_t j;
- size_t k;
- size_t row;
- double tmp;
-
- for (i = 0; i < r->size1; i++)
- {
- gsl_matrix_set (r_inv, i, i, 1.0 / gsl_matrix_get (r, i, i));
- }
- for (i = 0; i < r->size1; i++)
- {
- row = 0;
- for (j = row + 1 + i; j < r->size2; j++)
- {
- tmp = 0.0;
- for (k = 1; k <= j - row; k++)
- {
- tmp += gsl_matrix_get (r, row, row + k)
- * gsl_matrix_get (r_inv, row + k, j);
- }
- gsl_matrix_set (r_inv, row, j, -tmp / gsl_matrix_get (r, row, row));
- row++;
- }
- }
-}
static void
linreg_fit_qr (const gsl_matrix *cov, linreg *l)
{
+ double intcpt_coef = 0.0;
+ double intercept_variance = 0.0;
gsl_matrix *xtx;
gsl_matrix *q;
gsl_matrix *r;
gsl_blas_dtrsm (CblasLeft, CblasLower, CblasNoTrans, CblasNonUnit, linreg_mse (l),
r, q);
/* Copy the lower triangle into the upper triangle. */
- double intercept_variance = 0.0;
for (i = 0; i < q->size1; i++)
{
gsl_matrix_set (l->cov, i + 1, i + 1, gsl_matrix_get (q, i, i));
/* Covariances related to the intercept. */
intercept_variance += linreg_mse (l) / linreg_n_obs (l);
gsl_matrix_set (l->cov, 0, 0, intercept_variance);
- double intcpt_coef = 0.0;
for (i = 0; i < q->size1; i++)
{
for (j = 0; j < q->size2; j++)
gsl_matrix *params;
params = gsl_matrix_calloc (cov->size1, cov->size2);
gsl_matrix_memcpy (params, cov);
- reg_sweep (params);
+ reg_sweep (params, l->dependent_column);
post_sweep_computations (l, params);
gsl_matrix_free (params);
}
{
return c->depvar_mean;
}
+static
+linreg_set_dependent_column (linreg *c, int column)
+{
+ c->dependent_column = column;
+}
+