Fork me on GitHub"

# skbio.stats.composition.multiplicative_replacement

`skbio.stats.composition.``multiplicative_replacement`(mat, delta=None)

  Replace all zeros with small non-zero values

  State: Experimental as of 0.4.0.

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

  Parameters:

  mat: array_like

  > a matrix of proportions where rows = compositions and columns = components

  delta: float, optional

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

  Returns:

  numpy.ndarray, np.float64

  > A matrix of proportions where all of the values are nonzero and each composition (row) adds up to 1

  Raises:

  ValueError

  > Raises an error 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

  [R123123] | (1, 2) 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 multiplicative_replacement
      >>> X = np.array([[.2,.4,.4, 0],[0,.5,.5,0]])
      >>> multiplicative_replacement(X)
      array([[ 0.1875,  0.375 ,  0.375 ,  0.0625],
             [ 0.0625,  0.4375,  0.4375,  0.0625]])