Skip to content

Diagnostic plots do not do so well with simple (one-parameter) models #135

@Kucharssim

Description

@Kucharssim

Diagostic plots fail when the model has only one parameter, see the simple example below. I can make a PR to fix this myself, but it seems I don't have permissions to assign myself to this issue as instructed in CONTIBUTING

import bayesflow as bf
import numpy as np
import matplotlib.pyplot as plt


RNG = np.random.default_rng(314159)

model = bf.simulation.GenerativeModel(
    prior = bf.simulation.Prior(
        prior_fun = lambda: np.r_[RNG.beta(a=1, b=1)]
    ),
    simulator = bf.simulation.Simulator(
        simulator_fun = lambda theta: np.r_[RNG.binomial(n=10, p=theta)]
    )
)

amortizer = bf.amortizers.AmortizedPosterior(
    inference_net = bf.inference_networks.InvertibleNetwork(num_params=1)
)

trainer = bf.trainers.Trainer(
    amortizer = amortizer,
    generative_model = model,
    configurator = lambda forward_dict: { "parameters": forward_dict["prior_draws"].astype(np.float32), "direct_conditions": forward_dict["sim_data"].astype(np.float32) }
)



sims = trainer.configurator(model(100))
posterior_samples = amortizer.sample(sims, n_samples=500)

print(sims["parameters"].shape)
print(posterior_samples.shape)


try:
    f = bf.diagnostics.plot_sbc_histograms(posterior_samples, sims["parameters"], num_bins=5)
except:
    print("Could not plot sbc histogram")

try:
    f = bf.diagnostics.plot_sbc_ecdf(posterior_samples, sims["parameters"], difference=True, stacked=False)
except:
    print("Could not plot sbc ecdf plot")

try:
    f = bf.diagnostics.plot_recovery(posterior_samples, sims["parameters"])
except:
    print("Could not plot recovery plot")


try:
    f = bf.diagnostics.plot_z_score_contraction(posterior_samples, sims["parameters"])
except:
    print("Could not plot posterior contraction plot")


plt.show()

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions