Skip to content

Background knowledge not working #219

Open
@nataliaglazman

Description

@nataliaglazman

Hi! I have come across an issue where even when I forbid certain nodes when using PC, they still appear in my causal graph result:

from causallearn.utils.PCUtils.BackgroundKnowledge import BackgroundKnowledge
from causallearn.search.ConstraintBased.PC import pc

cg_without_background_knowledge = pc(X)  # Run PC and obtain the estimated graph (CausalGraph object)
nodes = cg_without_background_knowledge.G.get_nodes()

bk = BackgroundKnowledge() \
    .add_forbidden_by_node(nodes[0], nodes[1]) \
    .add_forbidden_by_node(nodes[1], nodes[2]) \
    .add_forbidden_by_node(nodes[0], nodes[2]) \
    .add_forbidden_by_node(nodes[0], nodes[3]) \
    .add_forbidden_by_node(nodes[1], nodes[3]) \
    .add_forbidden_by_node(nodes[2], nodes[3])

cg_with_background_knowledge = pc(X, background_knowledge=bk)

assert cg_with_background_knowledge.G.get_edge(nodes[2], nodes[3]) is None
assert cg_with_background_knowledge.G.get_edge(nodes[0], nodes[1]) is None

I get this error, as well as an error for some other node combinations in my background knowledge:

AssertionError Traceback (most recent call last)
Cell In[9], line 18
15 cg_with_background_knowledge = pc(X, background_knowledge=bk)
17 assert cg_with_background_knowledge.G.get_edge(nodes[2], nodes[3]) is None
---> 18 assert cg_with_background_knowledge.G.get_edge(nodes[0], nodes[1]) is None
20 g, edges = fci(X, background_knowledge=bk)
22 sns.heatmap(g.graph, cmap='coolwarm', annot=True, xticklabels=node_names, yticklabels=node_names)

AssertionError:

It seems like if the background knowledge is being used, it's being overriden somewhere. Please help! This also happens with FCI. I looked at the code and I can't figure out why this could be happening.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions