maxAllTableParams | R Documentation |
These functions assume that an expected count contingency table can be
built from the network. They then try to find the set of parameters
maximizes the probability of the expected contingency table with
repeated calls to mapDPC
. The
function maxCPTParam
maximizes a single Pnode
and
the function maxAllTableParams
maximizes all Pnodes (i.e., the
value of PnetPnodes(net)
in a Pnet
.
maxAllTableParams(net, Mstepit = 5, tol = sqrt(.Machine$double.eps), debug=FALSE)
maxCPTParam(node, Mstepit = 5, tol = sqrt(.Machine$double.eps))
net |
A |
node |
A |
Mstepit |
A numeric scalar giving the number of maximization steps to take. Note that the maximization does not need to be run to convergence. |
tol |
A numeric scalar giving the stopping tolerance for the maximizer. |
debug |
A logical scalar. If true then
|
The GEMfit
algorithm uses a generalized EM algorithm to
fit the parameterized network to the given data. This loops over the
following steps:
Run the internal EM algorithm of the Bayes net package
to calculate expected tables for all of the tables being learned.
The function calcExpTables
carries out this step.
Find a set of table parameters which maximize the fit
to the expected counts by calling mapDPC
for each table. The function maxAllTableParams
does
this step.
Set all the conditional probability tables in the
network to the new parameter values. The function
BuildAllTables
does this.
Calculate the log likelihood of the
cases
under the new parameters and stop if no change. The
function calcPnetLLike
calculates the log likelihood.
The function maxAllTableParams
performs the M-step of this
operation. Under the global parameter independence assumption,
the parameters for the conditional probability tables for different
nodes are independent given the sufficient statistics; that is, the
expected contingency tables. The default method of
maxAllTableParams
calls maxCPTParam
on each node in
PnetPnodes(net)
.
After the hyper-Dirichlet EM algorithm is run by
calcExpTables
, a hyper-Dirichlet prior should be
available for each conditional probability table. As the parameter of
the Dirichlet distribution is a vector of pseudo-counts, the output of
this algorithm should be a table of pseudo counts. Often this is
stored as the updated conditional probability table and a vector of
row weights indicating the strength of information for each row.
Using the RNetica-package
, this is calculated
as: sweep(NodeProbs(item1),1,
NodeExperience(item1),"*")
The function maxCPTParm
is essentially a wrapper which extracts
the table of pseudo-counts from the network and then calls
mapDPC
to maximize the parameters, updating
the parameters of node
to the result.
The parameters Mstepit
and tol
are passed to
mapDPC
to control the gradient descent
algorithm used for maximization. Note that for a generalized EM
algorithm, the M-step does not need to be run to convergence, a couple
of iterations are sufficient. The value of Mstepit
may
influence the speed of convergence, so the optimal value may vary by
application. The tolerance is largely
irrelevant (if Mstepit
is small) as the outer EM algorithm does
the tolerance test.
The expression maxCPTParam(node)
returns node
invisibly.
The expression maxAllTableParams(net)
returns net
invisibly.
As a side effect the PnodeLnAlphas
and
PnodeBetas
fields of node
(or
all nodes in PnetPnodes(net)
) are updated to better fit
the expected tables.
As of version 0.6-2, the meaning of the debug
argument is
changed. In the new version, the
flog.logger
mechanism is used for
progress reports, and error reporting. In particular, setting
flog.threshold(DEBUG)
(or TRACE
)
will cause progress reports to be sent to the logging output.
The debug
argument has been repurposed. It now call
recover
when the error occurs, so that the problem can
be debugged.
The function maxCPTParam
is an abstract generic function,
and it needs specific implementations. See the
PNetica-package
for an example. A default
implementation is provides for maxAllTableParams
which loops
through calls to maxCPTParam
for each node in
PnetPnodes(net)
.
This function assumes that the host Bayes net implementation (e.g.,
RNetica-package
): (1) net
has an EM
learning function, (2) the EM learning supports hyper-Dirichlet
priors, (3) it is possible to recover the hyper-Dirichlet posteriors
after running the internal EM algorithm.
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.
Pnet
, Pnode
, GEMfit
,
calcPnetLLike
, calcExpTables
,
mapDPC
## Not run:
library(PNetica) ## Need a specific implementation
sess <- NeticaSession()
startSession(sess)
irt10.base <- ReadNetworks(system.file(
"testnets", "IRT10.2PL.base.dne",
package="PNetica"),
session=sess)
irt10.base <- as.Pnet(irt10.base) ## Flag as Pnet, fields already set.
irt10.theta <- NetworkFindNode(irt10.base,"theta")
irt10.items <- PnetPnodes(irt10.base)
## Flag items as Pnodes
for (i in 1:length(irt10.items)) {
irt10.items[[i]] <- as.Pnode(irt10.items[[i]])
## Add node to list of observed nodes
PnodeLabels(irt10.items[[1]]) <-
union(PnodeLabels(irt10.items[[1]]),"onodes")
}
casepath <- system.file("testdat", "IRT10.2PL.200.items.cas", package="PNetica")
BuildAllTables(irt10.base)
PnetCompile(irt10.base) ## Netica requirement
item1 <- irt10.items[[1]]
priB <- PnodeBetas(item1)
priA <- PnodeAlphas(item1)
priCPT <- PnodeProbs(item1)
gemout <- GEMfit(irt10.base,casepath,trace=TRUE)
calcExpTables(irt10.base,casepath)
maxAllTableParams(irt10.base)
postB <- PnodeBetas(item1)
postA <- PnodeAlphas(item1)
BuildTable(item1)
postCPT <- PnodeProbs(item1)
## Posterior should be different
stopifnot(
postB != priB, postA != priA
)
DeleteNetwork(irt10.base)
stopSession(sess)
## End(Not run)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.