0

If I have a model like the one below, how do I access the theano function in order to get the value(s) for my model I'm fitting?

This is quite a basic model and so I could just calculate with the raw function for my variables. However, I intend to generate pymc3 models dynamically where some variables are reused/fixed/bounded etc.

I know I can access the theano function from model.makefn([expected]) but this will rely on transformed arguments like sigma_log_ instead of sigma.

Ideally, I'm looking for something like model.evalute([expected], alpha=1, beta=2)

Is there such a method?

Thanks

def function(a, b):
   # do something

basic_model = Model()

with basic_model:

    # Priors for unknown model parameters
    alpha = Normal('alpha', mu=0, sd=10)
    beta = Normal('beta', mu=0, sd=10, shape=2)
    sigma = HalfNormal('sigma', sd=1)

    # Expected value of outcome
    expected = Deterministic('expected', function(alpha,beta))
    # Likelihood (sampling distribution) of observations
    Y_obs = Normal('Y_obs', mu=function, sd=sigma, observed=Y)
Lucidnonsense
  • 1,195
  • 3
  • 13
  • 35

1 Answers1

2

The typical approach here would be to first sample from the model's posterior distribution with something like

with model:
    trace = pm.sample(N_SAMPLES)

then use the samples to approximate the posterior expected value of your function.