Pnet | R Documentation |
A parameterized Bayesian network. Note that this an abstract class.
If an object implements the Pnet protocol, then is.Pnet(net)
should return TRUE
.
is.Pnet(x)
as.Pnet(x)
Pnet(net, priorWeight=10, pnodes=list())
## S4 method for signature 'ANY'
Pnet(net, priorWeight=10, pnodes=list())
x |
A object to test to see if it a parameterized network, or to coerce into a parameterized network. |
net |
A network object which will become the core of the
|
priorWeight |
A numeric vector providing the default prior weight for nodes. |
pnodes |
A list of objects which can be coerced into
|
The Pnet
class is basically a protocol which any Bayesian
network net object can follow to work with the tools in the Peanut
package. This is really an abstract class (in the java programming
language, Pnet
would be an interface rather than a class). In
particular, a Pnet
is any object for which is.Pnet
returns true. The default method looks for the string "Pnet"
in the class list.
A Pnet
object has two “fields” (implemented through
the accessor methods). The function PnetPnodes
returns a list
of parameterized nodes or Pnode
s associate with the
network. The function PnetPriorWeight
gets (or sets)
the default weight to be used for each node.
The default constructor adds "Pnet"
to the class of net
and then sets the two fields using the accessor functions. There is
no default method for the as.Pnet
function.
In addition to the required fields, there are several optional
fields. The methods PnetName()
, PnetTitle()
,
PnetDescription()
, and PnetPathname()
all
provide generic setters and getters for mostly self-explanatory
properties of the network. For model fragments (such as evidence
models) which are meant to be ajoined to other networks, the accessor
PnetHub()
returns the name of the network to which it is
to be adjoined (such as a proficiency model). These optional feilds
are referenced by the function BuildNetManifest()
which
builds a table of meta-data from which to construct a network.
The Pnet supports hub-and-spoke architectures for Bayes nets. The hub
is a complete Bayesian network to which spokes, network fragments are
attached. For example, in a typical educational testing application,
the centeral student proficiency model will be the hub, and the
evidence models linking the proficiency variables to the observable
outcomes, will be the spokes. Only the spokes corresponding to the
tasks on a given test form need to be attached to draw inferences.
Spoke models are generally model fragments because they contain
“stub” nodes, references to nodes in the corresponding hub
model. The function PnetHub()
returns or sets the name
of the hub model for a spoke. For a hub net, this function returns
character(0)
or NULL
. The function
PnetMakeStubNodes()
will create stub node objects in the
spoke model, and the function PnetRemoveStubNodes()
will
remove them. These are called before and after creating graph
structures in Qmat2Pnet
. The functions
PnetAdjoin()
and PnetDetach()
adjoin a hub
and spoke node, matching the stub variables with their real
counterparts and detach them (reversing the process).
The importance of the Pnet
object is that it supports the
GEMfit
method which adjust the parameters of the
Pnode
objects to fit a set of case data. In order to be
compatible with GEMfit
, the Pnet
object must support
four methods: BuildAllTables
,
calcPnetLLike
, calcExpTables
, and
maxAllTableParams
.
The generic function BuildAllTables
builds conditional
probability tables from the current values of the parameters in all
Pnode
s. The default method loops through all of the nodes in
PnetPnodes
and calls the function
BuildTable
on each.
The generic function calcPnetLLike
calculates the log
likelihood of a set of cases given the current values of the
parameters. There is no default for this method as it implementation
dependent.
The generic function calcExpTables
calculates expected
cross-tabs for all CPT for the Pnode
s given a set of case
data. The easiest way to do this is to run the EM algorithm
for an unconstrained hyper-Dirichlet model for one or two cycles.
There is no default for this as it is implementation dependent.
The generic function maxAllTableParams
calculates the
parameters that maximize the fit to the expected tables for each
Pnode
. The default method loops over
PnetPnodes(net)
and applies the method
maxCPTParam
to each.
The function is.Pnet
returns a logical scalar indicating
whether or not the object claims to follow the Pnet
protocol.
The function as.Pnet
and Pnet
convert the argument into
a Pnet
and return that.
Russell Almond
Almond, R. G. (2015) An IRT-based Parameterization for Conditional Probability Tables. Paper presented at the 2015 Bayesian Application Workshop at the Uncertainty in Artificial Intelligence Conference.
Fields: PnetPriorWeight
, PnetPnodes
Generic Functions:
BuildAllTables
, calcPnetLLike
,
calcExpTables
, maxAllTableParams
,
PnetName()
, PnetTitle()
,
PnetDescription()
, PnetPathname()
,
PnetAdjoin()
, PnetDetach()
,
PnetMakeStubNodes()
,
PnetRemoveStubNodes()
,
PnetFindNode()
Functions: GEMfit
, BuildNetManifest
,
Pnet2Qmat
, Pnet2Omega
,
Qmat2Pnet
, Omega2Pnet
Related Classes: Pnode
, Warehouse
## Not run:
library(PNetica) ## Implementation of Peanut protocol
sess <- NeticaSession()
startSession(sess)
## Create network structure using RNetica calls
IRT10.2PL <- CreateNetwork("IRT10_2PL",session=sess)
theta <- NewDiscreteNode(IRT10.2PL,"theta",
c("VH","High","Mid","Low","VL"))
PnodeStateValues(theta) <- effectiveThetas(PnodeNumStates(theta))
PnodeProbs(theta) <- rep(1/PnodeNumStates(theta),PnodeNumStates(theta))
J <- 10 ## Number of items
items <- NewDiscreteNode(IRT10.2PL,paste("item",1:J,sep=""),
c("Correct","Incorrect"))
for (j in 1:J) {
PnodeParents(items[[j]]) <- list(theta)
PnodeStateValues(items[[j]]) <- c(1,0)
PnodeLabels(items[[j]]) <- c("observables")
}
## Convert into a Pnet
IRT10.2PL <- Pnet(IRT10.2PL,priorWeight=10,pnodes=items)
## Draw random parameters
btrue <- rnorm(J)
lnatrue <- rnorm(J)/sqrt(3)
dump(c("btrue","lnatrue"),"IRT10.2PL.params.R")
## Convert nodes to Pnodes
for (j in 1:J) {
items[[j]] <- Pnode(items[[j]],lnatrue[j],btrue[j])
}
BuildAllTables(IRT10.2PL)
is.Pnet(IRT10.2PL)
WriteNetworks(IRT10.2PL,"IRT10.2PL.true.dne")
DeleteNetwork(IRT10.2PL)
stopSession(sess)
## End(Not run)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.