FBSDE general case


Let’s consider the Forward-Backward SDE composed of one Forward SDE:

dx = a(x, y) * dt + b(x, y) * dW

and one Backward SDE:

dy = c(x, y) * dt + z * dW

where a, b and c are some functionals. Thanks to Dynare, I can solve this FBSDE using a second order approximation near its steady state using

dt = 1/12;

x - x(-1) = a(x(-1), y) * dt + b(x(-1), y) * dWt;
y(+1) - y = c(x(-1), y) * dt;

var dWt = dt;

Let’s assume now the more general case where a, b and c depend on z. I would need to define z as an endogenous variable, but what equation should be associated with it?

In other words, how can I access the volatility of an endogenous forward-looking variable?

Thanks a lot for your help!

Best regards,

What is z here and what is its relation to the

But at higher order, it is possible to define conditional variances. See e.g. https://github.com/JohannesPfeifer/DSGE_mod/blob/master/Basu_Bundick_2017/Basu_Bundick_2017.mod

Hello Johannes,

Thank you for your reply.

z is precisely the volatility of the endogenous forward-looking variable y, as is made clear by the equation for the dynamic of y:

dy = c(x, y) * dt + z * dW

Ultimately, a FBSDE consists of two equations

dx = a(x, y, z) * dt + b(x, y, z) * dW
dy = c(x, y, z) * dt + z * dW

for three unknown variables x, y and z.

As is well explained for example by Carmona & Delarue in their textbook on Mean Field Games:

“For the reader who is not familiar with the theory of forward-backward equations, it may sound rather strange to ask for the well posedness of a system with three unknowns but two equations only. Actually, the reader must remember the fact that the triple (X; Y; Z) is required to be progressively measurable with respect to F. In particular, it should not anticipate the future of W. The role of the process Z is precisely to guarantee the adaptedness of the solution with respect to the filtration F. In the end, the forward-backward system actually consists of two equations and a progressive measurability constraint.”

Dynare, for its part, requires the same number of equations and variables.

So how can this be sorted out?

Thanks a lot in advance!

Best regards,

Sorry, I am not an expert in this field. But as far as I understand, your are discretizing a differential equation to work with difference equations. But in that case, something needs to take the place of the

Yes indeed that is exactly what I am doing.

Let me ask you my question another way then:

Still considering my model with a predetermined variable x and a forward looking variable y, I am looking to access the volatility of y (named z) in the model block.

The missing equation would be something like

z = volatilityOf(y);

if only such a function existed.

But maybe we can make use of the policy function F (also known as decision rule) according to which the forward looking variable y can be express as a function of the predetermined one x:

y = F(x)

(see for example this paper from Dynare at the beginning of page 5: https://www.dynare.org/wp-repo/dynarewp002.pdf)

Applying Ito’s formula, we find

z = F’(x) * b(x,y,z);

where b is defined as in my previous messages.

That could be my missing equation if only I could access the derivative of the policy function F’(x) in the model block.

Do you know if that’s possible ?

Thanks a lot for your help !


When you say

what exactly do you mean? It’s not the unconditional variance of y as far as I can see.

Regarding your question, there may be no closed form way of doing this. But you may be able to solve this iteratively. Start with a guess for the policy function and its derivative. Compute the actual policy function based on that solution. Update the guess and keep iterating until you reach the fixed point.

Hello Johannes,

It is not the unconditional variance of y indeed, but the variance of y(+1) conditional on y. The missing equation I am looking for is actually:

z^2 = Var( y(+1) | y );

That I can compute following the example of the github link you sent me earlier.

However, that would give me z^2 only, and not the sign of z, which does matter in what I am doing.

Alternatively, I can write (b being defined as in my previous messages):

z * b(x,y) = Cov( y(+1), x | y, x(-1) );

How could I compute such a conditional covariance in the model block ?

Thank you!


I haven’t worked it out, but a covariance is simply a production of expectations. You should be able to define it using auxiliary variables.