Package edu.cmu.tetrad.search.utils
Class GraphSearchUtils
java.lang.Object
edu.cmu.tetrad.search.utils.GraphSearchUtils
Provides some graph utilities for search algorithm.
- Version:
- $Id: $Id
- Author:
- josephramsey
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic enumGives the options for triple type for a conservative unshielded collider orientation, which may be "collider" or "noncollider" or "ambiguous".static classStores a result for checking whether a graph is a legal MAG--(a) whether it is (a boolean), and (b) the reason why it is not, if it is not (a String).static classStores a result for checking whether a graph is a legal PAG--(a) whether it is (a boolean), and (b) the reason why it is not, if it is not (a String). -
Method Summary
Modifier and TypeMethodDescriptionstatic voidarrangeByKnowledgeTiers(Graph graph) arrangeByKnowledgeTiers.static voidarrangeByKnowledgeTiers(Graph graph, Knowledge knowledge) arrangeByKnowledgeTiers.static voidbasicCpdag(Graph graph) Get a graph and direct only the unshielded colliders.static voidbasicCpdagRestricted2(Graph graph, Node node) basicCpdagRestricted2.getAllRows(int sampleSize) Returns a list of rows 1...sampleSize.getCpcTripleType(Node x, Node y, Node z, IndependenceTest test, int depth, Graph graph) getCpcTripleType.static StringgetEdgewiseComparisonString(String trueGraphName, Graph trueGraph, String targetGraphName, Graph targetGraph) getEdgewiseComparisonString.static GraphUtils.GraphComparisongetGraphComparison(Graph trueGraph, Graph targetGraph) Just counts arrowhead errors--for cyclic edges counts an arrowhead at each node.getReachableNodes(List<Node> initialNodes, LegalPairs legalPairs, List<Node> c, List<Node> d, Graph graph, int maxPathLength) getReachableNodes.static int[][]graphComparison(Graph trueCpdag, Graph estCpdag, PrintStream out) graphComparison.static booleanisArrowheadAllowed(Object from, Object to, Knowledge knowledge) Checks if an arrowhead is allowed by background knowledge.static booleanisLatentVariableAlgorithmByAnnotation(Algorithm algorithm) Checks if the provided algorithm is a latent variable algorithm by inspecting the associated annotation.static GraphSearchUtils.LegalMagRetisLegalMag(Graph mag, Set<Node> selection) Determines whether the given graph is a legal Mixed Ancestral Graph (MAG).static GraphSearchUtils.LegalPagRetisLegalPag(Graph pag, Set<Node> selection) Checks if the provided Directed Acyclic Graph (PAG) is a legal PAG.static voidorientCollidersUsingSepsets(SepsetMap set, Knowledge knowledge, Graph graph, boolean verbose, boolean enforceCpdag) Step C of PC; orients colliders using specified sepset.static voidpcdOrientC(IndependenceTest test, Knowledge knowledge, Graph graph) Performs step C of the algorithm, as indicated on page xxx of CPS, with the modification that X--W--Y is oriented as X-->W<--Y if W is *determined by* the sepset of (X, Y), rather than W just being *in* the sepset of (X, Y).static voidpcOrientbk(Knowledge bk, Graph graph, List<Node> nodes, boolean verbose) Orients according to background knowledge.powerSet.static <T> TrunWithTimeout(Callable<T> task, long timeout, TimeUnit unit) Runs the given task with the given timeout.static intstructuralHammingDistance(Graph trueGraph, Graph estGraph) Tsamardinos, I., Brown, L.static Nodetranslate.
-
Method Details
-
pcOrientbk
-
pcdOrientC
public static void pcdOrientC(IndependenceTest test, Knowledge knowledge, Graph graph) throws InterruptedException Performs step C of the algorithm, as indicated on page xxx of CPS, with the modification that X--W--Y is oriented as X-->W<--Y if W is *determined by* the sepset of (X, Y), rather than W just being *in* the sepset of (X, Y).- Parameters:
test- aIndependenceTestobjectknowledge- aKnowledgeobjectgraph- aGraphobject- Throws:
InterruptedException
-
orientCollidersUsingSepsets
-
isArrowheadAllowed
-
basicCpdag
-
basicCpdagRestricted2
-
isLegalPag
Checks if the provided Directed Acyclic Graph (PAG) is a legal PAG.- Parameters:
pag- The Directed Acyclic Graph (PAG) to be checkedselection- The set of nodes to be conditioned on- Returns:
- A LegalPagRet object indicating whether the PAG is legal or not, along with a reason if it is not legal.
-
isLegalMag
Determines whether the given graph is a legal Mixed Ancestral Graph (MAG).- Parameters:
mag- the graph to be checkedselection- the set of nodes to be conditioned on- Returns:
- a LegalMagRet object indicating whether the graph is legal and providing an error message if it is not
-
arrangeByKnowledgeTiers
-
arrangeByKnowledgeTiers
-
getReachableNodes
public static Set<Node> getReachableNodes(List<Node> initialNodes, LegalPairs legalPairs, List<Node> c, List<Node> d, Graph graph, int maxPathLength) getReachableNodes.
- Parameters:
initialNodes- The nodes that reachability undirectedPaths start from.legalPairs- Specifies initial edges (given initial nodes) and legal edge pairs.c- a set of vertices (intuitively, the set of variables to be conditioned on.d- a set of vertices (intuitively to be used in tests of legality, for example, the set of ancestors of c).graph- the graph with respect to which reachability ismaxPathLength- the maximum length of a path to be considered.- Returns:
- the set of nodes reachable from the given set of initial nodes in the given graph according to the
criteria in the given legal pairs object.
A variable v is reachable from initialNodes iff for some variable X in initialNodes thers is a path U [X, Y1, ..., v] such that legalPairs.isLegalFirstNode(X, Y1) and for each [H1, H2, H3] as subpaths of U, legalPairs.isLegalPairs(H1, H2, H3).
The algorithm used is a variant of Algorithm 1 from Geiger, Verma, and Pearl (1990).
-
translate
-
powerSet
-
getCpcTripleType
public static GraphSearchUtils.CpcTripleType getCpcTripleType(Node x, Node y, Node z, IndependenceTest test, int depth, Graph graph) throws InterruptedException getCpcTripleType.
- Parameters:
x- aNodeobjecty- aNodeobjectz- aNodeobjecttest- aIndependenceTestobjectdepth- a intgraph- aGraphobject- Returns:
- a
GraphSearchUtils.CpcTripleTypeobject - Throws:
InterruptedException
-
structuralHammingDistance
Tsamardinos, I., Brown, L. E., and Aliferis, C. F. (2006). The max-min hill-climbing Bayesian network structure learning algorithm. Machine learning, 65(1), 31-78.Converts each graph (DAG or CPDAG) into its CPDAG before scoring.
-
getGraphComparison
Just counts arrowhead errors--for cyclic edges counts an arrowhead at each node.- Parameters:
trueGraph- aGraphobjecttargetGraph- aGraphobject- Returns:
- a
GraphUtils.GraphComparisonobject
-
getEdgewiseComparisonString
-
graphComparison
graphComparison.
- Parameters:
trueCpdag- aGraphobjectestCpdag- aGraphobjectout- aPrintStreamobject- Returns:
- an array of objects
-
isLatentVariableAlgorithmByAnnotation
Checks if the provided algorithm is a latent variable algorithm by inspecting the associated annotation.- Parameters:
algorithm- The algorithm to check.- Returns:
- true if the algorithm is a latent variable algorithm, false otherwise.
- Throws:
NullPointerException- if the algorithm is null.RuntimeException- if there is an error in getting the algorithm type from the annotation.
-
runWithTimeout
Runs the given task with the given timeout.- Type Parameters:
T- The type of the result.- Parameters:
task- The task to run.timeout- The timeout.unit- The time unit of the timeout.- Returns:
- The result of the task, or null if the task times out.
-
getAllRows
-