Description Usage Arguments Details Value Logic Sampling Likelihood Weighting Author(s) References Examples
Perform conditional probability queries (CPQs).
1 2 3 4 5 6 |
fitted |
an object of class |
x |
an object of class |
event, evidence |
a list, a data.frame, an unevaluated expression or TRUE. See Details and Examples below. |
nodes |
a vector of character strings, the labels of the nodes whose conditional distribution we are interested in. |
cluster |
an optional cluster object from package snow.
See |
method |
a character string, the method used to perform the conditional
probability query. Currently only logic sampling ( |
... |
additional tuning parameters. |
debug |
a boolean value. If |
cpquery
estimates the conditional probability of event
given
evidence
using the method specified in the method
argument.
cpdist
generates random observations conditional on the
evidence
using the method specified in the method
argument.
mutilated
constructs the mutilated network used for sampling
in likelihood weighting.
When event
or evidence
are of class lists, names should
correspond to nodes in the fitted
object and each component
will be treated as or
expression. For example an event like
list(A=c("a1", "a2"), B="c")
is equivalent to
(A=="a1"||A=="a2") & (B=="c")
. If either event
or
evidence
is a data.frames, it will be treated as a list.
If event
and evidence
arguments are unevaluated
expressions then they should describe the event of interest and the
conditioning evidence such that, if we denote with data
the
data set the network was learned from, data[eval(evidence,
data), ]
and data[eval(event, data), ]
return the correct
observations.
If either event
or evidence
is set to
TRUE
an unconditional probability query is performed with
respect to that argument.
cpquery
returns a numeric value, the conditional probability of event
conditional on evidence
.
cpudist
returns a data frame containing the observations generated from
the conditional distribution of the nodes
conditional on evidence
.
mutilated
returns a bn
or bn.fit
object, depending on the
class of x
.
Three tuning parameters are available:
n
: a positive integer number, the number of random observations
to generate from fitted
. Defaults to 5000 * nparams(fitted)
.
batch
: a positive integer number, the size of each batch
of random observations. Defaults to 10^4
.
query.nodes
: a a vector of character strings, the labels of
the nodes involved in event
and evidence
. Simple queries
do not require to generate observations from all the nodes in the
network, so cpquery
and cpdist
try to identify which
nodes are used in event
and evidence
and reduce the
network to their upper closure. query.nodes
may be used to
manually specify these nodes when automatic identification fails.
Note that the number of observations returned by cpdist
is always
smaller than n
, because logic sampling is a form of rejection
sampling. Therefore, only the obervations matching evidence
(out
of the n
that are generated) are returned, and their number depends
on the probability of evidence
.
Tuning parameters are the same as for logic sampling: n
, batch
and query.nodes
.
Marco Scutari
Koller D, Friedman N (2009). Probabilistic Graphical Models: Principles and Techniques. MIT Press.
Korb K, Nicholson AE (2010). Bayesian Artificial Intelligence. Chapman & Hall/CRC, 2nd edition.
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 | ## discrete Bayesian network (it's the same with ordinal nodes).
data(learning.test)
bn <- hc(learning.test)
plot(bn)
fitted <- bn.fit(bn, learning.test)
## the result should be around 0.025.
cpquery(fitted, expression((B == "b")), expression((A == "a")))
## for a single observation, predict the value of a single
## variable conditional on the others:
ev <- learning.test[2, -4]
cpquery(fitted, list(D = "b"), ev)
cpquery(fitted, list(D = "c"), ev)
cpquery(fitted, list(D = c("b", "c")), ev)
cpquery(fitted, list(D = "b", D = "c"), ev) # 0
## do the same with logical sampling:
cpquery(fitted, event = quote(C=='c'), evidence = learning.test[2, -3], method = "ls")
## do the same with likelihood weighting:
cpquery(fitted, event = quote(C=='c'), evidence = learning.test[2, -3], method = "lw")
## conditional distribution of A given C == "c".
prop.table(table(cpdist(fitted, "A", list(C = "c"), method = "lw")))
## Gaussian Bayesian network.
data(gaussian.test)
fitted = bn.fit(hc(gaussian.test), gaussian.test)
## the result should be around 0.04.
cpquery(fitted,
event = expression(((A >= 0) & (A <= 1)) & ((B >= 0) & (B <= 3))),
evidence = expression((C + D < 10)))
|
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.