about summary refs log tree commit diff
path: root/sourcecodes/bnt-master/SLP/misc/Markov_equivalent_dags.m
diff options
context:
space:
mode:
Diffstat (limited to 'sourcecodes/bnt-master/SLP/misc/Markov_equivalent_dags.m')
-rw-r--r--sourcecodes/bnt-master/SLP/misc/Markov_equivalent_dags.m42
1 files changed, 42 insertions, 0 deletions
diff --git a/sourcecodes/bnt-master/SLP/misc/Markov_equivalent_dags.m b/sourcecodes/bnt-master/SLP/misc/Markov_equivalent_dags.m
new file mode 100644
index 00000000..455037c9
--- /dev/null
+++ b/sourcecodes/bnt-master/SLP/misc/Markov_equivalent_dags.m
@@ -0,0 +1,42 @@
+function [n_dags, dag_list] = Markov_equivalent_dags(dag)
+
+%
+% [n_dags, dag_list] = Markov_equivalent_dags(dag) 
+%
+% generates a cell array of all Markov equivalent DAGs
+% corresponding to the input DAG.
+%
+% YOU NEED TO HAVE THE STRUCTURE LEARNING PACKAGE IN PLACE TO USE THIS FUNCTION!
+%
+% Input:  DAG (in standard format, i.e. dag(a,b)=1 if and only if a->b)
+%
+% Output: Number of DAGs generated and 
+%         Cell array of all Markov-equivalent DAGs (in same format as input)
+% 
+% Sample Use:
+%
+%   Example 1:  
+%     % Find all DAGs equivalent to DAG of Asia Network
+%     BN = mk_asia_bnet();
+%     dag = BN.dag;
+%     [n_dags, dag_list] = Markov_equivalent_dags(dag);
+%     n_dags         % Answer should be: 6
+%     dag_list{1}  % displays the first DAG, etc.
+%
+%   Example 2:  
+%     % Find all DAGs equivalent to random DAG
+%     dag = mk_rnd_dag(4);
+%     [n_dags, dag_list] = Markov_equivalent_dags(dag);
+%
+% Imme Ebert-Uphoff (ebert@tree.com), 2007
+%
+
+  % find completed PDAG corresponding to DAG
+  cpdag = dag_to_cpdag(dag);
+
+  % convert to our notation, i.e. directed edge has (-1) instead of (1)
+  signed_pdag = pdag_unsigned_to_signed(cpdag);
+
+  % find all corresponding DAGs
+  [n_dags,dag_list] = pdag_to_all_dags( signed_pdag );
+