[][src]Macro average::define_moments

macro_rules! define_moments {
    ($name:ident, $MAX_MOMENT:expr) => { ... };
}

Define an estimator of all moments up to a number given at compile time.

This uses a general algorithm and is less efficient than the specialized implementations (such as Mean, Variance, Skewness and Kurtosis), but it works for any number of moments >= 4.

Example

#[cfg(feature = "serde1")]
extern crate serde;
#[cfg(feature = "serde1")]
#[macro_use] extern crate serde_derive;
define_moments!(Moments4, 4);

let mut a: Moments4 = (1..6).map(f64::from).collect();
assert_eq!(a.len(), 5);
assert_eq!(a.mean(), 3.0);
assert_eq!(a.central_moment(0), 1.0);
assert_eq!(a.central_moment(1), 0.0);
assert_eq!(a.central_moment(2), 2.0);
assert_eq!(a.standardized_moment(0), 5.0);
assert_eq!(a.standardized_moment(1), 0.0);
assert_eq!(a.standardized_moment(2), 1.0);
a.add(1.0);
// skewness
assert_almost_eq!(a.standardized_moment(3), 0.2795084971874741, 1e-15);
// kurtosis
assert_almost_eq!(a.standardized_moment(4), -1.365 + 3.0, 1e-14);