projects
/
pspp
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Logistic Regression: Added categorical variable support
[pspp]
/
src
/
language
/
stats
/
regression.c
diff --git
a/src/language/stats/regression.c
b/src/language/stats/regression.c
index 0a2e2a8cf67c08fae3bdd26f658654176f63e348..cb2c3ff31bd2cd77334f38922c3b3b80ad9314c0 100644
(file)
--- a/
src/language/stats/regression.c
+++ b/
src/language/stats/regression.c
@@
-196,16
+196,15
@@
reg_get_name (const struct dictionary *dict, const char *prefix)
static bool
regression_trns_free (void *t_)
{
static bool
regression_trns_free (void *t_)
{
- bool result = true;
struct reg_trns *t = t_;
if (t->trns_id == t->n_trns)
{
struct reg_trns *t = t_;
if (t->trns_id == t->n_trns)
{
-
result = linreg_free
(t->c);
+
linreg_unref
(t->c);
}
free (t);
}
free (t);
- return
result
;
+ return
true
;
}
static void
}
static void
@@
-249,6
+248,7
@@
subcommand_save (const struct regression *cmd)
{
if ((*lc)->depvar != NULL)
{
{
if ((*lc)->depvar != NULL)
{
+ (*lc)->refcnt++;
if (cmd->resid)
{
reg_save_var (cmd->ds, "RES", regression_trns_resid_proc, *lc,
if (cmd->resid)
{
reg_save_var (cmd->ds, "RES", regression_trns_resid_proc, *lc,
@@
-267,6
+267,7
@@
subcommand_save (const struct regression *cmd)
int
cmd_regression (struct lexer *lexer, struct dataset *ds)
{
int
cmd_regression (struct lexer *lexer, struct dataset *ds)
{
+ int k;
struct regression regression;
const struct dictionary *dict = dataset_dict (ds);
struct regression regression;
const struct dictionary *dict = dataset_dict (ds);
@@
-400,12
+401,24
@@
cmd_regression (struct lexer *lexer, struct dataset *ds)
}
if (regression.pred || regression.resid )
}
if (regression.pred || regression.resid )
- subcommand_save (®ression);
+ {
+ subcommand_save (®ression);
+ }
+ for (k = 0; k < regression.n_dep_vars; k++)
+ linreg_unref (regression.models[k]);
+ free (regression.models);
+ free (regression.vars);
+ free (regression.dep_vars);
return CMD_SUCCESS;
error:
return CMD_SUCCESS;
error:
+ for (k = 0; k < regression.n_dep_vars; k++)
+ linreg_unref (regression.models[k]);
+ free (regression.models);
+ free (regression.vars);
+ free (regression.dep_vars);
return CMD_FAILURE;
}
return CMD_FAILURE;
}
@@
-671,10
+684,10
@@
run_regression (const struct regression *cmd, struct casereader *input)
}
else
{
}
else
{
- msg (SE,
+
msg (SE,
_("No valid data found. This command was skipped."));
_("No valid data found. This command was skipped."));
-
linreg_free
(models[k]);
- models[k] = NULL;
+
linreg_unref
(models[k]);
+
models[k] = NULL;
}
gsl_matrix_free (this_cm);
}
}
gsl_matrix_free (this_cm);
}