X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flanguage%2Fstats%2Fglm.q;h=ad8bf55e9dfd5dfee172289eb099e42c8922ab22;hb=96b31e17b2c336995db448531ab7f86f57319b5f;hp=1b91ba8166c389bb0e40bb002ac9bc984b0364e9;hpb=169887f6d6d7bf5c10d5b05786aa3fd252040c93;p=pspp-builds.git diff --git a/src/language/stats/glm.q b/src/language/stats/glm.q index 1b91ba81..ad8bf55e 100644 --- a/src/language/stats/glm.q +++ b/src/language/stats/glm.q @@ -47,7 +47,7 @@ #include "xalloc.h" #include "gettext.h" -#define GLM_LARGE_DATA 1000 +#define GLM_LARGE_DATA 10000 /* (headers) */ @@ -339,6 +339,17 @@ run_glm (struct casereader *input, } } } + model = pspp_linreg_cache_alloc (n_data, n_indep); + model->depvar = v_dependent; + /* + For large data sets, use QR decomposition. + */ + if (n_data > sqrt (n_indep) && n_data > GLM_LARGE_DATA) + { + model->method = PSPP_LINREG_QR; + } + coeff_init (model, X); + pspp_linreg_with_cov (X, model); casereader_destroy (reader); for (i = 0; i < n_all_vars; i++) { @@ -357,6 +368,7 @@ run_glm (struct casereader *input, } free (indep_vars); free (lopts.get_indep_mean_std); + pspp_linreg_cache_free (model); casereader_destroy (input); return true;