Skip to content

Software Architecture of elicito#

The core computational workflow of the expert prior elicitation method implemented in elicito is based on a simulation-based optimization approach: Given a generative model and a set of initial hyperparameters defining the prior distributions, the model can be run in forward mode to simulate elicited summaries by computing the predefined target quantities and summary statistics. These simulated summaries are then compared with the expert-elicited summaries obtained during the expert-elicitation stage. An iterative optimization scheme is employed to update the hyperparameters of the parametric prior distributions so as to minimize the discrepancy between simulated and expert-elicited summaries. In other words, the objective is to identify the vector of hyperparameters that yields the closest alignment between simulated and expert-elicited summaries.

flowchart TB subgraph eliobj["Elicit class (user input)"] input["Model, Parameters, Targets, \n Network, Initializer, Optimizer, \n Meta-Setting"] expert_dat["expert elicited summaries"] end subgraph initialization["initialization"] initializer["initializer"] hyper_parametric("prior parameters") hyper_deep("weights/biases of DNNs") end subgraph subGraph3["priors"] transformation["transform to constrained space"] prior["sample from prior in \n unconstrained space"] end subgraph model["model"] generative_model["run generative model \n in forward mode"] end subgraph summaries["summaries"] elicits["elicited summaries"] summary["target quantities"] end subgraph loss["loss"] total_loss["total loss"] indiv_loss["individual losses"] end subgraph optimization["optimization"] gradients["gradients"] end subgraph training["training"] subGraph3 prior_samples[/"prior samples"/] model model_output[/"model simulations"/] summaries simulated_summaries[/"simulated summaries"/] loss optimization check{"convergence \n criterion"} train_vars[/"trainable variables \n (=hyperparameters)"/] end input --> initializer initializer -- if parametric prior --> hyper_parametric initializer -- if deep prior --> hyper_deep hyper_parametric --> train_vars hyper_deep --> train_vars train_vars --> prior expert_dat --> indiv_loss & input prior --> transformation transformation --> prior_samples prior_samples --> generative_model generative_model --> model_output model_output --> summary summary --> elicits elicits --> simulated_summaries simulated_summaries --> indiv_loss indiv_loss --> total_loss total_loss --> gradients gradients --> check check -- not reached:
update --> train_vars check -- reached --> stop((("stop"))) classDef data shape: lean-r class prior_samples data