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 = IQR × n−1/3 / (1 - 2 × at)
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.
type Elem = T
Auto Trait Implementations§
impl<T> Freeze for FreedmanDiaconis<T>where
T: Freeze,
impl<T> RefUnwindSafe for FreedmanDiaconis<T>where
T: RefUnwindSafe,
impl<T> Send for FreedmanDiaconis<T>where
T: Send,
impl<T> Sync for FreedmanDiaconis<T>where
T: Sync,
impl<T> Unpin for FreedmanDiaconis<T>where
T: Unpin,
impl<T> UnwindSafe for FreedmanDiaconis<T>where
T: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more