/* PSPP - a program for statistical analysis.
Copyright (C) 2005 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see . */
/*
Functions and data structures to recode categorical variables into
vectors and sub-rows of matrices.
To fit many types of statistical models, it is necessary
to change each value of a categorical variable to a vector with binary
entries. These vectors are then stored as sub-rows within a matrix
during model-fitting. We need functions and data strucutres to,
e.g., map a value, say 'a', of a variable named 'cat_var', to a
vector, say (0 1 0 0 0), and vice versa. We also need to be able
to map the vector back to the value 'a', and if the vector is a
sub-row of a matrix, we need to know which sub-row corresponds to
the variable 'cat_var'.
*/
#ifndef CATEGORY_H
#define CATEGORY_H
#include
#include
struct cat_vals;
struct variable ;
union value;
void cat_stored_values_create (const struct variable *);
void cat_stored_values_destroy (struct cat_vals *);
size_t cat_value_find (const struct variable *, const union value *);
const union value *cat_subscript_to_value (const size_t,
const struct variable *);
void cat_value_update (const struct variable *, const union value *);
/*
Return the count for the sth category.
*/
size_t
cat_get_category_count (const size_t, const struct variable *);
/*
Return the number of categories of a categorical variable.
*/
size_t cat_get_n_categories (const struct variable *v);
/*
If VAR is categorical with d categories, its first category should
correspond to the origin in d-dimensional Euclidean space.
*/
bool cat_is_origin (const struct variable *, const union value *);
#endif