Learn R Programming

gRain (version 1.2-5)

querygrain: Set evidence and query a network

Description

Query an independence network, i.e. obtain the conditional distribution of a set of variables given finding (evidence) on other variables.

Usage

setEvidence(object, nodes=NULL, states=NULL, evidence=NULL, nslist=NULL, propagate=TRUE, details=0) getEvidence(object) pEvidence(object) retractEvidence(object, nodes=NULL, propagate=TRUE)
querygrain(object, nodes = nodeNames(object), type = "marginal", evidence = NULL, exclude = TRUE, normalize = TRUE, result="array", details = 0)

Arguments

object
A "grain" object
nodes
A vector of nodes; those nodes for which the (conditional) distribution is requested.
states
A vector of states (of the nodes given by 'nodes')
evidence
An alternative way of specifying findings (evidence), see examples below.
nslist
deprecated
exclude
If TRUE then nodes on which evidence is given will be excluded from nodes (see above).
propagate
Should the network be propagated?
normalize
Should the results be normalized to sum to one.
type
Valid choices are "marginal" which gives the marginal distribution for each node in nodes; "joint" which gives the joint distribution for nodes and "conditional" which gives the conditional distribution for the first variable in nodes given the other variables in nodes.
result
If "data.frame" the result is returned as a data frame (or possibly as a list of dataframes).
details
Debugging information

Value

A list of tables with potentials.

References

Sren Hjsgaard (2012). Graphical Independence Networks with the gRain Package for R. Journal of Statistical Software, 46(10), 1-26. http://www.jstatsoft.org/v46/i10/.

See Also

setFinding getFinding retractFinding pFinding

Examples

Run this code
testfile <- system.file("huginex", "chest_clinic.net", package = "gRain")
chest <- loadHuginNet(testfile, details=0)
qb <- querygrain(chest)
qb

lapply(qb, as.numeric) 
sapply(qb, as.numeric) 

## setFinding / setEvidence

yn <- c("yes","no")
a    <- cptable(~asia, values=c(1,99),levels=yn)
t.a  <- cptable(~tub+asia, values=c(5,95,1,99),levels=yn)
s    <- cptable(~smoke, values=c(5,5), levels=yn)
l.s  <- cptable(~lung+smoke, values=c(1,9,1,99), levels=yn)
b.s  <- cptable(~bronc+smoke, values=c(6,4,3,7), levels=yn)
e.lt <- cptable(~either+lung+tub,values=c(1,0,1,0,1,0,0,1),levels=yn)
x.e  <- cptable(~xray+either, values=c(98,2,5,95), levels=yn)
d.be <- cptable(~dysp+bronc+either, values=c(9,1,7,3,8,2,1,9), levels=yn)
plist <- compileCPT(list(a, t.a, s, l.s, b.s, e.lt, x.e, d.be))
chest <- grain(plist)


## 1) These two forms are identical
setEvidence(chest, c("asia","xray"), c("yes", "yes"))
setFinding(chest, c("asia","xray"), c("yes", "yes"))

## 2) Suppose we do not know with certainty whether a patient has
## recently been to Asia. We can then introduce a new variable
## "guess.asia" with "asia" as its only parent. Suppose
## p(guess.asia=yes|asia=yes)=.8 and p(guess.asia=yes|asia=no)=.1
## If the patient is e.g. unusually tanned we may set
## guess.asia=yes and propagate. This corresponds to modifying the
## model by the likelihood (0.8, 0.1) as
setEvidence(chest, c("asia","xray"), list(c(0.8,0.1), "yes"))

## 3) Hence, the same result as in 1) can be obtained with
setEvidence(chest, c("asia","xray"), list(c(1, 0), "yes"))

## 4) An alternative specification using evidence is
setEvidence(chest, evidence=list("asia"=c(1, 0), "xray"="yes"))

Run the code above in your browser using DataLab