Struct ndarray_histogram::histogram::strategies::FreedmanDiaconis
source · pub struct FreedmanDiaconis<T> { /* private fields */ }
Expand description
Robust (resilient to outliers) strategy that takes into account data variability and data size.
Let n
be the number of observations and at = 1 / 4
.
bin_width
= (1 - 2 × at
) × IQR
× n
−1/3
The bin width is proportional to the interquartile range (IQR
) from at
to 1 - at
and
inversely proportional to cube root of n
. It can be too conservative for small datasets, but
it is quite good for large datasets. In case the IQR
is close to zero, at
is halved and an
improper IQR
is computed. This is repeated as long as at >= 1 / 512
. If no IQR
is
found by then, Scott’s rule is used as asymptotic resort which is based on the standard
deviation (SD). If the SD is close to zero as well, this strategy fails with
BinsBuildError::Strategy
. As there is no one-fit-all epsilon, whether the IQR or standard
deviation is close to zero is indirectly tested by requiring the computed number of bins to not
exceed max_n_bins
with a default of u16::MAX
.
The IQR
is very robust to outliers.
Notes
This strategy requires the data
- not being empty
- not being constant
- having positive
IQR
Implementations§
source§impl<T> FreedmanDiaconis<T>
impl<T> FreedmanDiaconis<T>
Trait Implementations§
source§impl<T> BinsBuildingStrategy for FreedmanDiaconis<T>
impl<T> BinsBuildingStrategy for FreedmanDiaconis<T>
source§fn from_array<S>(a: &ArrayBase<S, Ix1>) -> Result<Self, BinsBuildError>
fn from_array<S>(a: &ArrayBase<S, Ix1>) -> Result<Self, BinsBuildError>
Returns Err(BinsBuildError::Strategy)
if improper IQR and SD are close to zero.
Returns Err(BinsBuildError::EmptyInput)
if a.len()==0
.
Returns Ok(Self)
otherwise.
source§fn from_array_with_max<S>(
a: &ArrayBase<S, Ix1>,
max_n_bins: usize
) -> Result<Self, BinsBuildError>
fn from_array_with_max<S>( a: &ArrayBase<S, Ix1>, max_n_bins: usize ) -> Result<Self, BinsBuildError>
Returns Err(BinsBuildError::Strategy)
if improper IQR and SD are close to zero.
Returns Err(BinsBuildError::EmptyInput)
if a.len()==0
.
Returns Ok(Self)
otherwise.