# How does one calibrate a Vasicek model to actual cap prices?

I am trying to calibrate a Vasicek model given by $$dr(t) = k[\theta - r(t)] dt + \sigma dW(t), \quad r(0) = r_0$$ where $$k, \theta, \sigma, r_0 > 0$$. I am using the book by Brigo and Mercurio.

I found many resources online and in the book on how to estimate the parameters, given some sample data $$r_1, \dots, r_n$$. This is straightforward, since the distribution of our model is known and we can use (for example) maximum likelihood estimation.

However, I want to estimate my model parameters using actual cap prices from a (real) market. Under the Vasicek model one can calculate the bond price $$P(t,T)$$ and a zero bond option explicitly. Using the fact that a caplet can be expressed as (Brigo Mercurio page 41) $$\textbf{caplet}(0,T_{i-1},T_i, \tau_i, N, K) = N(1+\tau_iK)\textbf{ZBP}(0,T_{i-1},T_i, \frac1{1+\tau_iK}),$$ I can calculate the price of a cap (by summing over all caplets) using the model parameters $$k, \theta, \sigma$$ and $$r_0$$.

Say that we have market data on caps denoted by $$\textbf{Cap}^{market}_i$$. Accordingly we have the cap prices suggested by the model $$\textbf{Cap}^{vas}_i(k, \theta, \sigma, r_0)$$. Would a model calibration look something like this? \begin{align*} \text{argmin}_{k, \theta, \sigma, r_0} \sum_{i=1}^{N} |\textbf{Cap}^{market}_i - \textbf{Cap}^{vas}_i(k, \theta, \sigma, r_0)|^2 \end{align*}

Reading this post here and reading page 220 ff. in Brigo and Mercurio (which my professor suggested I should do) volatility matching is discussed. I am not sure why this is needed since I only have a single volatility parameter $$\sigma$$ in my model.

Since I am an absolute beginner I am a little confused on how the actual procedure of a calibration would look like.

• How does one actually get the model parameters $$k, \theta, \sigma, r_0$$ from the market data?
• How does a calibration procedure actually look like?
• Why is volatility matching needed?

Any help and/or beginner-friendly resources would be greatly appreciated!

• You described the calibration technique well. All you have to do is to solve the stated minimisation problem. You might also consider minimising relative pricing errors instead of absolute errors. The volatility matching means to translate your cap prices into implied volatilities and then to minimise the difference between observed implied volatilities (data) and model implied volatilities (theory). Often this is easier, but the idea is the same. Hirsa offers a beginner-friendly introduction Dec 3, 2022 at 13:01
• Thank you very much! That means: My stated minimisation problem is correct. For volatility matching one calculates the implied volatility from the market data (is this done using blacks caplet formula? Or how can I compute the market implied volatility?). Then one can find an expression for the model implied volatility $\sigma^{implied}_{vas}$ depending on $k, \sigma, \theta, r_0$. Now I just how to find $k, \sigma, \theta, r_0$ which solve $\sum_{i=1}^N |\sigma^{implied}_{market,i} - \sigma^{implied}_{vas,i}|$. Is this correct? Dec 3, 2022 at 13:13
• Yeah, that's all correct! You use Black's formula to translate prices into vols. Often market data is stated directly as implied vol. If not, you can easily do so with Black's formula. Similarly, you can translate your theoretical model prices (Vasicek) into implied vols using Black's formula. You then minimise the distance between both sets of implied volatilities. Here, you're probably using all-in volatility'', which is different from the individual stripped caplet implied volatilities. Dec 3, 2022 at 13:20
• Again, thank you very much. Now everything is much clearer for me! Dec 3, 2022 at 13:27
• I wrote my BSc thesis about short rate models following Brigo and Mercurio's excellent book and I also got to calibrate some of these models to cap volatilities. It was much fun! (: Dec 3, 2022 at 13:46