Absorption Ratio#

Introduction#

A measure of systemic risk defined as the fraction of the total variance of a set of asset returns explained or absorbed by a fixed number of eigenvectors.

Proposed by Kritzman, Li, Page, and Rigobon (2010), the absorption ratio (AR) captures the extent to which markets are unified or tightly coupled. When markets are tightly coupled, they become more fragile in the sense that negative shocks propagate more quickly and broadly than when markets are loosely linked. The authors apply their AR analysis to several broad markets, introduce a standardized measure of shifts in the AR, and analyze how these shifts relate to changes in asset prices and financial turbulence.

A high value for the absorption ratio corresponds to a high level of systemic risk because it implies the sources of risk are more unified. A low absorption ratio indicates less systemic risk because it implies the sources of risk are more disparate. High systemic risk does not necessarily lead to asset depreciation or financial turbulence. It is simply an indication of market fragility in the sense that a shock is more likely to propagate quickly and broadly when sources of risk are tightly coupled.

References#

API#

class frds.measures.AbsorptionRatio(asset_returns: ndarray)[source]#

Absorption Ratio

__init__(asset_returns: ndarray) None[source]#
Parameters:

asset_returns (np.ndarray) – (n_assets, n_days) arrays of asset returns.

estimate(fraction_eigenvectors: float = 0.2) float[source]#

Estimate

Parameters:

fraction_eigenvectors (float, optional) – The fraction of eigenvectors used to calculate the absorption ratio. Defaults to 0.2 as in the paper.

Returns:

Absorption ratio for the market

Return type:

float

property asset_covariance: ndarray#

Asset returns covariance (cached)

Returns:

covariance of asset returns

Return type:

np.ndarray

property eigvals: ndarray#

Eigenvalues of asset_covariance() (cached)

Returns:

eigenvalues

Return type:

np.ndarray

Examples#

>>> import numpy as np
>>> from frds.measures import AbsorptionRatio
>>> # 3 assets daily returns for 6 days
>>> data = np.array(
...             [
...                 [0.015, 0.031, 0.007, 0.034, 0.014, 0.011],
...                 [0.012, 0.063, 0.027, 0.023, 0.073, 0.055],
...                 [0.072, 0.043, 0.097, 0.078, 0.036, 0.083],
...             ]
...         )
>>> # Calculate the absorption ratio.
>>> ar = AbsorptionRatio(data)
>>> ar.estimate()
0.7746543307660252