Statistic: Key functions for the Statistics class

StatisticR Documentation

Key functions for the Statistics class

Description

A Statistic is a functional that when applied to a Bayesian network returns a value. Usually, the statistic is a function of the distribution of a single node, but it could also be a function of several nodes. Statistic objets have a calcStat method, which when applied to a network, produces the value. Lists of statistics are often maintained by Bayes net engines to report values at designated times (e.g., after new evidence arrives). The Statistic function is the constructor or Statistic objects.

Usage

Statistic(fun, node, name = sprintf("%s(%s)", fun, node), ...)
calcStat(stat, net)

Arguments

fun

Object of class "character" giving a function to be applied to the nodes. The function should have signature(net="Pnet", node), where node could be either a Pnode or a list of Pnodes (See details).

node

Object of class "character" giving the name(s) of the node(s) that are referenced by the statistic. Note that these are not the actual node objects, as the network could be different at each call.

name

Object of class "character" giving a function to be applied to the nodes. The function should have signature(net="Pnet", node), where node could be either a Pnode or a list of Pnodes.

...

Other optional arguments for later extension.

stat

An object of class Statistic which will be applied to the net

net

A Pnet to which the statistic will be applied.

Details

The Statistic class represents a functional which can be applied to a Bayes net (a distribution, Pnet), which returns a value of interest. Usually the functional is a function of the marginal or joint distribution of a number of nodes, Pnode. Some connonical examples are the expected value and the median of the marginal distribution for a node.

Because the functional can be applied to different networks, the nodes are referenced by name instead of actual node objects. The calcStat method finds the nodes in the network, and then calls the refenced fun with arguments signature(net="Pnet", node), where node can either be a node or list of nodes. (Note that the network object may or may not be needed to calculate the statistic value).

Note that the statistic is free to return any kind of value. The mean of a discrete variable is typically numeric (using PnodeStateValues to link states of the node with numeric values). The mode and median return a factor variable, and the margin is a vector of values on the unit simplex.

The current statistics are currently supported are:

PnodeMargin

Provides the marginal distribution of a node.

PnodeEAP

Provides the expected a posteriori (i.e., mean) of a node using numeric values for the state from PnodeStateValues.

PnodeSD

Provides the standard deviation of a node using numeric values for the state from PnodeStateValues.

PnodeMedian

Provides the median value for a node, that is if the states are ordered, the one which is reached at a probability mass of 0.5.

PnodeMode

Returns the most likely state for (the marginal distribution of) node.

Value

The Statistic function returns an object of class Statistic.

Author(s)

Russell Almond

References

Almond, R.G., Mislevy, R.J. Steinberg, L.S., Yan, D. and Willamson, D. M. (2015). Bayesian Networks in Educational Assessment. Springer. Chapter 13.

See Also

Class: Statistic

calcStat

Avaliable Statistic functions: PnodeMargin, PnodeEAP, PnodeSD, PnodeMedian, PnodeMode.

These statistics will likely produce errors unless PnetCompile has been run first.

Examples


## 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 <- PnetFindNode(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]])
  
}
## Make some statistics
marginTheta <- Statistic("PnodeMargin","theta","Pr(theta)")
meanTheta <- Statistic("PnodeEAP","theta","EAP(theta)")
sdTheta <- Statistic("PnodeSD","theta","SD(theta)")
medianTheta <- Statistic("PnodeMedian","theta","Median(theta)")
modeTheta <- Statistic("PnodeMedian","theta","Mode(theta)")


BuildAllTables(irt10.base)
CompileNetwork(irt10.base) ## Netica requirement

calcStat(marginTheta,irt10.base)
calcStat(meanTheta,irt10.base)
calcStat(sdTheta,irt10.base)
calcStat(medianTheta,irt10.base)
calcStat(modeTheta,irt10.base)

DeleteNetwork(irt10.base)
stopSession(sess)

## End(Not run)

ralmond/Peanut documentation built on Sept. 19, 2023, 8:27 a.m.