Description Usage Arguments Details Value Choosing a Node Type Coding Factor Levels Validation Author(s) Examples
The relationship between a node and its parents must be defined
before the appropriate JAGS model statement can be constructed.
setNode
is the utility by which a user can define the distribution
of the node and its relationship to its parents (usually through a model
of some sort).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | setNode(
network,
node,
nodeType,
nodeFitter,
nodeFormula,
fitterArgs = list(),
decision = "current",
utility = "current",
fromData = !is.null(network$data),
...,
nodeData = NULL,
factorLevels = NULL,
validate = TRUE,
fitModel = getOption("Hyde_fitModel"),
policyValues = factorLevels
)
fromData()
fromFormula()
|
network |
A |
node |
A node within |
nodeType |
a valid distribution. See the data set
in |
nodeFitter |
the fitting function, such as |
nodeFormula |
A formula object specifying the relationship between a
node and its parents. It must use as a term every parent of |
fitterArgs |
Additional arguments to be passed to |
decision |
A value of either |
utility |
A value of either |
fromData |
Logical. Determines if a node's relationship is calculated
from the data object in |
... |
parameters to be passed to the JAGS distribution function. Each parameter
in the distribution function must be named. For
example, the parameters to pass to |
nodeData |
A data frame with the appropriate data to fit the model for the node. Data passed in this argument are applied only to this specific node. No checks are performed to ensure that all of the appropriate variables (the node and its parents) are included. |
factorLevels |
A character vector used to specify the levels of factors
when data are not provided for a node. The order of factors follows the
order provided by the user. This argument is only used when the node type
is either |
validate |
Logical. Toggles validation of parameters given in |
fitModel |
Logical. Toggles if the model is fit within the function call.
This may be set globally using |
policyValues |
A vector of values to be used in the policy matrix when
the node is decision node. This may be left |
The functions fromFormula()
and fromData()
help to control
how Hyde
determines the values of parameters passed to JAGS. If the
parameters passed in params
argument are to be calculated from the
data or inferred from the formula, these functions may be used as placeholders
instead of writing JAGS code in the params
argument.
By default, options(Hyde_fitModel=FALSE)
. This prevents setNode
from fitting any models. Instead, the fitting is delayed until the user
calls writeJagsModel
and all of the models are fit at the same time.
When using large data sets that may require time to run, it may be better to
leave this option FALSE
so that the models can all be compiled together
(especially if you are working interactively). Using fitModel=TRUE
will cause the model to be fit and the JAGS code for the parameters to be
stored in the nodeParams
attribute.
Returns the modified HydeNetwork
object.
Many of the distribution functions defined in JAGS have an equivalen
distribution function in R. You may inspect the jagsDists
data
frame to see the function names in each language. You may specify
the distribution function using the R name and it will be translated
to the equivalent JAGS function.
You may still use the JAGS names, which allows you to specify a
distribution in JAGS that does not have an R equivalent listed. Note,
however, that where R functions are supported, HydeNet
anticipates
the parameter names to be given following R conventions (See
the RParameter
column of jagsDists
.)
Of particular interest are dbern
and dcat
, which are
functions in JAGS that have no immediate equivalent in R. They provide
Bernoulli and Multinomial distributions, respectively.
The nodeFormula
argument will accept any valid R formula. If desired, you
may use a specific formulation to indicate the presence of factor levels in the
formula. For instance, consider the case of a variable y
with a binary
categorical parent x
coded as 0 = No, and 1 = Yes. JAGS expects the
formula y ~ c * x == 1
(where c
is a constant). However, in
factor variables with a large number of levels, it can be difficult to remember
what value corresponds to what level.
HydeNet
uses an internal (unexported) function within setNode
to allow
an alternate specification: y ~ c * (x == "Yes")
. So long as the factors in
the formula are previously defined within the network structure, HydeNet
will translate the level into its numeric code.
Note that it is required to write x == "Yes"
. "Yes" == x
will not
translate correctly.
The validation of parameters is performed by comparing the values provided with
the limits defined in the jagsDists$paramLogic
variable. (look at
data(jagsDists, data='HydeNet')
. For most node types, validation will
be performed for numeric variables. For deterministic variables, the validation
will only check that the parameter definition is a formula.
It is possible to pass character strings as definitions, but when this is done,
HydeNet
assumes you are passing JAGS code. Unfortunately, HydeNet
doesn't have to capability to validate JAGS code, so if there is an error in
the character string definition, it won't show up until you try to compile the
network. If you pass a character string as a parameter and leave
validate = TRUE
, a message will be printed to indicate that validation
is being ignored. This message can be avoided by using validate = FALSE
The two exceptions to this rule are when you pass fromFormula()
and
fromData()
as the parameter definition. These will skip the validation
without warning, since the definition will be built by HydeNet
and be
proper JAGS code (barring any bugs, of course).
Jarrod Dalton and Benjamin Nutter
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | data(PE, package="HydeNet")
Net <- HydeNetwork(~ wells +
pe | wells +
d.dimer | pregnant*pe +
angio | pe +
treat | d.dimer*angio +
death | pe*treat,
data = PE)
print(Net, d.dimer)
#* Manually change the precision
Net <- setNode(Net, d.dimer, nodeType='dnorm', mean=fromFormula(), sd=sqrt(2.65),
nodeFormula = d.dimer ~ pregnant * pe,
nodeFitter='lm')
print(Net, d.dimer)
|
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.