Safe Haskell | Safe-Infered |
---|

Factors

- class Factor f where
- isScalarFactor :: f -> Bool
- emptyFactor :: f
- containsVariable :: f -> DV -> Bool
- factorVariables :: f -> [DV]
- factorMainVariable :: f -> DV
- factorWithVariables :: [DV] -> [Double] -> Maybe f
- factorValue :: f -> [DVI] -> Double
- factorStringValue :: f -> [DVI] -> String
- variablePosition :: f -> DV -> Maybe Int
- factorDimension :: f -> Int
- factorNorm :: f -> Double
- factorScale :: Double -> f -> f
- factorFromScalar :: Double -> f
- evidenceFrom :: [DVI] -> Maybe f
- isUsingSameVariablesAs :: f -> f -> Bool
- factorDivide :: f -> Double -> f
- factorToList :: f -> [Double]
- factorProduct :: [f] -> f
- factorProjectOut :: [DV] -> f -> f
- factorProjectTo :: [DV] -> f -> f

- isomorphicFactor :: Factor f => f -> f -> Bool
- normedFactor :: Factor f => f -> f
- displayFactorBody :: Factor f => f -> String
- changeFactorInFunctor :: (Factor f, Functor m) => f -> m f -> m f
- class FactorContainer m where
- changeFactor :: Factor f => f -> m f -> m f

- class Set s where
- emptySet :: s a
- union :: Eq a => s a -> s a -> s a
- intersection :: Eq a => s a -> s a -> s a
- difference :: Eq a => s a -> s a -> s a
- isEmpty :: s a -> Bool
- isElem :: Eq a => a -> s a -> Bool
- addElem :: Eq a => a -> s a -> s a
- nbElements :: s a -> Int
- subset :: Eq a => s a -> s a -> Bool
- equal :: Eq a => s a -> s a -> Bool

- class BayesianDiscreteVariable v where
- newtype Vertex = Vertex {}
- data DV = DV !Vertex !Int
- data TDV s
- data DVI
- type DVISet = [DVI]
- tdvi :: Enum s => DVI -> (TDV s, s)
- setDVValue :: DV -> Int -> DVI
- instantiationValue :: DVI -> Int
- instantiationVariable :: DVI -> DV
- variableVertex :: LabeledVertex l => l -> Vertex
- (=:) :: Instantiable d v => d -> v -> DVI
- forAllInstantiations :: DVSet s -> [[DVI]]
- factorFromInstantiation :: Factor f => DVI -> f

# Factor

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 -> [DV]Source

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 :: [DV] -> [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 -> [DVI] -> DoubleSource

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

factorStringValue :: f -> [DVI] -> StringSource

String representation of a factor value

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 :: [DVI] -> Maybe fSource

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

isUsingSameVariablesAs :: f -> f -> BoolSource

Test if two factors are coding for the same probability dependence. It does not test if the factors are equal (same probabilities) but just if they involve the same variables so are linked to the same node in the Bayesian network

factorDivide :: f -> Double -> fSource

Divide all the factor values

factorToList :: f -> [Double]Source

factorProduct :: [f] -> fSource

Multiply factors.

factorProjectOut :: [DV] -> f -> fSource

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

factorProjectTo :: [DV] -> 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

displayFactorBody :: Factor f => f -> StringSource

changeFactorInFunctor :: (Factor f, Functor m) => f -> m f -> m fSource

Change factor in a functor (only factor values should have been changed) It assumes that the variables of a factor are enough to identify it. If the functor is containing several factors with same set of variables then it won't give a meaningful result. So it should be used only on functor derived from a Bayesian Network.

class FactorContainer m whereSource

Structure containing factors which can be replaced. It is making sense when the factors are related to the nodes of a Bayesian network.

changeFactor :: Factor f => f -> m f -> m fSource

FactorContainer [] | |

FactorContainer (JTree Cluster) | |

FactorContainer (SimpleGraph local edge) |

# Set of variables

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

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

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

# Implementation

Vertex type used to identify a vertex in a graph

## Discrete variables and instantiations

A discrete variable

A typed discrete variable

Discrete Variable instantiation. A variable and its value

setDVValue :: DV -> Int -> DVISource

Create a discrete variable instantiation for a given discrete variable

instantiationValue :: DVI -> IntSource

Extract value of the instantiation

instantiationVariable :: DVI -> DVSource

Discrete variable from the instantiation

variableVertex :: LabeledVertex l => l -> VertexSource

(=:) :: Instantiable d v => d -> v -> DVISource

Create a variable instantiation using values from an enumeration

forAllInstantiations :: DVSet s -> [[DVI]]Source

Generate all instantiations of variables The DVInt can be in any order so the tag s is not used

factorFromInstantiation :: Factor f => DVI -> fSource

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