source: trunk/c++_tools/statistics/Pearson.cc @ 616

Last change on this file since 616 was 616, checked in by Jari Häkkinen, 15 years ago

Removed gslapi namespace and put the code into utility namespace.
Move #ifndef _header_ idiom to top of touched header files.
Removed unneccesary #includes, and added needed #includes.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 1.7 KB
Line 
1// $Id: Pearson.cc 616 2006-08-31 08:52:02Z jari $
2
3#include <c++_tools/statistics/Pearson.h>
4#include <c++_tools/statistics/AveragerPair.h>
5#include <c++_tools/statistics/AveragerPairWeighted.h>
6#include <c++_tools/utility/vector.h>
7#include <c++_tools/classifier/Target.h>
8
9#include <cmath>
10#include <gsl/gsl_cdf.h>
11
12
13namespace theplu {
14namespace statistics { 
15
16  Pearson::Pearson(bool b) 
17    : Score(b), r_(0), nof_samples_(0)
18  {
19  }
20
21  double Pearson::p_value() const
22  {
23    if(weighted_)
24      return 1;
25    if(nof_samples_<2){
26      std::cerr << "Warning: Only " << nof_samples_ << "samples. " 
27                << "Need at lest 3.\n";
28      return 1;
29    }
30
31    double t = sqrt(nof_samples_ - 2)*fabs(r_) /sqrt(1-r_*r_);
32    double p = gsl_cdf_tdist_Q(t, nof_samples_ -2 );
33    if (absolute_)
34      return 2*p;
35    if (r_<0)
36      return 1-p;
37    return p;
38
39  }
40
41  double Pearson::score(const classifier::Target& target, 
42                        const utility::vector& value)
43  {
44    weighted_=false;
45    AveragerPair ap;
46    for (size_t i=0; i<target.size(); i++){
47      if (target.binary(i))
48        ap.add(1, value(i));
49      else
50        ap.add(-1, value(i));
51      nof_samples_ = target.size();
52    }
53    r_ = ap.correlation();
54    if (r_<0 && absolute_)
55      return -r_;
56     
57    return r_;
58  } 
59   
60  double Pearson::score(const classifier::Target& target, 
61                        const utility::vector& value,
62                        const utility::vector& weight)
63  {
64    weighted_=true;
65    AveragerPairWeighted ap;
66    for (size_t i=0; i<target.size(); i++){
67      if (target.binary(i))
68        ap.add(1, value(i),1,weight(i));
69      else
70        ap.add(-1, value(i),1,weight(i));
71      nof_samples_ = target.size();
72    }
73    r_ = ap.correlation();
74    if (r_<0 && absolute_)
75      return -r_;
76     
77    return r_;
78  }
79
80}} // of namespace statistics and namespace theplu
Note: See TracBrowser for help on using the repository browser.