hbayes-0.1: Inference with Discrete Bayesian Networks

Safe HaskellSafe-Infered




Conditional probability table

Conditional Probability Tables and Probability tables



class FactorPrivate f => Factor f whereSource

A factor as used in graphical model It may or not be a probability distribution. So it has no reason to be normalized to 1


isScalarFactor :: f -> BoolSource

When all variables of a factor have been summed out, we have a scalar

emptyFactor :: fSource

An empty factor with no variable and no values

containsVariable :: f -> DV -> BoolSource

Check if a given discrete variable is contained in a factor

factorVariables :: f -> DVSetSource

Give the set of discrete variables used by the factor

factorMainVariable :: f -> DVSource

Return A in P(A | C D ...). It is making sense only if the factor is a conditional propbability table. It must always be in the vertex corresponding to A in the bayesian graph

factorWithVariables :: DVSet -> [Double] -> Maybe fSource

Create a new factors with given set of variables and a list of value for initialization. The creation may fail if the number of values is not coherent with the variables and their levels. For boolean variables ABC, the value must be given in order FFF, FFT, FTF, FTT ...

factorValue :: f -> DVISet Int -> DoubleSource

Value of factor for a given set of variable instantitation. The variable instantion is like a multi-dimensional index.

variablePosition :: f -> DV -> Maybe IntSource

Position of a discrete variable in te factor (p(AB) is differennt from p(BA) since values are not organized in same order in memory)

factorDimension :: f -> IntSource

Dimension of the factor (number of floating point values)

factorNorm :: f -> DoubleSource

Norm of the factor = sum of its values

factorScale :: Double -> f -> fSource

Scale the factor values by a given scaling factor

factorFromScalar :: Double -> fSource

Create a scalar factor with no variables

evidenceFrom :: DVISet Int -> Maybe fSource

Create an evidence factor from an instantiation. If the instantiation is empty then we get nothing

factorDivide :: f -> Double -> fSource

Divide all the factor values

factorProduct :: [f] -> fSource

Multiply factors.

factorProjectOut :: DVSet -> f -> fSource

Project out a factor. The variable in the DVSet are summed out

factorProjectTo :: DVSet -> f -> fSource

Project to. The variable are kept and other variables are removed


isomorphicFactor :: Factor f => f -> f -> BoolSource

Test equality of two factors taking into account the fact that the variables may be in a different order. In case there is a distinction between conditionned variable and conditionning variables (imposed from the exterior) then this comparison may not make sense. It is a comparison of function of several variables which no special interpretation of the meaning of the variables according to their position.

normedFactor :: Factor f => f -> fSource

Norm the factor

Set of variables

class Set s whereSource

A Set of variables used in a factor. s is the set and a the variable


emptySet :: s aSource

Empty set

union :: Eq a => s a -> s a -> s aSource

Union of two sets

intersection :: Eq a => s a -> s a -> s aSource

Intersection of two sets

difference :: Eq a => s a -> s a -> s aSource

Difference of two sets

isEmpty :: s a -> BoolSource

Check if the set is empty

isElem :: Eq a => a -> s a -> BoolSource

Check if an element is member of the set

addElem :: Eq a => a -> s a -> s aSource

Add an element to the set

nbElements :: s a -> IntSource

Number of elements in the set

subset :: Eq a => s a -> s a -> BoolSource

Check if a set is subset of another one

equal :: Eq a => s a -> s a -> BoolSource

Check set equality


Set [] 

class BayesianDiscreteVariable v whereSource

A discrete variable has a number of levels which is required to size the factors


dimension :: v -> IntSource


newtype Vertex Source

Vertex type used to identify a vertex in a graph




vertexId :: Int


Discrete variables and instantiations

data DV Source

A discrete variable


DV !Vertex !Int 


type DVSet = [DV]Source

A set of discrete variables

data DVI a Source

Discrete Variable instantiation. A variable and its value


Eq a => Eq (DVI a) 
Show a => Show (DVI a) 
LabeledVertex (DVI a) 

type DVISet a = [DVI a]Source

A set of variable instantiations

setDVValue :: DV -> a -> DVI aSource

Create a discrete variable instantiation for a given discrete variable

instantiationValue :: DVI t -> tSource

Extract value of the instantiation

instantiationVariable :: DVI t -> DVSource

Discrete variable from the instantiation

variableVertex :: LabeledVertex l => l -> VertexSource

(=:) :: (Bounded b, Enum b) => DV -> b -> DVI IntSource

Create a variable instantiation using values from an enumeration

forAllInstantiations :: DVSet -> [DVISet Int]Source

Generate all instantiations of variables

factorFromInstantiation :: Factor f => DVI Int -> fSource

Convert a variable instantation to a factor Useful to create evidence factors



:: DVSet

Old order

-> DVSet

New order

-> [Double]

Old values

-> [Double]

New values

Change the layout of values in the factor to correspond to a new variable order


data CPT Source

Mainly used for conditional probability table like p(A B | C D E) but the normalization to 1 is not imposed. And the conditionned variables are not different from the conditionning ones. The dimensions for each variables are listed. The variables on the left or right of the condition bar are not tracked. What's matter is that it is encoding a function of several variables. Marginalization of variables will be computed from the bayesian graph where the knowledge of the dependencies is. So, this same structure is used for a probability too (conditioned on nothing)


Show CPT 
Arbitrary CPT 
FactorPrivate CPT 
Factor CPT