projects
/
pspp-builds.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix separation of categorical and numeric variables.
[pspp-builds.git]
/
src
/
language
/
stats
/
glm.q
diff --git
a/src/language/stats/glm.q
b/src/language/stats/glm.q
index a6622ce88d096cd9c350b2175b3fb31253db4685..1444a0c1b7a66c0866c5ea32eca348037d5c4667 100644
(file)
--- a/
src/language/stats/glm.q
+++ b/
src/language/stats/glm.q
@@
-228,18
+228,22
@@
glm_custom_dependent (struct lexer *lexer, struct dataset *ds,
struct cmd_glm *cmd UNUSED, void *aux UNUSED)
{
const struct dictionary *dict = dataset_dict (ds);
struct cmd_glm *cmd UNUSED, void *aux UNUSED)
{
const struct dictionary *dict = dataset_dict (ds);
+ size_t i;
if ((lex_token (lexer) != T_ID
|| dict_lookup_var (dict, lex_tokid (lexer)) == NULL)
&& lex_token (lexer) != T_ALL)
return 2;
if ((lex_token (lexer) != T_ID
|| dict_lookup_var (dict, lex_tokid (lexer)) == NULL)
&& lex_token (lexer) != T_ALL)
return 2;
- if (!parse_variables_const
- (lexer, dict, &v_dependent, &n_dependent, PV_NONE))
+ if (!parse_variables_const (lexer, dict, &v_dependent, &n_dependent, PV_NONE))
{
free (v_dependent);
return 0;
}
{
free (v_dependent);
return 0;
}
+ for (i = 0; i < n_dependent; i++)
+ {
+ assert (var_is_numeric (v_dependent[i]));
+ }
assert (n_dependent);
if (n_dependent > 1)
msg (SE, _("Multivariate GLM not yet supported"));
assert (n_dependent);
if (n_dependent > 1)
msg (SE, _("Multivariate GLM not yet supported"));
@@
-311,7
+315,18
@@
run_glm (struct casereader *input,
lopts.get_indep_mean_std = xnmalloc (n_dependent, sizeof (int));
lopts.get_indep_mean_std = xnmalloc (n_dependent, sizeof (int));
- n_numerics = cmd->n_with + n_dependent;
+ n_numerics = n_dependent;
+ for (i = 0; i < cmd->n_with; i++)
+ {
+ if (var_is_alpha (cmd->v_with[i]))
+ {
+ n_categoricals++;
+ }
+ else
+ {
+ n_numerics++;
+ }
+ }
for (i = 0; i < cmd->n_by; i++)
{
if (var_is_alpha (cmd->v_by[i]))
for (i = 0; i < cmd->n_by; i++)
{
if (var_is_alpha (cmd->v_by[i]))
@@
-323,33
+338,43
@@
run_glm (struct casereader *input,
n_numerics++;
}
}
n_numerics++;
}
}
- numerics = xnmalloc (n_
categorical
s, sizeof *numerics);
+ numerics = xnmalloc (n_
numeric
s, sizeof *numerics);
categoricals = xnmalloc (n_categoricals, sizeof (*categoricals));
categoricals = xnmalloc (n_categoricals, sizeof (*categoricals));
+ size_t j = 0;
size_t k = 0;
for (i = 0; i < cmd->n_by; i++)
{
if (var_is_alpha (cmd->v_by[i]))
{
size_t k = 0;
for (i = 0; i < cmd->n_by; i++)
{
if (var_is_alpha (cmd->v_by[i]))
{
- categoricals[k] = cmd->v_by[i];
+ categoricals[j] = cmd->v_by[i];
+ j++;
}
else
{
}
else
{
- numerics[
i
] = cmd->v_by[i];
+ numerics[
k
] = cmd->v_by[i];
k++;
}
}
k++;
}
}
- for (i = 0; i <
n_dependent
; i++)
+ for (i = 0; i <
cmd->n_with
; i++)
{
{
- k++;
- numerics[k] = v_dependent[i];
+ if (var_is_alpha (cmd->v_with[i]))
+ {
+ categoricals[j] = cmd->v_with[i];
+ j++;
+ }
+ else
+ {
+ numerics[k] = cmd->v_with[i];
+ k++;
+ }
}
}
- for (i = 0; i <
cmd->n_with
; i++)
+ for (i = 0; i <
n_dependent
; i++)
{
{
- k++;
numerics[k] = v_dependent[i];
numerics[k] = v_dependent[i];
+ k++;
}
}
- covariance_2pass_create (n_numerics, numerics, n_categoricals, categoricals, NULL, MV_NEVER);
+ cov
= cov
ariance_2pass_create (n_numerics, numerics, n_categoricals, categoricals, NULL, MV_NEVER);
reader = casereader_clone (input);
reader = casereader_create_filter_missing (reader, numerics, n_numerics,
reader = casereader_clone (input);
reader = casereader_create_filter_missing (reader, numerics, n_numerics,