1 #ifndef _theplu_yat_statistics_tukey_biweight_estimator 2 #define _theplu_yat_statistics_tukey_biweight_estimator 25 #include "AveragerWeighted.h" 28 #include "yat/regression/TukeyBiweight.h" 30 #include "yat/utility/concept_check.h" 31 #include "yat/utility/Exception.h" 32 #include "yat/utility/iterator_traits.h" 34 #include <boost/concept_check.hpp> 35 #include <boost/iterator/iterator_concepts.hpp> 44 namespace statistics {
77 : cutoff_(cutoff), sorted_(sorted) {}
89 template<
typename RandomAccessIterator>
91 RandomAccessIterator last)
const;
97 template<
typename RandomAccessIterator>
98 double estimate(RandomAccessIterator first,
99 RandomAccessIterator last)
const;
101 template<
typename InputIterator>
102 double estimate(InputIterator first, InputIterator last,
103 double center,
double spread)
const;
106 template<
typename RandomAccessIterator>
108 RandomAccessIterator last)
const 110 using boost_concepts::RandomAccessTraversal;
111 BOOST_CONCEPT_ASSERT((RandomAccessTraversal<RandomAccessIterator>));
113 BOOST_CONCEPT_ASSERT((DataIteratorConcept<RandomAccessIterator>));
116 return estimate(first, last);
119 typedef typename std::iterator_traits<RandomAccessIterator> traits;
120 std::vector<typename traits::value_type> vec(first, last);
121 std::sort(vec.begin(), vec.end());
122 return estimate(vec.begin(), vec.end());
126 template<
typename RandomAccessIterator>
127 double TukeyBiweightEstimator::estimate(RandomAccessIterator first,
128 RandomAccessIterator last)
const 130 const double scale =
mad(first, last,
true);
131 double m =
median(first, last,
true);
142 m = estimate(first, last, m, scale);
152 template<
typename InputIterator>
153 double TukeyBiweightEstimator::estimate(InputIterator first,
155 double center,
double spread)
const 157 double scale = spread*cutoff_;
161 for ( ; first!=last; ++first) {
162 double x = traits.
data(first);
163 double w = traits.
weight(first) * biweight((x-center)/scale);
166 return averager.
mean();
TukeyBiweightEstimator(double cutoff=4.685, bool sorted=false)
Constructor.
Definition: TukeyBiweightEstimator.h:76
double mad(RandomAccessIterator first, RandomAccessIterator last, bool sorted=false)
Median absolute deviation from median.
Definition: utility.h:406
data_reference data(Iter iter) const
Definition: iterator_traits.h:440
double operator()(RandomAccessIterator first, RandomAccessIterator last) const
Definition: TukeyBiweightEstimator.h:107
Concept check for Data Iterator.
Definition: concept_check.h:240
Definition: iterator_traits.h:412
double mean(void) const
Calculate the weighted mean.
The Department of Theoretical Physics namespace as we define it.
Class to calulate averages with weights.
Definition: AveragerWeighted.h:66
void add(const double d, const double w=1)
double median(RandomAccessIterator first, RandomAccessIterator last, bool sorted=false)
Definition: utility.h:429
Class used for all runtime error detected within yat library.
Definition: Exception.h:38
Tukey's Biweight Estimator.
Definition: TukeyBiweightEstimator.h:64
Definition: TukeyBiweight.h:34
weight_reference weight(Iter iter) const
Definition: iterator_traits.h:446
Definition: averager_traits.h:79