Source code for pyagree.inf_agreement

"""This file contains the implementation of the extension-by-continuity of
   Information Agreement.

.. moduleauthor:: Alberto Casagrande <acasagrande@units.it>

"""

from numpy import matrix

from .common import test_agreement_matrix, count_nonnull_rows
from .common import count_nonnull_cols
from .inf_theory import p_x, p_y, p_xy, entropy


def refine(values):
    r"""Remove 0 from a sequence of values

    Give an interable set of values, this function yields all
    the values in the sequence, but those that equal 0.

    :param values: An interable set of values
    :type values: An interable set of values
    :returns: An iterator over values without the instances of 0
    :rtype: Iterator
    """

    for value in values:
        if value != 0:
            yield value


[docs]def ia_c(agreement_matrix): r"""Evaluate *extension-by-continuity of Information Agreement* Compute the :ref:`IAc_theory` (:math:`\text{IA}_{C}`) of agreement_matrix. :param agreement_matrix: An agreement matrix :type agreement_matrix: :class:`numpy.ndarray` :returns: The extension-by-continuity of Information Agreement of agreement_matrix :rtype: :class:`float` :raises: :class:`ValueError` """ if isinstance(agreement_matrix, list): agreement_matrix = matrix(agreement_matrix) test_agreement_matrix(agreement_matrix) if agreement_matrix.shape[0] < 2: raise ValueError("The matrix has less than 2 rows and columns") h_xf = entropy(refine(p_x(agreement_matrix))) h_yf = entropy(refine(p_y(agreement_matrix))) if h_xf == 0: return (agreement_matrix.shape[0] - count_nonnull_rows(agreement_matrix))/agreement_matrix.shape[0] if h_yf == 0: return (agreement_matrix.shape[0] - count_nonnull_cols(agreement_matrix))/agreement_matrix.shape[0] h_xyf = entropy(refine(p_xy(agreement_matrix))) if h_xf < h_yf: return 1+(h_yf-h_xyf)/h_xf return 1+(h_xf-h_xyf)/h_yf