You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I often seem to be getting an error when trying to run NUTS on the Goodwin-Oscillator example. The below code reproduces this. The failure only occurs when I use transformations but this doesn't seem to affect other (non-gradient-based) samplers.
import pints
import pints.toy
import numpy as np
model = pints.toy.GoodwinOscillatorModel()
# Create data
real_parameters = model.suggested_parameters()
times = np.linspace(0, 200, 1000)
values = model.simulate(real_parameters, times)
noise1 = 0.0001
noise2 = 0.003
noise3 = 0.05
noisy_values = np.array(values, copy=True)
noisy_values[:, 0] += np.random.normal(0, noise1, len(times))
noisy_values[:, 1] += np.random.normal(0, noise2, len(times))
noisy_values[:, 2] += np.random.normal(0, noise3, len(times))
# Create an object with links to the model and time series
problem = pints.MultiOutputProblem(model, times, values)
# Create a log posterior
log_prior = pints.MultivariateGaussianLogPrior(real_parameters,
np.diag([0.1, 0.1, 0.1, 0.1, 0.1]))
log_likelihood = pints.GaussianKnownSigmaLogLikelihood(problem,
[noise1, noise2, noise3])
log_posterior = pints.LogPosterior(log_likelihood, log_prior)
# Starting point that often gives errors
xs = [np.array([1.99890288, 4.01490882, 0.07433401, 0.11583922, 0.09271098])]
# Fails only when I use a transformation
transform = pints.LogTransformation(n_parameters=len(xs[0]))
mcmc = pints.MCMCController(log_posterior, 1, xs,
method=pints.NoUTurnMCMC,
transformation=transform)
mcmc.run()
When I print the sampled values as sampling progresses, I see that they diverge leading to infs quite quickly. Here's an example set of the first two iterations before failure occurs:
The failure ultimately happens when log_prior.evaluateS1(x) is done. But, to me, this doesn't seem like the problem itself necessarily, because the sampler has already gone infinite at that point.
This seems like a really hard one to figure out as could be any combination of issues with NUTS, transformations, Goodwin oscillator or the priors!
The text was updated successfully, but these errors were encountered:
I often seem to be getting an error when trying to run NUTS on the Goodwin-Oscillator example. The below code reproduces this. The failure only occurs when I use transformations but this doesn't seem to affect other (non-gradient-based) samplers.
When I print the sampled values as sampling progresses, I see that they diverge leading to infs quite quickly. Here's an example set of the first two iterations before failure occurs:
The failure ultimately happens when
log_prior.evaluateS1(x)
is done. But, to me, this doesn't seem like the problem itself necessarily, because the sampler has already gone infinite at that point.This seems like a really hard one to figure out as could be any combination of issues with NUTS, transformations, Goodwin oscillator or the priors!
The text was updated successfully, but these errors were encountered: