Class SvarFciOrient
Adapts FciOrient for the SvarFCI algorithm. The main difference is that if an edge is orient, it will also orient all homologous edges to preserve the time-repeating structure assumed by SvarFCI. Based on (but not identicial to) code by Entner and Hoyer for their 2010 paper. Modified by DMalinsky 4/20/2016.
This class is configured to respect knowledge of forbidden and required edges, including knowledge of temporal tiers.
-
Constructor Summary
ConstructorsConstructorDescriptionSvarFciOrient
(SepsetProducer sepsets, IndependenceTest independenceTest) Constructs a new FCI search for the given independence test and background knowledge. -
Method Summary
Modifier and TypeMethodDescriptionvoid
a method to search "back from a" to find a DDP.void
doFinalOrientation
(Graph graph) Orients the graph according to rules in the graph (FCI step D).The background knowledge.int
Getter for the fieldmaxPathLength
.getNameNoLag
(Object obj) getNameNoLag.Getter for the fieldsepsets
.The true PAG if available.boolean
isCompleteRuleSetUsed.boolean
True iff verbose output should be printed.orient.void
Orients colliders in the graph.void
Implements the double-triangle orientation rule, which states that if D*-oB, A*->B<-*C and A*-oDo-*C, then D*->B.void
The triangles that must be oriented this way (won't be done by another rule) all look like the ones below, where the dots are a collider path from L to A with each node on the path (except L) a parent of C.void
Implements Zhang's rule R5, orient circle undirectedPaths: for any Ao-oB, if there is an uncovered circle path u = [A,C,...,D,B] such that A,D nonadjacent and B,C nonadjacent, then A---B and orient every edge on u undirected.void
Implements Zhang's rules R6 and R7, applies them over the graph once.void
rulesR1R2cycle
(Graph graph) rulesR1R2cycle.void
rulesR8R9R10
(Graph graph) Implements Zhang's rules R8, R9, R10, applies them over the graph once.void
setCompleteRuleSetUsed
(boolean completeRuleSetUsed) Setter for the fieldcompleteRuleSetUsed
.void
setKnowledge
(Knowledge knowledge) Setter for the fieldknowledge
.void
setMaxPathLength
(int maxPathLength) Setter for the fieldmaxPathLength
.void
setTruePag
(Graph truePag) Setter for the fieldtruePag
.void
setVerbose
(boolean verbose) Setter for the fieldverbose
.
-
Constructor Details
-
SvarFciOrient
Constructs a new FCI search for the given independence test and background knowledge.- Parameters:
sepsets
- aSepsetProducer
objectindependenceTest
- aIndependenceTest
object
-
-
Method Details
-
orient
orient.
-
getSepsets
Getter for the field
sepsets
.- Returns:
- a
SepsetProducer
object
-
getKnowledge
The background knowledge.- Returns:
- a
Knowledge
object
-
setKnowledge
Setter for the field
knowledge
.- Parameters:
knowledge
- aKnowledge
object
-
isCompleteRuleSetUsed
public boolean isCompleteRuleSetUsed()isCompleteRuleSetUsed.
- Returns:
- true if Zhang's complete rule set should be used, false if only R1-R4 (the rule set of the original FCI) should be used. False by default.
-
setCompleteRuleSetUsed
public void setCompleteRuleSetUsed(boolean completeRuleSetUsed) Setter for the field
completeRuleSetUsed
.- Parameters:
completeRuleSetUsed
- set to true if Zhang's complete rule set should be used, false if only R1-R4 (the rule set of the original FCI) should be used. False by default.
-
ruleR0
Orients colliders in the graph. (FCI Step C)Zhang's step F3, rule R0.
- Parameters:
graph
- aGraph
object
-
doFinalOrientation
Orients the graph according to rules in the graph (FCI step D).Zhang's step F4, rules R1-R10.
- Parameters:
graph
- aGraph
object
-
rulesR1R2cycle
rulesR1R2cycle.
- Parameters:
graph
- aGraph
object
-
ruleR3
Implements the double-triangle orientation rule, which states that if D*-oB, A*->B<-*C and A*-oDo-*C, then D*->B.This is Zhang's rule R3.
- Parameters:
graph
- aGraph
object
-
ruleR4B
The triangles that must be oriented this way (won't be done by another rule) all look like the ones below, where the dots are a collider path from L to A with each node on the path (except L) a parent of C.B xo x is either an arrowhead or a circle / \ v v L....A --> C
This is Zhang's rule R4, discriminating undirectedPaths.
- Parameters:
graph
- aGraph
object
-
ddpOrient
a method to search "back from a" to find a DDP. It is called with a reachability list (first consisting only of a). This is breadth-first, utilizing "reachability" concept from Geiger, Verma, and Pearl 1990. The body of a DDP consists of colliders that are parents of c. -
ruleR5
Implements Zhang's rule R5, orient circle undirectedPaths: for any Ao-oB, if there is an uncovered circle path u = [A,C,...,D,B] such that A,D nonadjacent and B,C nonadjacent, then A---B and orient every edge on u undirected.- Parameters:
graph
- aGraph
object
-
ruleR6R7
Implements Zhang's rules R6 and R7, applies them over the graph once. Orient single tails. R6: If A---Bo-*C then A---B--*C. R7: If A--oBo-*C and A,C nonadjacent, then A--oB--*C- Parameters:
graph
- aGraph
object
-
rulesR8R9R10
Implements Zhang's rules R8, R9, R10, applies them over the graph once. Orient arrow tails. I.e., tries R8, R9, and R10 in that sequence on each Ao->C in the graph.- Parameters:
graph
- aGraph
object
-
getMaxPathLength
public int getMaxPathLength()Getter for the field
maxPathLength
.- Returns:
- the maximum length of any discriminating path, or -1 of unlimited.
-
setMaxPathLength
public void setMaxPathLength(int maxPathLength) Setter for the field
maxPathLength
.- Parameters:
maxPathLength
- the maximum length of any discriminating path, or -1 if unlimited.
-
isVerbose
public boolean isVerbose()True iff verbose output should be printed.- Returns:
- a boolean
-
setVerbose
public void setVerbose(boolean verbose) Setter for the field
verbose
.- Parameters:
verbose
- a boolean
-
getTruePag
The true PAG if available. Can be null.- Returns:
- a
Graph
object
-
setTruePag
Setter for the field
truePag
.- Parameters:
truePag
- aGraph
object
-
getNameNoLag
getNameNoLag.
-