Revise.
[pspp] / src / percentiles.h
1 /* PSPP - A program for statistical analysis . -*-c-*-
2
3 Copyright (C) 2004 Free Software Foundation, Inc.
4 Author: John Darrington 2004
5
6 This program is free software; you can redistribute it and/or
7 modify it under the terms of the GNU General Public License as
8 published by the Free Software Foundation; either version 2 of the
9 License, or (at your option) any later version.
10
11 This program is distributed in the hope that it will be useful, but
12 WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
19 02110-1301, USA. */
20
21 #ifndef PERCENTILES_H
22 #define PERCENTILES_H
23
24
25 #include "hash.h"
26
27 struct weighted_value ;
28
29 /* The algorithm used to calculate percentiles */
30 enum pc_alg {
31   PC_NONE=0, 
32   PC_HAVERAGE, 
33   PC_WAVERAGE, 
34   PC_ROUND, 
35   PC_EMPIRICAL, 
36   PC_AEMPIRICAL
37 } ;
38
39
40
41 extern  const char *ptile_alg_desc[];
42
43
44
45
46 struct percentile {
47
48   /* The break point of the percentile */
49   double p;
50
51   /* The value of the percentile */
52   double v;
53 };
54
55
56 /* Calculate the percentiles of the break points in pc_bp,
57    placing the values in pc_val.
58    wv is  a sorted array of weighted values of the data set.
59 */
60 void ptiles(struct hsh_table *pc_hash,
61             const struct weighted_value **wv,
62             int n_data,
63             double w,
64             enum pc_alg algorithm);
65
66
67 /* Calculate Tukey's Hinges and the Whiskers for the box plot*/
68 void tukey_hinges(const struct weighted_value **wv,
69                   int n_data, 
70                   double w,
71                   double hinges[3]);
72
73
74
75 /* Hash utility functions */
76 int ptile_compare(const struct percentile *p1, 
77                    const struct percentile *p2, 
78                    void *aux);
79
80 unsigned ptile_hash(const struct percentile *p, void *aux);
81
82
83 #endif