Variable-dependent constrain on parameters

Hello UQWorld!

I would like to ask the following question: is it possible to set variable-dependent constrain on parameters?

I’m using the UQLab inversion module for model calibration of the Bouc-Wen-Baber-Noori SDF system’s parameters. The prior distribution of the parameters has been modelled with uniform distributions setting as Marginals Parameters the parameters’ range variation:

  PriorOpts.Marginals(1).Name       ='ki';
  PriorOpts.Marginals(1).Type       = 'Uniform';
  PriorOpts.Marginals(1).Parameters = [0.5e3 5e3];
  PriorOpts.Marginals(2).Name       = 'beta';
  PriorOpts.Marginals(2).Type       = 'Uniform';
  PriorOpts.Marginals(2).Parameters = [0 40];
  PriorOpts.Marginals(3).Name       = 'gamma';
  PriorOpts.Marginals(3).Type       = 'Uniform';
  PriorOpts.Marginals(3).Parameters = [-40 40];
  PriorOpts.Marginals(4).Name       = 'N';
  PriorOpts.Marginals(4).Type       = 'Uniform';
  PriorOpts.Marginals(4).Parameters = [1 4];
  myPriorDist = uq_createInput (PriorOpts);

In order to guarantee the BIBO stability of the model, must be: -beta < gamma < beta. This equation should always be met, otherwise the differential equation governing the problem may diverge. So I need to specify this constrain in each realization of the parameters beta and gamma (something like "PriorOpts.Marginals(3).Parameters = [-abs(beta(step_i)) abs(beta(step_i))] ") when the solver runs (I’m using AIES sampler).

I’ve tried to bypass this issue modifying my forward model generating a fictitious model response completely different from my observation data in order to ''indirectly assign", for those sets of parameters irrespective of the BIBO constrain, a probability next to zero.

function  u = uq_BoucWen(X,BoucWen)

        if     X(3) > abs(X(2)) || X(3) < - abs(X(2))
               u = zeros(1,length(BoucWen.Earthquake.time));
               for i = 1 : length(u) 
                   u(i) = 10e3 + 500 * randn; 
               [~,x]  = ode45(@(t,x)uq_solveODE(t,x,X,BoucWen),BoucWen.Earthquake.time,[0 , 0 , 0 , 0]);
               u = x(:,1)';

But this “dirty-issue-bypass” affects the analysis results and I think it is not efficient computationally.

Is there a way to model this dependency between these parameters?


1 Like

Hi Alessio - welcome to UQWorld!

This is actually a very interesting question, the issue is that the way you encode your prior information is probably wrong. The way you set up the problem implies that the parameters \gamma and \beta have uniform bounds and are independent, when in fact due to the constraint -\beta<\gamma<\beta this cannot be the case. You need to ask yourself, what prior knowledge you are actually trying to model.

Assuming that your prior knowledge is in fact that the parameter \gamma is uniformly distributed between the bounds set by \beta, you need to define the conditional distribution \pi(\gamma\vert\beta) as uniform. One way to do this is by transforming your input variables.

The simplest way would be to remove the variable \gamma from your input object and instead introduce an auxiliary variable

\delta \sim \mathcal{U}(-1,1).

Passing this variable to your model, you can then define the variable \gamma inside uq_BoucWen as

gamma = delta*beta;

This will guarantee that gamma is inside your requested bounds and that the conditional distribution of gamma \pi(\gamma\vert\beta) is in fact uniform.

One more comment on your dirty-bypass-approach: This approach is dangerous because it blurs the lines between the prior information and the likelihood function. You somehow try to impose parts of your prior constraints into the likelihood function that should only serve as a link between your model and the data. The results you get this way might be difficult to interpret.


Thank you for your reply!
Your smart solution should fix my problem!


1 Like