| predict and impute | R Documentation |
Impute missing values in a data set or predict a variable from a Bayesian network.
## S3 method for class 'bn.fit'
predict(object, node, data, cluster, method = "parents", ...,
prob = FALSE, debug = FALSE)
impute(object, data, cluster, method, ..., strict = TRUE, debug = FALSE)
object |
an object of class |
data |
a data frame containing the data to be imputed. Complete observations will be ignored. |
node |
a character string, the label of a node. |
cluster |
an optional cluster object from package parallel. |
method |
a character string, the method used to impute the missing
values or predict new ones. The default value is |
... |
additional arguments for the imputation method. See below. |
prob |
a boolean value, used only by |
strict |
a boolean value. If |
debug |
a boolean value. If |
predict() returns the predicted values for node given the data
specified by data and the fitted network. Depending on the value of
method, the predicted values are computed as follows.
"parents": the predicted values are computed by plugging in
the new values for the parents of node in the local probability
distribution of node extracted from fitted.
"bayes-lw": the predicted values are computed by averaging
likelihood weighting simulations performed using all the available nodes
as evidence (obviously, with the exception of the node whose values we are
predicting). The number of random samples which are averaged for each new
observation is controlled by the n optional argument; the default
is 500. If the variable being predicted is discrete, the predicted
level is that with the highest conditional probability. If the variable is
continuous, the predicted value is the expected value of the conditional
distribution. The variables used to compute the predicted values can be
specified with the from optional argument; the default is to use
all relevant variables from the data. Note that the predicted values will
differ in each call to predict() since this method is based on a
stochastic simulation.
"exact": the predicted values are computed using exact inference.
They are maximum a posteriori estimates obtained using junction trees and
belief propagation for discrete networks, or posterior expectations
computed using closed-form expressions for the multivariate normal
distribution for Gaussian networks. Other networks are not supported. The
variables that are used to compute the predicted values can be specified
with the from optional argument; the default is to use those in the
Markov blanket of node.
impute() is based on predict(), and can impute missing values
with the same methods ("parents", "bayes-lw" and
"exact"). The method "bayes-lw" can take an additional argument
n, the number of random samples averaged for each observation. As in
predict(), imputed values will differ in each call to impute()
when method is set to "bayes-lw".
If object contains NA parameter estimates (because parameters
were learned from data with unobserved discrete parent configurations),
predict will predict NAs when those parent configurations appear
in data. See bn.fit for details on how to make sure
bn.fit objects contain no NA parameter estimates.
predict() returns a numeric vector (for Gaussian, conditional Gaussian
and zero-inflated nodes), a factor (for categorical nodes) or an ordered
factor (for ordinal nodes). If prob = TRUE and the predicted node is
discrete, the probabilities used for prediction are attached to the predicted
values as an attribute called prob.
impute() returns a data frame with the same structure as data.
Ties in prediction are broken using Bayesian tie breaking, that is, sampling at random from the tied values. Therefore, setting the random seed is required to get reproducible results.
Classifiers have a separate predict() method, see naive.bayes.
Marco Scutari
# missing data imputation.
with.missing.data = gaussian.test
with.missing.data[sample(nrow(with.missing.data), 500), "F"] = NA
fitted = bn.fit(model2network("[A][B][E][G][C|A:B][D|B][F|A:D:E:G]"),
gaussian.test)
imputed = impute(fitted, with.missing.data)
# predicting a variable in the test set.
training = bn.fit(model2network("[A][B][E][G][C|A:B][D|B][F|A:D:E:G]"),
gaussian.test[1:2000, ])
test = gaussian.test[2001:nrow(gaussian.test), ]
predicted = predict(training, node = "F", data = test)
# obtain the conditional probabilities for the values of a single variable
# given a subset of the rest, they are computed to determine the predicted
# values.
fitted = bn.fit(model2network("[A][C][F][B|A][D|A:C][E|B:F]"), learning.test)
evidence = data.frame(A = factor("a", levels = levels(learning.test$A)),
F = factor("b", levels = levels(learning.test$F)))
predicted = predict(fitted, "C", evidence,
method = "bayes-lw", prob = TRUE)
attr(predicted, "prob")
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.