about summary refs log tree commit diff
path: root/sourcecodes/bnt-master/SLP/misc/Markov_equivalent_dags.m
blob: 455037c918dc8e4c29005914224c7881289b5501 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
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 );