Changeset 998 for trunk/yat/statistics


Ignore:
Timestamp:
Dec 13, 2007, 9:34:16 PM (14 years ago)
Author:
Peter
Message:

taking care of ties in calculation of Area Under Curve - refs #144

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/yat/statistics/AUC.cc

    r865 r998  
    9898    double cumsum_pos_w=0;
    9999    double cumsum_neg_w=0;
     100    double cache_cumsum_pos_w=0;
     101    double cache_cumsum_neg_w=0;
    100102    typedef MultiMap::const_iterator iter;
    101103
    102     for (iter i=m.begin(); i!=m.end(); ++i)
     104    for (iter i=m.begin(); i!=m.end(); ++i) {
    103105      if (i->second.first){
    104         area += i->second.second * cumsum_neg_w;
    105         cumsum_pos_w += i->second.second;
     106        cache_cumsum_pos_w += i->second.second;
    106107      }
    107108      else
    108         cumsum_neg_w += i->second.second;
     109        cache_cumsum_neg_w += i->second.second;
    109110
     111      iter n(i);
     112      ++n;
     113      // last entry OR entry is smaller than next one
     114      if ( n==m.end() || i->first < n->first) {
     115        if (i->second.first)
     116          area += cache_cumsum_pos_w * ( cumsum_neg_w + cache_cumsum_neg_w/2 );
     117        cumsum_pos_w += cache_cumsum_pos_w;
     118        cache_cumsum_pos_w = 0;
     119        cumsum_neg_w += cache_cumsum_neg_w;
     120        cache_cumsum_neg_w = 0;
     121      }
     122    }
    110123    // max area is cumsum_neg_w * cumsum_pos_w
    111124    area/=(cumsum_neg_w*cumsum_pos_w);
Note: See TracChangeset for help on using the changeset viewer.