Conditioning¶
Conditioning is supported through the use of the condition
,
observe
and factor
operators. Only a brief summary of these
methods is given here. For a more detailed introduction, see the
Probabilistic Models of Cognition chapter on conditioning.
Note that because these operators interact with inference, they can only be used during inference. Attempting to use them outside of inference will produce an error.

condition
(bool)¶ Conditions the marginal distribution on an arbitrary proposition. Here,
bool
is the value obtained by evaluating the proposition.Example usage:
var model = function() { var a = flip(); var b = flip(); condition(a  b) return a; };

observe
(distribution, value[, sampleOpts])¶ Conceptually, this is shorthand for drawing a value from
distribution
and then conditioning on the value drawn being equal tovalue
, which could be written as:var x = sample(distribution); condition(x === value); return x;
However, in many cases expressing the condition in this way would be exceedingly inefficient, so
observe
uses a more efficient implementation internally.In particular, it’s essential to use
observe
to condition on the value drawn from a continuousdistribution
.When
value
isundefined
no conditioning takes place, andobserve
simply returns a sample fromdistribution
. In this case,sampleOpts
can be used to specify any options that should be used when sampling. Valid options are exactly those that can be given as the second argument to sample.Example usage:
var model = function() { var mu = gaussian(0, 1); observe(Gaussian({mu: mu, sigma: 1}), 5); return mu; };

factor
(score)¶ Adds
score
to the log probability of the current execution.