1
$\begingroup$

I am trying to solve the equation for PD but struggling to bring it to the LHS. Any ideas as to how I can do that?

$$ LGD = \frac{\Phi \left [ \Phi^{-1}(DR) - \frac{\Phi^{-1}(PD)-\Phi^{-1}(PD\cdot LGD)}{\sqrt{1-\rho}} \right ]}{DR}$$

where
$ \Phi(.) = \text{cumulative normal pdf}$
$ LGD = \text{Loss given default} $
$ PD = \text{Probability of default} $
$ \rho = \text{correlation}?$
$ DR = \text{asymptotic default rate}? $

$\endgroup$
2
  • 1
    $\begingroup$ Hi and welcome to the forum! Is there a connection between your question and the risk weight formula in the capital adequacy regulation (CRR)? It reminds of this formula (which is based in the one-factor asymptotic risk model). $\endgroup$
    – Richi Wa
    Feb 20, 2020 at 10:17
  • $\begingroup$ Looks also similar to Eqn 2.3 in Frye and Jacobs, Credit loss and systematic loss given default, Journal of Credit Risk, 2012 $\endgroup$
    – nbbo2
    Feb 20, 2020 at 16:34

1 Answer 1

1
$\begingroup$

Failing an analytic answer I would use Newton's method as a quick and dirty numerical iterator:

You can rearrange to:

$$ (1-\rho) \left (\Phi^{-1}(LGD.DR) - \Phi^{-1}(DR) \right ) + \Phi^{-1}(PD) - \Phi^{-1}(PD.LGD) = 0$$

which given you have fixed DR, LGD and $\rho$ is essentially:

$$K + \Phi^{-1}(PD) - \Phi^{-1}(PD.LGD) = f(PD) = 0$$

Newton's iterative formula yeilds the iterative scheme:

$$ PD_{n+1} = PD_n + \frac{f(PD_n)}{f'(PD_n)} $$

or $$PD_{n+1} = PD_n + \frac{K + \Phi^{-1}(PD_n) - \Phi^{-1}(PD_n.LGD)}{\frac{\partial}{\partial PD} \left( \Phi^{-1}(PD_n) - \Phi^{-1}(PD_n.LGD) \right )} $$

And actually there are numerous algorithms you might use - its not a computationally intensive task: in python you can try:

https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.root_scalar.html#scipy.optimize.root_scalar

from scipy import optimize
def f(x, *args):
    val = # define your function in terms of x = PD, and other static args
    return val

sol = optimize.root_scalar(f, args={}, bracket=[0, 3], method='brentq')
sol = optimize.root_scalar(f, args={}, x0=0.2, fprime=fprime, method='newton')
$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.