- models[k]->method = PSPP_LINREG_SVD;
- }
-
- /*
- The second pass fills the design matrix.
- */
- row = 0;
- for (r = casefile_get_reader (cf); casereader_read (r, &c);
- case_destroy (&c))
- /* Iterate over the cases. */
- {
- case_num = casereader_cnum (r) - 1;
- if (!is_missing_case[case_num])
+ Y = gsl_vector_alloc (n_data);
+
+ X =
+ design_matrix_create (n_indep, (const struct variable **) indep_vars,
+ n_data);
+ for (i = 0; i < X->m->size2; i++)
+ {
+ lopts.get_indep_mean_std[i] = 1;
+ }
+ models[k] = pspp_linreg_cache_alloc (X->m->size1, X->m->size2);
+ models[k]->indep_means = gsl_vector_alloc (X->m->size2);
+ models[k]->indep_std = gsl_vector_alloc (X->m->size2);
+ models[k]->depvar = (const struct variable *) cmd.v_dependent[k];
+ /*
+ For large data sets, use QR decomposition.
+ */
+ if (n_data > sqrt (n_indep) && n_data > REG_LARGE_DATA)
+ {
+ models[k]->method = PSPP_LINREG_SVD;
+ }
+
+ /*
+ The second pass fills the design matrix.
+ */
+ row = 0;
+ for (r = casefile_get_reader (cf, NULL); casereader_read (r, &c);
+ case_destroy (&c))
+ /* Iterate over the cases. */