biweight_scale#

astropy.stats.biweight_scale(data, c=9.0, M=None, axis=None, modify_sample_size=False, *, ignore_nan=False)[source]#

Compute the biweight scale.

The biweight scale is a robust statistic for determining the standard deviation of a distribution. It is the square root of the biweight midvariance. It is given by:

\[\zeta_{biscl} = \sqrt{n} \ \frac{\sqrt{\sum_{|u_i| < 1} \ (x_i - M)^2 (1 - u_i^2)^4}} {|(\sum_{|u_i| < 1} \ (1 - u_i^2) (1 - 5u_i^2))|}\]

where \(x\) is the input data, \(M\) is the sample median (or the input location) and \(u_i\) is given by:

\[u_{i} = \frac{(x_i - M)}{c * MAD}\]

where \(c\) is the tuning constant and \(MAD\) is the median absolute deviation. The biweight midvariance tuning constant c is typically 9.0 (the default).

If \(MAD\) is zero, then zero will be returned.

For the standard definition of biweight scale, \(n\) is the total number of points in the array (or along the input axis, if specified). That definition is used if modify_sample_size is False, which is the default.

However, if modify_sample_size = True, then \(n\) is the number of points for which \(|u_i| < 1\) (i.e. the total number of non-rejected values), i.e.

\[n = \sum_{|u_i| < 1} \ 1\]

which results in a value closer to the true standard deviation for small sample sizes or for a large number of rejected values.

Parameters:
dataarray_like

Input array or object that can be converted to an array. data can be a MaskedArray.

cfloat, optional

Tuning constant for the biweight estimator (default = 9.0).

Mfloat or array_like, optional

The location estimate. If M is a scalar value, then its value will be used for the entire array (or along each axis, if specified). If M is an array, then its must be an array containing the location estimate along each axis of the input array. If None (default), then the median of the input array will be used (or along each axis, if specified).

axisNone, int, or tuple of int, optional

The axis or axes along which the biweight scales are computed. If None (default), then the biweight scale of the flattened input array will be computed.

modify_sample_sizebool, optional

If False (default), then the sample size used is the total number of elements in the array (or along the input axis, if specified), which follows the standard definition of biweight scale. If True, then the sample size is reduced to correct for any rejected values (i.e. the sample size used includes only the non-rejected values), which results in a value closer to the true standard deviation for small sample sizes or for a large number of rejected values.

ignore_nanbool, optional

Whether to ignore NaN values in the input data.

Returns:
biweight_scalefloat or ndarray

The biweight scale of the input data. If axis is None then a scalar will be returned, otherwise a ndarray will be returned.

References

Examples

Generate random variates from a Gaussian distribution and return the biweight scale of the distribution:

>>> import numpy as np
>>> from astropy.stats import biweight_scale
>>> rand = np.random.default_rng(12345)
>>> biscl = biweight_scale(rand.standard_normal(1000))
>>> print(biscl)    
1.0239311812635818