Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

This is the documentation for a snapshot of the master branch, built from commit b9ab49fc70.
PrevUpHomeNext

Struct template immediate_rolling_variance_impl

boost::accumulators::impl::immediate_rolling_variance_impl — Iterative calculation of the rolling variance.

Synopsis

// In header: <boost/accumulators/statistics/rolling_variance.hpp>

template<typename Sample> 
struct immediate_rolling_variance_impl : public accumulator_base {
  // types
  typedef numeric::functional::fdiv< Sample, std::size_t >::result_type result_type;

  // construct/copy/destruct
  template<typename Args> immediate_rolling_variance_impl(Args const &);

  // public member functions
  template<typename Args> void operator()(Args const &);
  template<typename Args> result_type result(Args const &) const;
  template<typename Archive> void serialize(Archive &, const unsigned int);

  // private member functions
  template<typename T> 
    void prevent_underflow(T &, 
                           typename boost::enable_if< boost::is_arithmetic< T >, T >::type * = 0);
  template<typename T> 
    void prevent_underflow(T &, 
                           typename boost::disable_if< boost::is_arithmetic< T >, T >::type * = 0);
};

Description

Iterative calculation of sample variance is done as follows, see also http://en.wikipedia.org/wiki/Algorithms_for_calculating_variance. For a rolling window of size , for the first samples, the variance is computed according to the formula

Equation 1.7. 


where the sum of squares can be recursively computed as:

Equation 1.8. 


and the estimate of the sample mean as:

Equation 1.9. 


For further samples, when the rolling window is fully filled with data, one has to take into account that the oldest sample is dropped from the window. The sample variance over the window now becomes:

Equation 1.10. 


where the sum of squares now equals:

Equation 1.11. 


and the estimated mean is:

Equation 1.12. 


Note that the sample variance is not defined for .

immediate_rolling_variance_impl public construct/copy/destruct

  1. template<typename Args> immediate_rolling_variance_impl(Args const & args);

immediate_rolling_variance_impl public member functions

  1. template<typename Args> void operator()(Args const & args);
  2. template<typename Args> result_type result(Args const & args) const;
  3. template<typename Archive> 
      void serialize(Archive & ar, const unsigned int file_version);

immediate_rolling_variance_impl private member functions

  1. template<typename T> 
      void prevent_underflow(T & non_negative_number, 
                             typename boost::enable_if< boost::is_arithmetic< T >, T >::type * = 0);
  2. template<typename T> 
      void prevent_underflow(T & non_arithmetic_quantity, 
                             typename boost::disable_if< boost::is_arithmetic< T >, T >::type * = 0);

PrevUpHomeNext