Skip to content
All library documents

Stabilizing Local Stochastic Volatility Calibration with Fokker–Planck ADI

Article Quant Q&A · Author: Dovie Chu

Summary

The document describes numerical instability when calibrating a local stochastic volatility model by solving a discretized Fokker–Planck equation with a Douglas alternating direction implicit scheme. Negative density values can make integrals used in the leverage function negative and break its square root. The author reports that zero-flux boundary conditions on the variance dimension improved stability, while larger time steps still caused the density to lose structure and calibration to fail. Rescaling the density was tried to address apparent mass loss.

The eventual update identifies the range of the log-variance variable as the key issue: it must extend far enough into negative values for variance to approach zero. An answer says positivity should generally be preserved, though small negative edge values from numerical noise may be truncated; it also suggests starting after a short initial step with a Gaussian density. Another option is the discrete adjoint of the backward Kolmogorov ADI scheme, using transposed matrices to obtain discrete Green functions. The discussion offers implementation clues, not a general proof or a full stability analysis.

Key ideas

  • Negative density values in the Fokker–Planck solve can invalidate leverage-function integrals and disrupt LSV calibration.
  • Zero-flux boundary conditions on the variance boundary improved the reported stability, but did not resolve failures at larger time steps.
  • The author ultimately traced the main issue to an insufficiently negative range for the log-variance grid.
  • Small negative edge values may arise from numerical noise and can be truncated to zero, according to the answer.
  • A discrete adjoint of the backward Kolmogorov ADI scheme is offered as an alternative approach.

Tags

Full text
# Negative Density in Local Stochastic Volatility (LSV) Model Calibration


# Negative Density in Local Stochastic Volatility (LSV) Model Calibration












I'm trying to calibrate Local stochastic volatility model using finite difference method, and I'm mainly following this referece: Tian (2015).

I met a problem when calibrating leverage function - the discritized fokker planck equation with ADI Douglas scheme will generate negative density, which leads to negative value in the integrals of leverage function and this will then break the square root calculation. However, there seems not much discussion in the references about this issue.

So my question is:

- Is ADI supposed to preserve the positivity of the density function? (If so, this indicates my current implementation is subject to some error.)

- If not, what should I do to avoid this?

----------------------------------------- Updates (0401):

I found that applying zero-flux boundary condition (described in QuantLib Document) helps a lot to stabilize the calibration process - no more negative integrals in square root function. The Monte Carlo roundtrip of five-year option has an error of 0.5 (compared to BS price) with ATM strike.

However, It is only stable when the time step is small (dt=1/300). If I try to use a non-uniform temporal grid which has larger time step for longer maturities, the density will lose its structure and calibration then fails. Another concern is I do see the density getting smaller as the calibration proceed in time and currently I'm fixing this by rescaling the density to one in each step.

So my current question is:

- I implemented the zero-flux boundary condition only on boundary of v and applied a simpler boundary condition over S - assume diminishing second order term in PDE. I'm wondering if this is the correct way to do it. Should I apply zero flux on boundary of S as well? if not, what should I use?

- How should I deal with the loss of density in calibration?

- How can I improve the calibration stability for large time step?

Thanks a lot!

----------------------------------------- Updates (0405):

The calibration process is still not stable. Truncation at zero only helps for small time step. I think there should be something to do with the way I implement ADI scheme. Here is the details about how I deal with Fokker Planck in ADI.

I start from the Fokker Planck equation as follow: \begin{align*} \partial_{t}f = &\frac{1}{2}v\partial_{x}^2L^2f \\ &+ (-r+q)\partial_{x}f + \frac{v}{2}\partial_{x}L^2f\\ &+ \frac{\sigma^2}{2}\frac{1}{v}\partial_{z}^2f \\ &+ ((-\kappa\theta-\frac{\sigma^2}{2})\frac{1}{v} + \kappa)\partial_{z}f + \kappa\theta\frac{1}{v}f\\ &+\rho\sigma\partial_{x}\partial_{z}Lf \end{align*} where $x=log(S/S_0)$ and $z=log(v/v0)$.

Then I rewrite this into matrix form: $$\partial_{t}f = F_0+F_1+F_2 $$ $$F_0 = \sigma*\rho*dx@f@dz$$

\begin{align*} F_1=f @ &[(-\kappa*\theta-0.5*\sigma^2)*dz@Diag(1/v\_vec)\\ &+ \kappa*dz\\ &+ 0.5*\sigma^2*dz2@Diag(1/v\_vec)\\ &+\kappa*\theta*Diag(1/v\_vec)] \end{align*}

for $ j = 1,2,...,Nz:$ \begin{align*} F_2[:,j]=&[-r*dx\\ &+ 0.5*v\_vec[j]*dx@Diag(L^2)\\ &+ 0.5*v\_vec[j]*dx2@Diag(L^2)]@f[:.j] \end{align*}

where:

- $f$ is an $m\times n$ matrix. $L$ is a vector with length $m$. $v\_vec$ is a vector with length $n$.

- $dx,dx2,dz,dz2$ are all differential operators (tri-diagonal matrix).

- $Diag(A)$ represents a square matrix with $A$ being diagonal.

- $'*'$ represents normal multiplication and $'@'$ represents matrix multiplication.

Then this form can directly fit into the ADI structure described in Tian(2015).

Could anyone see any problem in these ADI steps? Thanks a lot! ----------------------------------------- Updates (0415):

Problem solved!

The key factor is the range of the variables - especially the variable $z=log(v/v0)$. It needs to be negative enough so $v$ can be close enough to zero.

## Answer by Antoine Conze (score 3)

https://quant.stackexchange.com/a/63099

Yes it should preserve positivity. However due to numerical noise you may observe very small negative values on the edges of the lattice, that you can truncate to zero.

If you solve using Fokker-Planck you may want to start from $t=\delta t$ using a gaussian approximation for the density on the first step, so as to start from a smooth density.

An alternative to using Fokker-Planck is to use the discrete adjoint of the backward Kolmogorov ADI scheme, which is relatively easy to do because it amounts to reversing the steps of the ADI and using the transposed matrices. In this case you can solve directly for the discrete green functions.

Shown in full with attribution under the source's licence. Licence: CC BY-SA 4.0 (Stack Exchange)

This summary was written by Stratmill's research agent from the original; it is not a copy of the source.