CIR Model for Interest Rates
The Cox–Ingersoll–Ross (CIR) model is a one-factor short-rate model whose square-root diffusion keeps rates non-negative while allowing mean reversion and level-dependent volatility. It is analytically tractable, but its positivity and affine bond prices come with a restrictive one-factor view of curve and volatility dynamics.
Risk-neutral dynamics
Under the risk-neutral measure \(Q\), write
dr_t = kappa * (theta - r_t) dt + sigma * sqrt(r_t) dW_t
kappa is mean-reversion speed, theta is the long-run short rate, and sigma controls rate volatility. Unlike a Gaussian model, instantaneous variance is sigma^2 r_t: low rates imply low absolute volatility. This property was attractive when rates were persistently positive, but is a poor empirical description in negative-rate regimes.
The Feller condition,
2 * kappa * theta >= sigma^2
is sufficient for the process never to hit zero. It is not an arbitrary calibration constraint: violating it permits zero to be reached, though the standard CIR process remains non-negative and can reflect away from zero. Desk policy should state whether the condition is enforced, since it can materially worsen a volatility fit.
| Parameter | Economic interpretation | Calibration symptom |
|---|---|---|
kappa | speed of pull to long-run level | low values overstate persistent shocks |
theta | long-run short-rate level | anchors long-maturity yield level |
sigma | level-scaled diffusion | determines curvature of rate-option vol |
r0 | current short rate | shifts the initial curve fit |
Affine zero-coupon bond pricing
The model price of a zero-coupon bond is exponential-affine:
P(t, T) = A(t, T) * exp(-B(t, T) * r_t)
gamma = sqrt(kappa^2 + 2 * sigma^2)
B(t,T) = 2*(exp(gamma*tau)-1) /
((gamma+kappa)*(exp(gamma*tau)-1) + 2*gamma)
where tau = T - t. The A term is a known function of kappa, theta, sigma, and B. The affine form matters operationally: a full curve can be priced quickly, and rates derivatives can be valued by transforms or trees without simulating every cash-flow discount factor.
Plain CIR with one r0 generally cannot match today’s bootstrapped curve exactly. A common extension is CIR++:
r_t = x_t + phi(t)
P_market(0,T) = P_CIR(0,T) * exp(-integral_0^T phi(u) du)
The deterministic shift phi(t) forces an initial-curve match while retaining stochastic dynamics for x_t. It fixes day-zero fit, not the model’s low-dimensional future curve moves. Build the market curve first as in yield-curve construction; do not try to infer it from a short-rate model.
Exact simulation and implementation
Euler simulation can generate negative rates unless clipped, and clipping changes moments. CIR instead has an exact noncentral chi-square transition. For time step dt,
c = sigma^2 * (1 - exp(-kappa*dt)) / (4*kappa)
d = 4*kappa*theta / sigma^2
lambda = 4*kappa*exp(-kappa*dt)*r_t / (sigma^2*(1-exp(-kappa*dt)))
r_next = c * noncentral_chisquare(d, lambda)
import numpy as np
def cir_step(r, kappa, theta, sigma, dt, rng):
e = np.exp(-kappa * dt)
c = sigma**2 * (1 - e) / (4 * kappa)
df = 4 * kappa * theta / sigma**2
nc = 4 * kappa * e * r / (sigma**2 * (1 - e))
return c * rng.noncentral_chisquare(df, nc)
def feller_margin(kappa, theta, sigma):
return 2 * kappa * theta - sigma**2
For very small kappa, use numerically stable expm1 expressions. Monte Carlo estimators should discount along the simulated path, use antithetics or control variates, and be benchmarked against the closed-form bond price. A simulation that misses the bond price is not reliable for an exotic.
Calibration and risk
Estimate historical parameters from short-rate data only if the objective is forecasting under the physical measure. Derivative valuation requires risk-neutral parameters calibrated to prices. Mixing the two silently assumes a zero market price of rate risk. Calibrate curve instruments through the shift and options through caplet, swaption, or bond-option volatility; quote conventions must match the valuation model.
One factor makes all instantaneous forward-rate shocks perfectly correlated after loading. That is inadequate for many curve twists. Compare CIR's behavior to Vasicek and Hull–White models: Hull–White’s time-dependent drift fits the curve, but its Gaussian distribution admits negative rates. Neither model makes a smile surface consistent by itself; displaced diffusion, SABR, or stochastic-volatility overlays are commonly needed.
Risk should be measured by recalibrating after market-quote bumps. Bumping only r0 leaves curve-fit shifts and option parameters unchanged, which is not a tradable market shock. Report curve DV01, vega by expiry/tenor, and parameter risk separately. The hedging instruments are swaps, futures, and liquid options—not kappa or sigma.
Key takeaways
- CIR combines mean reversion, non-negativity, and affine bond pricing.
- The Feller condition governs boundary behavior and can constrain calibration.
- CIR++ exactly fits today’s curve but remains a one-factor future-dynamics model.
- Use exact noncentral-chi-square transitions rather than clipped Euler paths.
- Separate physical estimation from risk-neutral calibration and calculate risk through market-consistent recalibration.
