Calibrating Jump Diffusion Models using Differential Evolution

Determining the correct parameter values to be used in a Jump-Diffusion model is not a trivial process (as outlined here).  In this blog post we will be using the biologically inspired differential evolution technique to calibrate a Jump-Diffusion model using simulated share price data.

The Jump Diffusion Transition Density

As discussed in a previous blog post, Jump-diffusion models are continuous-time stochastic processes.These models are used to reproduce stylized facts observed in asset price dynamics, such as the long tailed nature of return distributions. The Merton Jump-diffusion model's SDE is given as

dln(S_t) = \mu dt+ \sigma dW_t +dJ_t† . . . (1)

where \mu and \sigma are the constant drift and the diffusion volatility, and dJ_t is the jump processes. The jump process that we will be focusing on is the compound Poisson process. That is, dJ_t = d(\sum_{i=0}^{N_t}(Y_i-1)), where N_t is a Poisson process with constant rate \lambda and Y_i is the ith jump size. In this blog post we will assume that log(Y_i ) is normally distributed with constant mean \mu_j and constant variance \sigma_j^2.

The transition density, which will be used in calculating the likelihood function, of this jump diffusion model can be derived as follows:

Conditioning equation (1) on N(t) = n jumps, the increment of   \ln S(t) is N(\mu \tau+n\mu_j, \sigma^2 \tau+n\sigma_j^2) (that is, the increment has a normal distribution), where \tau is a time increment. It then follows that:

P(\ln(S(t+\tau)/S(t)=x |N(t)=n) = \frac{\phi \left( \frac{x-(\mu \tau+n \mu_j)}{\sqrt{\sigma^2\tau + n\sigma_j^2}}\right)}{\sqrt{\sigma^2\tau + n\sigma_j^2}}

thus the transition density is given as

P(\ln(S(t+\tau)/S(t)=x ,N(t)) = \sum_{n=0}^{\infty} \frac{\phi \left( \frac{x-(\mu \tau+n \mu_j)}{\sqrt{\sigma^2\tau + n\sigma_j^2}}\right)}{\sqrt{\sigma^2\tau + n\sigma_j^2}} ....(2)

where \phi(w) is the standard normal distribution evaluated at w.

The Likelihood function , which is to be maximized to find the parameters of the model, for this Jump-diffusion model is than given as :

L(\mu,\sigma,\lambda,\mu_j,\sigma_j|X)= \large\prod_{i=1}^{m} \sum_{n=0}^{\infty} \frac{\phi \left( \frac{x_i-(\mu \tau+n \mu_j)}{\sqrt{\sigma^2\tau + n\sigma_j^2}}\right)}{\sqrt{\sigma^2\tau + n\sigma_j^2}} ....(3)

where X is the vector of observations and m is the total number of observations. Note that since equation (3) involves an infinite sum, we cut it of at 10  in this blog post. The code, written in R, for the negative log-likelihood function is given below:

Equation (2) shows that the transition density of the Jump-diffusion model is an infinite, possibly unbounded, mixture of normal distributions. This then implies that the distribution is multi-modal. This makes equation (3) ideal for optimizing using Differential Evolution.

Differential Evolution

Differential Evolution (DE) is a stochastic, population-based optimization algorithm. The algorithm uses biology-inspired operations mutation, selection and crossover of successive generations. DE is used for real-valued functions which have real valued parameters. It does not use the gradient of the function being optimized and thus makes minimal assumptions about the problem being solved. More information about  DE can be found in this book.

DE is ideal for being applied to the optimization of the Likelihood function in equation (3) because it has many local minimum. This is due to the transition density in (2) being a mixture of normal distributions.

In this blog post we will be using the DE implementation that is available in the R package DEoptim in order to find the parameters that maximize the likelihood function in equation (3).

Simulation Study

In order to asses the how well the DE optimization works for calibrating a Jump-diffusion model, we performed a simulation study. In this study, we simulated returns from a Jump-diffusion model using various combinations of parameters, over 50 years of daily return data, and we tried to reproduce these parameters using the  DE calibration approach. A 100 simulations of the paths we made and the DE estimate was calculated for each simulated path.

The DE estimate was limited to 200 iterations.The convergence profile for the negative log-likelihood function for one of the paths is shown below:

Convergence plot of the negative log-likelihood function.

The results of the simulation study are as follows:

Parameter \mu \sigma \lambda \mu_j \sigma_j
True value 0.05 0.3 25 0.01 0.1
DE Estimate 0.0582 (0.041) 0.2997 (0.0024) 25.2561 (1.098) 0.00967 (0.003) 0.0975 (0.002)

The table above summaries the distribution of the estimate parameters. The DE estimate in the above table is the mean from the from the 100 simulations. The number in the brackets in the standard deviation.

The full distributions (for the 100 simulations) for the DE estimates  are shown the figures below:

Distribution of the drift for a 100 simulations. The true value is indicated by the red line.
Distribution of the diffusive volatility for the 100 simulations. The true value is indicated by the red line.
Distribution of the jump intensity for the 100 simulations. The true value is indicated by the red line.
Distribution of the mean jump size for the 100 simulations. The true value is indicated by the red line.
Distribution of the jump size standard deviation for the 100 simulations. The true value is indicated by the red line.

The above results show that DE produces estimates that are distributed around the true value with small standard deviations as well. The parameter that seems to not have been estimated correctly, although only marginally, is the jump size standard deviation. This can be seen by looking at the distribution of the estimates around the true value.

The main drawbacks of using DE is that it can be slow, and convergence is not guaranteed.

Code Used

Code to simulate jump diffusion path

Code for the DE optimization

2 Replies to “Calibrating Jump Diffusion Models using Differential Evolution”

  1. Hi,

    There's a typo in equations (2) and (3). Multiplying by the Poission distribution part is missing (it is correctly included in the code though).

    Thanks for the wonderful post.



  2. Hi,

    In the DE optimization code do you need to simulate the jump path? It seems like it not used and is not needed for the actual optimization. Also why is it differenced?



Leave a Reply

Your email address will not be published. Required fields are marked *