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.
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