skbio.stats.composition.multi_replace#

skbio.stats.composition.multi_replace(mat, delta=None)[source]#

Replace all zeros with small non-zero values.

It uses the multiplicative replacement strategy [1], replacing zeros with a small positive \(\delta\) and ensuring that the compositions still add up to 1.

Parameters:
matarray_like of shape (n_compositions, n_components)

A matrix of proportions.

deltafloat, optional

A small number to be used to replace zeros. If not specified, the default value is \(\delta = \frac{1}{N^2}\) where \(N\) is the number of components.

Returns:
ndarray of shape (n_compositions, n_components)

The matrix where all of the values are non-zero and each composition (row) adds up to 1.

Raises:
ValueError

If negative proportions are created due to a large delta.

Notes

This method will result in negative proportions if a large delta is chosen.

References

[1]

J. A. Martin-Fernandez. “Dealing With Zeros and Missing Values in Compositional Data Sets Using Nonparametric Imputation”

Examples

>>> import numpy as np
>>> from skbio.stats.composition import multi_replace
>>> X = np.array([[.2, .4, .4, 0],[0, .5, .5, 0]])
>>> multi_replace(X)
array([[ 0.1875,  0.375 ,  0.375 ,  0.0625],
       [ 0.0625,  0.4375,  0.4375,  0.0625]])