Quant Memo
Advanced

Short Rate Models: Vasicek And CIR

A short rate model treats the interest rate itself as a random, mean-reverting process — like a thermostat with noise — and Vasicek and CIR are the two simplest versions, differing only in whether the noise is allowed to push the rate below zero.

Prerequisites: The Ornstein-Uhlenbeck Process, OIS Discounting

A thermostat doesn't hold a room at exactly 70 degrees — it constantly nudges the temperature back toward that setpoint, correcting harder the further the room has drifted, while the room also picks up random jostling from doors opening and people walking through. A short rate model treats the interest rate the same way: not a fixed number, and not a random walk that wanders forever, but a value that gets pulled back toward some long-run average, disturbed by ongoing random noise. The Vasicek and CIR models are the two simplest, most widely taught versions of that idea, and the entire difference between them comes down to one question: is the noise allowed to push the rate below zero?

The Vasicek model

drt=a(brt)dt+σdWt.dr_t = a(b - r_t)\, dt + \sigma\, dW_t .

In plain English: rtr_t is the instantaneous short rate right now. bb is the long-run average rate the model pulls toward — the thermostat's setpoint. aa is the speed of pull: how hard the model corrects when rtr_t strays from bb: a bigger aa means faster reversion. σ\sigma is the size of the random noise, and dWtdW_t is that noise itself, a random shove of typical size dt\sqrt{dt}. The term a(brt)a(b - r_t) is positive (pulling the rate up) whenever rtr_t is below bb, and negative (pulling it down) whenever rtr_t is above bb — exactly a thermostat's correction. This is the same Ornstein-Uhlenbeck process used elsewhere in finance, applied specifically to interest rates.

Worked example 1 — mean reversion in action

Take a=0.5a = 0.5, b=4%b = 4\%, σ=1%\sigma = 1\%, starting rate r0=2%r_0 = 2\%, and one-year time steps (dt=1dt = 1). Simulate two steps using a specific, deterministic pair of shocks so the arithmetic is checkable by hand.

Step 1, shock Z1=+1Z_1 = +1 (one standard deviation up): r1=r0+a(br0)dt+σZ1=0.02+0.5(0.040.02)(1)+0.01(1)=0.02+0.01+0.01=0.04r_1 = r_0 + a(b - r_0)\,dt + \sigma Z_1 = 0.02 + 0.5(0.04 - 0.02)(1) + 0.01(1) = 0.02 + 0.01 + 0.01 = 0.04, or 4%. Notice the pull term alone, 0.5×0.02=0.010.5 \times 0.02 = 0.01, moved the rate a full percentage point closer to the 4% target — mean reversion is already doing real work in a single step.

Step 2, shock Z2=1Z_2 = -1: r2=r1+a(br1)dt+σZ2=0.04+0.5(0.040.04)(1)+0.01(1)=0.04+00.01=0.03r_2 = r_1 + a(b - r_1)\,dt + \sigma Z_2 = 0.04 + 0.5(0.04 - 0.04)(1) + 0.01(-1) = 0.04 + 0 - 0.01 = 0.03, or 3%. Once the rate sits exactly at the long-run average, the pull term vanishes entirely — there's nothing left to correct — and the rate only moves because of the pure noise term.

Worked example 2 — the negative-rate problem, and CIR's fix

Vasicek's noise term, σdWt\sigma\, dW_t, has a fixed size no matter how low the rate has already fallen — which means a large enough downward shock can push it below zero. Take a=0.5a = 0.5, b=1%b = 1\%, σ=3%\sigma = 3\%, r0=0.5%r_0 = 0.5\%, and a two-standard-deviation downward shock, Z=2Z = -2: r1=0.005+0.5(0.010.005)(1)+0.03(2)=0.005+0.00250.06=0.0525r_1 = 0.005 + 0.5(0.01 - 0.005)(1) + 0.03(-2) = 0.005 + 0.0025 - 0.06 = -0.0525, or 5.25%-5.25\%. A clearly unrealistic result for most economic environments before the era of deliberately negative central bank rates, and exactly the criticism leveled at Vasicek from day one.

