packages feed

goal-graphical-0.20: Goal/Graphical/Models.hs

{-# OPTIONS_GHC -fplugin=GHC.TypeLits.KnownNat.Solver -fplugin=GHC.TypeLits.Normalise -fconstraint-solver-iterations=10 #-}
{-# LANGUAGE UndecidableInstances #-}

-- | A few general definitions for Graphical Models.
module Goal.Graphical.Models
    ( Observation
    , Observations
    -- ** Hierarchical Models
    , ObservablyContinuous ( logObservableDensities, observableDensities )
    , logObservableDensity
    , observableDensity
    ) where

--- Imports ---


-- Package --

import Goal.Geometry

--- Latent Variable Class ---

-- | An observation from a latent variable model.
type family Observation f

-- | A list of observations.
type Observations f = [Observation f]

-- | Probability densities over observations in a latent variable model.
class ObservablyContinuous c f where
    logObservableDensities :: c # f -> Observations f -> [Double]
    logObservableDensities p = map (logObservableDensity p)

    observableDensities :: c # f -> Observations f -> [Double]
    observableDensities p = map (exp . logObservableDensity p)


logObservableDensity :: ObservablyContinuous c f => c # f -> Observation f -> Double
logObservableDensity p = head . logObservableDensities p . (:[])


observableDensity :: ObservablyContinuous c f => c # f -> Observation f -> Double
observableDensity p = exp . head . logObservableDensities p . (:[])