Skip to contents

The asymptotic single risk factor function, vectorized over exposures: PD floors by asset class, LGD input floors for own estimates (approach = "airb"; the unsecured column of params$lgd_floor unless collateral names another column, blended with secured_share), the asset correlation of the class (with the firm-size adjustment of corporate_sme from sales and the multiplier for large or unregulated financial institutions when fi is TRUE), the maturity adjustment for wholesale classes only (m clipped to params$m_range, params$m_default when missing or under the foundation approach) and

Usage

scr_irb_rw(
  pd,
  lgd,
  ead = 1,
  m = NULL,
  asset_class,
  sales = NULL,
  fi = FALSE,
  defaulted = NULL,
  elbe = NULL,
  params = scr_irb_params("bcb"),
  approach = c("airb", "firb"),
  apply_floors = TRUE,
  collateral = NULL,
  secured_share = NULL,
  claim = NULL
)

Arguments

pd, lgd, ead

Numeric vectors: probability of default, loss given default (decimals) and exposure at default (currency).

m

Effective maturity in years, non-negative (wholesale classes only, ignored and reported as NA on retail rows; NULL or NA uses params$m_default).

asset_class

One of "corporate", "corporate_sme", "bank", "sovereign", "hvcre", "retail_mortgage", "qrre_revolver", "qrre_transactor", "retail_other"; a scalar or a vector.

sales

Annual sales of corporate_sme obligors, in the unit of params$correlation$sme, clipped to its bounds. A missing value takes the upper bound, i.e. no firm-size adjustment: the adjustment requires reported sales (Basel Framework CRE31.9; CRR Article 153(4)).

fi

Logical: regulated financial institution above the size threshold, or unregulated one (correlation multiplier).

defaulted

Optional 0/1 or logical vector.

elbe

Optional vector with the best estimate of expected loss of the defaulted rows (decimal of ead); ignored on performing rows.

params

An scr_irb_params() object.

approach

"airb" (own LGD, floored) or "firb" (supervisory LGD supplied by the caller, no LGD floor, maturity fixed).

apply_floors

TRUE (all input floors), FALSE (none) or a subset of c("pd", "lgd", "m").

collateral

Optional column of params$lgd_floor naming the collateral type of each exposure ("financial", "receivables", "real_estate", "other_physical"); NULL means unsecured.

secured_share

Optional secured share in [0, 1] blending the unsecured and the collateral floors.

claim

Under "firb", an optional claim type per exposure naming a row of params$lgd_firb (for example "senior_unsecured" or "subordinated"); the supervisory LGD of that row replaces lgd. NULL keeps the caller's lgd. The row names differ by preset ("senior_unsecured" under "bcb", "senior_unsecured_corporate" and "senior_unsecured_fi" otherwise); see params$lgd_firb.

Value

A data.table with one row per exposure: pd_used, lgd_used (after floors; PD one on defaulted rows), m (after clipping; params$m_default under "firb"; NA on retail rows), r, b, ma, k, rw, rwa; attribute floors_hit counts the rows where each floor was binding.

Details

$$K = \left[LGD \cdot N\left(\frac{G(PD) + \sqrt{R}\,G(0.999)}{\sqrt{1-R}}\right) - PD \cdot LGD\right] \cdot MA \cdot s$$

with s = params$scaling_factor and, for wholesale classes, \(MA = (1 + (M - 2.5)\,b) / (1 - 1.5\,b)\), \(b = (0.11852 - 0.05478 \ln PD)^2\) (MA = 1 for retail). Below PD = 1e-5, reachable only without a PD floor (sovereigns), b is held at its value at 1e-5: the regulatory b makes 1 - 1.5 b vanish near PD = 2.9e-6, where the adjustment would explode and change sign. Defaulted rows carry K = max(0, LGD - ELBE) under "airb" and zero under "firb"; a missing elbe is taken equal to lgd. RW = 12.5 K and RWA = RW * ead.

References

Basel Committee on Banking Supervision (2023). The Basel Framework, CRE31 (IRB approach: risk-weight functions) and CRE32 (risk components). BCBS (2005). An explanatory note on the Basel II IRB risk weight functions.

See also

Examples

scr_irb_rw(0.01, 0.45, m = 2.5, asset_class = "corporate")
#>    pd_used lgd_used     m         r         b      ma          k       rw
#>      <num>    <num> <num>     <num>     <num>   <num>      <num>    <num>
#> 1:    0.01     0.45   2.5 0.1927837 0.1374861 1.25981 0.07385344 0.923168
#>         rwa
#>       <num>
#> 1: 0.923168
scr_irb_rw(c(0.01, 0.02), c(0.20, 0.80), asset_class = c("retail_mortgage", "qrre_revolver"))
#>    pd_used lgd_used     m     r     b    ma          k        rw       rwa
#>      <num>    <num> <num> <num> <num> <num>      <num>     <num>     <num>
#> 1:    0.01      0.2    NA  0.15    NA     1 0.02005295 0.2506619 0.2506619
#> 2:    0.02      0.8    NA  0.04    NA     1 0.04113480 0.5141850 0.5141850
r <- scr_irb_rw(1e-4, 0.5, asset_class = "retail_other")
attr(r, "floors_hit")
#>        floor     n
#>       <char> <int>
#> 1:  pd_floor     1
#> 2: lgd_floor     0
#> 3:   m_floor     0
#> 4:     m_cap     0
# foundation approach: the supervisory LGD of the claim type
scr_irb_rw(0.01, lgd = 0, m = 2.5, asset_class = "corporate", approach = "firb",
           claim = "senior_unsecured")
#>    pd_used lgd_used     m         r         b      ma         k       rw
#>      <num>    <num> <num>     <num>     <num>   <num>     <num>    <num>
#> 1:    0.01     0.75   2.5 0.1927837 0.1374861 1.25981 0.1230891 1.538613
#>         rwa
#>       <num>
#> 1: 1.538613