prob-fx-0.1.0.2: A library for modular probabilistic modelling
Safe HaskellNone
LanguageHaskell2010

Model

Description

An algebraic effect embedding of probabilistic models.

Synopsis

Documentation

newtype Model env es a Source #

Models are parameterised by:

1) a model environment env containing random variables that can be provided observed values

2) an effect signature es of the possible effects a model can invoke

3) an output type a of values that the model generates.

A model initially consists of (at least) two effects: Dist for calling primitive distributions and ObsReader env for reading from env.

Constructors

Model 

Fields

Instances

Instances details
Monad (Model env es) Source # 
Instance details

Defined in Model

Methods

(>>=) :: Model env es a -> (a -> Model env es b) -> Model env es b #

(>>) :: Model env es a -> Model env es b -> Model env es b #

return :: a -> Model env es a #

Functor (Model env es) Source # 
Instance details

Defined in Model

Methods

fmap :: (a -> b) -> Model env es a -> Model env es b #

(<$) :: a -> Model env es b -> Model env es a #

Applicative (Model env es) Source # 
Instance details

Defined in Model

Methods

pure :: a -> Model env es a #

(<*>) :: Model env es (a -> b) -> Model env es a -> Model env es b #

liftA2 :: (a -> b -> c) -> Model env es a -> Model env es b -> Model env es c #

(*>) :: Model env es a -> Model env es b -> Model env es b #

(<*) :: Model env es a -> Model env es b -> Model env es a #

handleCore :: (Member Observe es, Member Sample es) => Env env -> Model env (ObsReader env ': (Dist ': es)) a -> Prog es a Source #

The initial handler for models, specialising a model under a certain environment to produce a probabilistic program consisting of Sample and Observe operations.

Distribution smart constructors

Smart constructors for calling primitive distribution operations inside models, where each distribution comes with a primed and an unprimed variant.

An unprimed distribution takes the standard distribution parameters as well as an observable variable. This lets one later provide observed values for that variable to be conditioned against:

   exampleModel :: Observable env "b" Bool => Model env es Bool
   exampleModel = bernoulli 0.5 #b
   

A primed distribution takes no observable variable and so cannot be conditioned against; this will always representing sampling from that distribution:

   exampleModel' :: Model env es Bool
   exampleModel' = bernoulli' 0.5
   

bernoulli :: forall env es x. Observable env x Bool => Double -> ObsVar x -> Model env es Bool Source #

bernoulli' Source #

Arguments

:: Double

probability of True

-> Model env es Bool 

beta :: forall env es x. Observable env x Double => Double -> Double -> ObsVar x -> Model env es Double Source #

beta' Source #

Arguments

:: Double

shape 1 (α)

-> Double

shape 2 (β)

-> Model env es Double 

binomial :: forall env es x. Observable env x Int => Int -> Double -> ObsVar x -> Model env es Int Source #

binomial' Source #

Arguments

:: Int

number of trials

-> Double

probability of successful trial

-> Model env es Int

number of successful trials

categorical :: forall env es a x. (Eq a, Show a, Member a PrimVal, Observable env x a) => [(a, Double)] -> ObsVar x -> Model env es a Source #

categorical' Source #

Arguments

:: (Eq a, Show a, Member a PrimVal) 
=> [(a, Double)]

primitive values and their probabilities

-> Model env es a 

cauchy :: forall env es x. Observable env x Double => Double -> Double -> ObsVar x -> Model env es Double Source #

cauchy' Source #

Arguments

:: Double

location

-> Double

scale

-> Model env es Double 

halfCauchy :: forall env es x. Observable env x Double => Double -> ObsVar x -> Model env es Double Source #

halfCauchy' Source #

Arguments

:: Double

scale

-> Model env es Double 

deterministic :: forall env es a x. (Eq a, Show a, Member a PrimVal, Observable env x a) => a -> ObsVar x -> Model env es a Source #

deterministic' Source #

Arguments

:: (Eq a, Show a, Member a PrimVal) 
=> a

value to be deterministically generated

-> Model env es a 

dirichlet :: forall env es x. Observable env x [Double] => [Double] -> ObsVar x -> Model env es [Double] Source #

dirichlet' Source #

Arguments

:: [Double]

concentration parameters

-> Model env es [Double] 

discrete :: forall env es x. Observable env x Int => [Double] -> ObsVar x -> Model env es Int Source #

discrete' Source #

Arguments

:: [Double]

list of n probabilities

-> Model env es Int

integer index from 0 to n - 1

gamma :: forall env es x. Observable env x Double => Double -> Double -> ObsVar x -> Model env es Double Source #

gamma' Source #

Arguments

:: Double

shape (k)

-> Double

scale (θ)

-> Model env es Double 

normal :: forall env es x. Observable env x Double => Double -> Double -> ObsVar x -> Model env es Double Source #

normal' Source #

Arguments

:: Double

mean

-> Double

standard deviation

-> Model env es Double 

halfNormal :: forall env es x. Observable env x Double => Double -> ObsVar x -> Model env es Double Source #

halfNormal' Source #

Arguments

:: Double

standard deviation

-> Model env es Double 

poisson :: forall env es x. Observable env x Int => Double -> ObsVar x -> Model env es Int Source #

poisson' Source #

Arguments

:: Double

rate (λ)

-> Model env es Int

number of events

uniform :: forall env es x. Observable env x Double => Double -> Double -> ObsVar x -> Model env es Double Source #

uniform' Source #

Arguments

:: Double

lower-bound

-> Double

upper-bound

-> Model env es Double