Professional Documents
Culture Documents
A B
CA CA
P(B)P(A|B)P(C|A) = P(A,B)P(C|A) = P(B|A)P(A)P(C|A)
d-separation
• “d” stands for dependence
• Defines conditional independencies/dependencies
• Determines whether a set of X variables is independent of another
set Y, given a third set Z
• Intuitively important because it reveals how variables are related
• Computationally important because it provides a means for efficient
inferencing
• Reduces the effective dimension of inference problems
d-separation
• Formal definition: If A, B, and C are three disjoint subsets of nodes in
a DAG G, then C is said to d-separate A from B if along every path
between a node in A and a node in B there is a node v satisfying one
of the following two conditions:
1) v has converging arcs (i.e. there are two arcs pointing to v from the adjacent
nodes in the path) and neither v nor any of its descendants (i.e. the nodes
that can be reached from v) are in C
or
2) v is in C and does not have converging arcs
d-separation practice
• In R:
> library(bnlearn)
> dag <-
model2network("[A][S][E|A:S][O|E][R|E][T|O:R][Z|T]")
> dsep(bn = dag, x = "A", y = "O", z = "E")
[1] TRUE
• What this says is that given E, A and O are independent
> dsep(bn = dag, x = "A", y = "S")
[1] TRUE
> dsep(bn = dag, x = "A", y = "S", z = "E")
[1] [FALSE]
• Conditioning on a collider or its descendants (Z) makes the
parent nodes dependent
• Intuitively, if we know E, then certain combinations of A and S are more
likely and hence conditionally dependent
• Note that it is impossible for nodes directly linked by an edge
to be independent conditional on any other node
Equivalent class = CPDAG
• Two DAGs defined over the same set of
variables are equivalent if and only if they:
1) have the same skeleton (i.e. the same
underlying undirected graph)
and
2) the same v-structures
• Compelled edges: edges whose directions are
oriented in the equivalence class because
assuming the opposite direction would:
1) introduce new v-structures (and thus a different
DAG)
or
2) cycles (and thus the resulting graph would no
longer be a DAG)
• Note that DAGs can be probabilistically
equivalent but encode very different causal
relationships!
Markov blankets The Markov Blanket of Node X9
• Continuous data
Data exploration
• Violations of the assumptions of Densities of Mek, P38,
GBNs PIP2, and PIP3 along with
the normal distribution
• Highly skewed curves
• Concentrations cluster around 0
• Nonlinear correlations
• Difficult for accurate structure learning
• What can we do?
• Data transformations (log)
• Hybrid network: specify an appropriate
conditional distribution for each Concentration of PKA vs.
variable concentration of PKC
along with the fitted
• Requires extensive prior knowledge of the
regression line
signaling pathway
• Discretize
Discretizing the data
• Information-preserving discretization algorithm introduced by
Hartemink (2001)
1) Discretizes each variable into a large number of intervals
• idisc argument = type of intervals
• ibreaks argument = number of intervals
2) Iterates over the variables and collapses, for each of them, the pair of
adjacent intervals that minimize the lost of pairwise mutual information
• Basically does its best to reflect the dependence structure of the original data
> dsachs <- discretize(sachs, method = "hartemink", breaks = 3,
ibreaks = 60, idisc = "quantile")
• breaks = number of desired levels (“low”, “medium”, and “high”
concentrations)
Model averaging
• The quality of the structure learned from the data can be improved by
averaging multiple CPDAGs
• Bootstrap resampling as described in Friedman et al. (1999)
• “Perturb" the data
• Frequencies of edges and directions is their confidence measure
> boot <- boot.strength(dsachs, R = 500, algorithm = "hc",
algorithm.args = list(score = "bde", iss = 10))
• R = number of network structures
from to strength direction
Model averaging results 1
23
Raf
Plcg
Mek
PIP2
1
1
0.518
0.509
> boot[boot$strength > 0.85 & 24 Plcg PIP3 1 0.519
34 PIP2 PIP3 1 0.508
boot$direction >= 0.5, ]
56 Erk Akt 1 0.559
• strength = frequency of edge 57 Erk PKA 0.984 0.568089
• direction = frequency of edge direction 67 Akt PKA 1 0.566
conditional on the edge’s presence 89 PKC P38 1 0.508
90 PKC Jnk 1 0.509
• Many score-equivalent edges 100 P38 Jnk 0.95 0.505263
• This means the directions are not well Note: your numbers may differ since no seed was set but you
established should still have the same edges passing the threshold
> avg.boot <- averaged.network(boot,
threshold = 0.85)
The network
> avg.boot
• Network learned from the
discretized, observational data
• Since we are not confident in the
directions of any of the edges, we
remove them by constructing the
skeleton
> avg.boot <- skeleton(avg.boot)