source: trunk/test/roc_test.cc @ 301

Last change on this file since 301 was 301, checked in by Peter, 18 years ago

modified includes in tests

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 2.2 KB
Line 
1// $Id: roc_test.cc 301 2005-04-30 13:39:27Z peter $
2
3#include <c++_tools/gslapi/matrix.h>
4#include <c++_tools/statistics/ROC.h>
5#include <c++_tools/gslapi/vector.h>
6
7#include <gsl/gsl_cdf.h>
8#include <cmath>
9#include <fstream>
10#include <iostream>
11
12
13using namespace theplu;
14
15int main(const int argc,const char* argv[])
16{ 
17  bool print = (argc>1 && argv[1]==std::string("-p"));
18  bool ok = true;
19  gslapi::vector value(31);
20  gslapi::vector target(31,-1);
21  for (unsigned int i=0; i<16; i++) 
22    target(i) = 1;
23  for (unsigned int i=0; i<value.size(); i++) 
24    value(i)=i;
25  statistics::ROC roc;
26  double area = roc.score(target, value);
27  if (area!=1.0){
28    if (print)
29      std::cerr << "test_roc a: area is " << area << " should be 1.0" 
30                << std::endl;
31    ok = false;
32  }
33  area = roc.score(-target, value);
34  if (area!=1.0){
35    if (print)
36      std::cerr << "test_roc: area is " << area << " should be 1.0" 
37                << std::endl;
38    ok = false;
39  }
40 
41  double p = roc.p_value();
42  double p_matlab = 0.00000115;
43  if (p/p_matlab > 1.01 | p/p_matlab < 0.99){
44    if (print)
45      std::cerr << "get_p_approx: p-value not correct" << std::endl;
46    ok = false;
47  }
48  roc.minimum_size(20);
49  p = roc.p_value();
50  if (p > pow(10, -8.0) | p < pow(10, -9.0)){
51    if (print)
52      std::cerr << "get_p_exact: p-value not correct" << std::endl;
53    ok = false;
54  }
55 
56  std::ifstream is("data/rank_data.txt");
57  gslapi::matrix data(is);
58  is.close();
59
60  is.open("data/rank_target.txt");
61  gslapi::vector target2(is);
62  is.close();
63 
64  gslapi::vector correct_area(3);
65  correct_area(0)=8.0/9.0;
66  correct_area(1)=6.0/9.0;
67  correct_area(2)=1.0;
68
69  const double tol = 0.001;
70  for (size_t i=0; i<data.rows(); i++){
71    gslapi::vector vec = data[i];
72    area = roc.score(target2,vec);
73    if (area<correct_area(i)-tol || area>correct_area(i)+tol){
74      if (print){
75        std::cerr << "test_roc: area is " << area << " should be " 
76             << correct_area(i) << std::endl;
77      }
78      ok=false;
79    }
80  }
81
82  gslapi::vector weight(target2.size(),1);
83  for (size_t i=0; i<data.rows(); i++){
84    gslapi::vector vec = data[i];
85    area = roc.score(target2, vec, weight);
86    if (area<correct_area(i)-tol || area>correct_area(i)+tol){
87      if (print){
88        std::cerr << "test_roc: weighted area is " << area << " should be " 
89             << correct_area(i) << std::endl;
90      }
91      ok=false;
92    }
93  }
94
95
96  if (ok)
97    return 0;
98  return -1;
99}
Note: See TracBrowser for help on using the repository browser.