source: trunk/c++_tools/statistics/utility.cc @ 672

Last change on this file since 672 was 672, checked in by Peter, 16 years ago

added MAD function in statistics

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 1.7 KB
Line 
1// $Id: utility.cc 672 2006-10-07 06:44:31Z peter $
2
3
4#include <c++_tools/statistics/utility.h>
5
6#include <gsl/gsl_randist.h>
7#include <gsl/gsl_statistics_double.h>
8
9namespace theplu {
10namespace statistics { 
11
12  double cdf_hypergeometric_P(u_int k, u_int n1, u_int n2, u_int t)
13  {
14    double p=0;
15    for (u_int i=0; i<=k; i++)
16      p+= gsl_ran_hypergeometric_pdf(i, n1, n2, t);
17    return p;
18  }
19
20  double mad(const utility::vector& vec, const bool sorted)
21  {
22    double m = median(vec, sorted);
23    std::vector<double> ad;
24    ad.reserve(vec.size());
25    for (size_t i = 0; i<vec.size(); ++i)
26      ad.push_back(fabs(vec[i]-m));
27    std::sort(ad.begin(), ad.end());
28    return median(ad,true);
29  }
30 
31
32  double median(const utility::vector& vec, const bool sorted)
33  {
34    if (!sorted){
35      utility::vector vec_copy(vec);
36      vec_copy.sort();
37      return gsl_stats_median_from_sorted_data (vec_copy.gsl_vector_p()->data, 
38                                                vec_copy.gsl_vector_p()->stride,
39                                                vec_copy.gsl_vector_p()->size);
40    }
41    return gsl_stats_median_from_sorted_data (vec.gsl_vector_p()->data, 
42                                              vec.gsl_vector_p()->stride,
43                                              vec.gsl_vector_p()->size);
44  }
45
46  double percentile(const utility::vector& vec, const double p, 
47                    const bool sorted)
48  {
49    if (!sorted){
50      utility::vector vec_c(vec);
51      vec_c.sort();
52      return gsl_stats_quantile_from_sorted_data(vec_c.gsl_vector_p()->data,
53                                                 vec_c.gsl_vector_p()->stride,
54                                                 vec_c.gsl_vector_p()->size,
55                                                 p);
56    }
57    return gsl_stats_quantile_from_sorted_data (vec.gsl_vector_p()->data, 
58                                              vec.gsl_vector_p()->stride,
59                                              vec.gsl_vector_p()->size,
60                                              p);
61  }
62
63}} // of namespace statistics and namespace theplu
Note: See TracBrowser for help on using the repository browser.