CIR (Cox-Ingersoll-Ross) fixes this with one change: scale the noise by the square root of the current rate.

drt=a(brt)dt+σrtdWt.dr_t = a(b - r_t)\, dt + \sigma \sqrt{r_t}\, dW_t .

Rerun the identical scenario under CIR, same aa, bb, σ\sigma, r0=0.5%r_0 = 0.5\%, same shock Z=2Z = -2: the noise term is now σr0Z=0.03×0.005×(2)=0.03×0.0707×(2)=0.00424\sigma \sqrt{r_0}\, Z = 0.03 \times \sqrt{0.005} \times (-2) = 0.03 \times 0.0707 \times (-2) = -0.00424. So r1=0.005+0.00250.00424=0.00326r_1 = 0.005 + 0.0025 - 0.00424 = 0.00326, or 0.326% — still positive. As the rate approaches zero, rt\sqrt{r_t} shrinks toward zero too, so the random shove shrinks right along with it, and (given the parameters satisfy a technical condition called the Feller condition) the rate can get arbitrarily close to zero but never actually cross it. Same shock, same starting point, same pull toward the mean — the only difference is that CIR's noise term knows to quiet down near zero, and that single square root is the entire model's improvement over Vasicek.

Path explorer
13055time →
end (bold path) 100.38spread of ends 58.966 independent paths, same settings

Sample paths above. Both Vasicek and CIR look like this — wandering, but always pulled back toward a central level — the difference worked example 2 highlighted only shows up down near zero, where Vasicek's paths can cross into negative territory and CIR's cannot.

rate = 0 Vasicek — extends past zero CIR — floored at zero
Vasicek's bell curve is symmetric and doesn't know where zero is, so its left tail crosses below it. CIR's distribution is squeezed up against zero because the noise itself shrinks to nothing as the rate approaches that floor.

What this means in practice

Both models give closed-form (exact, no simulation needed) formulas for zero-coupon bond prices and are still taught as the entry point to interest rate modeling because the mean-reversion mechanic — rates don't drift forever, they get pulled back toward some economically sensible level — is genuinely how central banks behave, targeting a policy rate and correcting when the economy strays from it. In practice, trading desks mostly use richer extensions (like the Hull-White model, Vasicek with a time-varying mean that can be calibrated to match today's whole yield curve exactly) rather than the plain versions here, but every one of those extensions inherits the same mean-reverting skeleton these two models introduce.

CIR guaranteeing a non-negative rate was a genuine selling point for decades — until the mid-2010s, when several major central banks actually pushed policy rates negative. A model built specifically to rule out negative rates then became the wrong tool for exactly the environment it was being used in, a reminder that "more realistic-sounding assumption" and "correct assumption for right now" are not the same thing.

Vasicek and CIR both pull the rate toward a long-run average at a fixed speed; the only difference is whether the random noise shrinks as the rate approaches zero (CIR) or stays constant regardless (Vasicek, which can then wander negative).

Practice

  1. Using Vasicek with a=0.4a = 0.4, b=3%b = 3\%, σ=1.5%\sigma = 1.5\%, r0=5%r_0 = 5\%, and a shock of Z=0Z = 0 (no noise, pure reversion), compute r1r_1 after one year.
  2. Using CIR with the same aa, bb, σ\sigma, but r0=3%r_0 = 3\% (already at the mean) and a shock of Z=1Z = -1, compute the size of the noise term σr0Z\sigma\sqrt{r_0}\,Z — how does it compare to what plain Vasicek would have given for the same shock?

Related concepts

Practice in interviews

Further reading

  • Vasicek (1977), An Equilibrium Characterization of the Term Structure
  • Cox, Ingersoll & Ross (1985), A Theory of the Term Structure of Interest Rates
ShareTwitterLinkedIn