34 #ifndef SHARK_STATISTICS_H
35 #define SHARK_STATISTICS_H
39 #include <boost/range/iterator_range.hpp>
40 #include <boost/optional.hpp>
42 #include <boost/accumulators/accumulators.hpp>
43 #include <boost/accumulators/statistics/stats.hpp>
45 #include <boost/accumulators/statistics/count.hpp>
46 #include <boost/accumulators/statistics/max.hpp>
47 #include <boost/accumulators/statistics/min.hpp>
48 #include <boost/accumulators/statistics/mean.hpp>
49 #include <boost/accumulators/statistics/median.hpp>
50 #include <boost/accumulators/statistics/moment.hpp>
51 #include <boost/accumulators/statistics/p_square_quantile.hpp>
52 #include <boost/accumulators/statistics/variance.hpp>
56 namespace ba = boost::accumulators;
76 typedef ba::accumulator_set<
79 ba::tag::median(ba::with_p_square_quantile),
88 typedef ba::accumulator_set<double, ba::stats<ba::tag::p_square_quantile> > QuartileAccumulatorType;
90 typedef double LowerQuantileProbability;
91 typedef double UpperQuantileProbability;
95 typedef boost::iterator_range<
97 std::pair<double,double>
147 Statistics(
double lowerQuantileProbability = 0.25,
double upperQuantileProbability = 0.75 ) : m_acc( ba::density_cache_size = 5, ba::density_num_bins = 20 ),
148 m_accLowerQuartile( ba::quantile_probability = lowerQuantileProbability ),
149 m_accUpperQuartile( ba::quantile_probability = upperQuantileProbability ) {
202 m_accLowerQuartile( d );
203 m_accUpperQuartile( d );
212 template<
class InputIterator>
214 for(;begin != end; ++begin){
220 AccumulatorType m_acc;
221 QuartileAccumulatorType m_accLowerQuartile;
222 QuartileAccumulatorType m_accUpperQuartile;
229 template<
typename CharT,
typename Traits>
230 static std::basic_ostream<CharT,Traits> & operator<<( std::basic_ostream<CharT,Traits> & s,
const Statistics & stats ) {
244 #endif // SHARK_STATISTICS_H