Closed TTitscher closed 3 years ago
As for the very simple case with a single model, I would say there is no need to define a multimodel error, but maybe have a specific inference problem that has the same functions (e.g. noise models), but just works with vectors (no keys, just pure np.arrays). But maybe that's something we can decide later on. Similar with the definitions of the priors (decide later). But I think on the other hand we should also allow the user to define the loglike individually (just as an alternative) by providing the option of easily defining user-specific noise models (I see no reason why this whould not work) or directly the complete loglike. So thumbs up from my point of view.
In recent discussions and even implementations the idea of a noise model came up. Maybe even with separate parameters similar to the model_error.
Main purpose:
The multiple model errors of an inference problem currently return the individual model error contributions as a nested dictionary like
{experiment_key : {sensor : vector_of_numbers}}
. We now need a way to further adapt this output:tuple(experiment_key, sensor)
- that ends up with N individual vectors.exp_key, sensor
-pairsThe main interface would be like
Benefits:
The importance of the noise is elevated, somewhat to the same level as the model error. This is purely psychological though ;)
Provide reasonable, well defined default values like
Also allow for more complex noise patterns for individual sensors or even
exp_key - sensor
pairs. Side effect: This lets the user conveniently control which contributions of the many model error outputs he wants to include in the inference problem.Dealing with more complex noise models:
Dealing with correlations. Even tough we have not completely figured that out, I think something like
or even
could work.
The whole "the model error must return a dict
{sensor: values}
" is practical for complex cases, but pointless for models like "ax+b". AModelHasSingleOutputNoise
could deal with that case - mainly in test files - where it skips the loop over sensors in its evaluation.User experience: