Skip to content

equivalence_class

Signature/Parameters

def equivalence_class(self)

Construct the partially directed equivalence class implied by the DAG.

Returns:

Type Description
DAG

A new DAG instance representing the Markov equivalence class, where edges are undirected unless compelled by v-structures.

Notes

The equivalence class replaces directional edges with undirected edges except in v-structures (triples X -> Z <- Y where X and Y are not adjacent).

Examples:

>>> G = DAG(graph="X -> Z -> Y")
>>> eq = G.equivalence_class()
>>> eq
    Graph:
    Z -- X
    Z -- Y
    Observed: Z, Y, X
>>> eq.undirected
[{'X', 'Z'}, {'Z', 'Y'}]
Source code in causalinf/gcm.py
def equivalence_class(self):
    """
    Construct the partially directed equivalence class implied by the DAG.

    Returns
    -------
    DAG
        A new `DAG` instance representing the Markov equivalence class,
        where edges are undirected unless compelled by v-structures.

    Notes
    -----
    The equivalence class replaces directional edges with undirected edges
    except in v-structures (triples ``X -> Z <- Y`` where ``X`` and ``Y``
    are not adjacent).

    Examples
    --------
    >>> G = DAG(graph="X -> Z -> Y")
    >>> eq = G.equivalence_class()
    >>> eq
        Graph:
        Z -- X
        Z -- Y
        Observed: Z, Y, X
    >>> eq.undirected
    [{'X', 'Z'}, {'Z', 'Y'}]
    """
    eq = dagitty.equivalenceClass(self.__dagitty__)
    dag, _ = self.__dagitty2inputs__(eq)
    res = self.__rebuild_graph__(dag)
    return res