X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Ffactor_stats.h;h=259694e8fc5aafd2d982404b57f958a1f2e86d6e;hb=4848cff524922cc77ed21662406807471e96a68e;hp=cf660c6a1b25ec7634113ddd0e3c0fc91c0b8711;hpb=cd7b08ad5e6bbec75e778acf008f84e1eb548154;p=pspp diff --git a/src/factor_stats.h b/src/factor_stats.h index cf660c6a1b..259694e8fc 100644 --- a/src/factor_stats.h +++ b/src/factor_stats.h @@ -27,6 +27,12 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA #include "hash.h" #include "val.h" +#include +#include +#include "subclist.h" +#include "percentiles.h" + +struct moments1; struct metrics { @@ -34,33 +40,53 @@ struct metrics double n_missing; - double ssq; - - double sum; - double min; double max; double mean; - double stderr; + double se_mean; double var; double stddev; + struct moments1 *moments; + + gsl_histogram *histogram; + + double skewness; + double kurtosis; + double trimmed_mean; - /* A hash of data for this factor */ + /* A hash of data for this factor. */ struct hsh_table *ordered_data; - /* A SORTED array of weighted values */ - struct weighted_value *wv; -}; + /* A Pointer to this hash table AFTER it has been SORTED and crunched */ + struct weighted_value **wvp; + + /* The number of values in the above array + (if all the weights are 1, then this will + be the same as n) */ + int n_data; + + /* Percentile stuff */ + + /* A hash of struct percentiles */ + struct hsh_table *ptile_hash; + /* Algorithm to be used for calculating percentiles */ + enum pc_alg ptile_alg; + /* Tukey's Hinges */ + double hinge[3]; +}; + + +struct metrics * metrics_create(void); void metrics_precalc(struct metrics *m); @@ -69,6 +95,9 @@ void metrics_calc(struct metrics *m, const union value *f, double weight, void metrics_postcalc(struct metrics *m); +void metrics_destroy(struct metrics *m); + + /* Linked list of case nos */ struct case_node @@ -104,12 +133,14 @@ void weighted_value_free(struct weighted_value *wv); struct factor_statistics { - /* The value of the independent variable */ + /* The values of the independent variables */ union value id[2]; /* The an array stats for this factor, one for each dependent var */ struct metrics *m; + /* The number of dependent variables */ + int n_var; }; @@ -122,18 +153,15 @@ create_factor_statistics (int n, union value *id0, union value *id1); void factor_statistics_free(struct factor_statistics *f); +/* Compare f0 and f1. + width is the width of the independent variable */ int factor_statistics_compare(const struct factor_statistics *f0, - const struct factor_statistics *f1, void *aux); + const struct factor_statistics *f1, int width); unsigned int -factor_statistics_hash(const struct factor_statistics *f, void *aux); - - - - - +factor_statistics_hash(const struct factor_statistics *f, int width); #endif