merton.calibration.vassalou_xing

Vassalou-Xing (2004) iterative MLE calibration.

When supplied a single snapshot of equity value + equity volatility, this calibrator coincides with jmr_iterative().

When supplied an equity time series, it runs the canonical Vassalou-Xing loop:

  1. Initialise σ_A^(0) = σ_E · E / (E + D) (naive proxy).

  2. Given σ_A^(k), invert the BSM call equation at each t to obtain A_t from the observed E_t.

  3. Compute log-returns r_{A,t} = ln(A_t / A_{t-1}) and update σ_A^(k+1) = std(r_A) · √252.

  4. Repeat until |σ_A^(k+1) - σ_A^(k)| < tol or k == max_iter.

References

Vassalou & Xing (2004). Default Risk in Equity Returns. Journal of Finance 59 (2), 831-868.

Classes

Functions

vassalou_xing(→ merton.calibration.base.CalibrationResult)

Vassalou-Xing iterative MLE calibration.

Module Contents

merton.calibration.vassalou_xing.vassalou_xing(*, equity: float | merton._typing.FloatArray, debt: float, rf: float, T: float, equity_vol: float | None = None, dividend_yield: float = 0.0, tol: float = 1e-06, max_iter: int = 200, annualization: float = ANNUALIZATION) merton.calibration.base.CalibrationResult[source]

Vassalou-Xing iterative MLE calibration.

Either pass:

  • equity as a scalar with equity_vol — this collapses to the JMR two-equation solve.

  • equity as a 1-D array (equity series) — full iterative VX. In this case equity_vol is optional; if omitted we estimate it from the sample stdev of equity log-returns.

Returns:

For the array case, asset_value is a full array of inferred A_t and asset_vol is the converged scalar σ_A.

Return type:

CalibrationResult

class merton.calibration.vassalou_xing.VassalouXingCalibrator(*, tol: float = 1e-06, max_iter: int = 200)[source]

Bases: merton.calibration.base.Calibrator

OO wrapper around vassalou_xing().

method = 'vassalou_xing'[source]
tol = 1e-06[source]
max_iter = 200[source]
fit(firm: merton.core.firm.Firm) merton.calibration.base.CalibrationResult[source]

Infer asset value & volatility for firm.