An AssetCorr Guide

Overview

AssetCorr is a package for the estimation of intra and inter asset correlations within the Vasicek Portfolio Model. The implemented methods are:

Bias of the estimation methodologies

It is commonly known that these methods are exposed to an estimation bias, especially if the default time series is short, see for example Meyer (2009) or Duellmann et al.(2010). Furthermore, Loeffler (2003) has shown that wrongly estimated correlations have a huge impact on the resulting risk figures. To tackle this issue Pfeuffer et al. (2018) outlined the use of single and double bootstrap correction and additionally jackknife correction approaches to reduce the bias. The suggested correction methods and methods to infer confidence intervals are provided by the package AssetCorr.

To illustrate the bias of intra correlation methods, consider the following example:

Suppose we have a default time series with the following properties:

The following plot displays on the x-axis the true assumed value of the intra asset correlation and on the y-axis the estimated intra asset correlation as the mean of 1000 simulations:

Bias of the estimation methodologies

As we can see, the bias of method of moments methodologies can be tremendous, especially as the level of intra correlation increases. Furthermore, the MLE approach shows the best performance.

Due to this large bias, Pfeuffer et al. (2020) suggested to use bootstrap and jackknife correction to reduce the bias. The following plot illustrates the combination of MLE and single bootstrap correction:

Bias of the estimation methodologies

As one can see, the bootstrap correction moves the original line towards the true value (red line), which implies that the estimation efficiency was improved. This is especially true for the range from 0 to 0.6, which covers the empirical estimated range.

In the following, the functionality of AssetCorr will be briefly illustrated using a hypothetical default data time series. Load the package and generate a hypothetical default time series with the implemented function:

Intra correlation

library(AssetCorr)
set.seed(111)

#number of obligors: 1000
#intra asset correlation: 0.3
#length of the default time series: 20
#probability of default: 0.01

D1=defaultTimeseries(1000,0.3,20,0.01)
N1=rep(1000,20)

All methods for estimating the intra correlation have a very similar structure. Hence only one method will be used in the following. At the end of this section, another function will be illustrated which can be used to get an in depth analysis of the underlying default time series. First, the point estimate for the intra correlation will be estimated:

intraAMM(D1,N1)
## $Original
## [1] 0.2550277

As one can see, the Asymptotic Method of Moments underestimates the true value of 30% for the intra asset correlation. Hence Pfeuffer et al. (2020) suggested to use resampling methods to reduce this downward bias. Therefore, the single bootstrap correction will be illustrated in the following. This correction comes with the additional advantage that one can infer confidence intervals. Additionally, a plot of the bootstrap density can be generated:

Output<-intraAMM(D1,N1, B=1000, CI_Boot = 0.95, plot=TRUE)
## Warning in norm.inter(t, adj.alpha): extreme order statistics used as endpoints

plot of chunk unnamed-chunk-3

Output$Original
## [1] 0.2550277
Output$Bootstrap
## [1] 0.2878343
Output$CI_Boot
## [1] 0.1501769 0.3791114

Furthermore, the double bootstrap correction achieves a higher order of bias reduction, but comes with a substantial increase in computational time. Hence the number of repetitions in the inner and outer loop is reduced to 100, which implies that the single bootstrap corrected estimate is now calculated with 100 repetitions (instead of 1000 as in the previous setting):

Output<-intraAMM(D1,N1, DB=c(100,100))

Output$Original
## [1] 0.2550277
Output$Bootstrap
## [1] 0.2839094
Output$Double_Bootstrap
## [1] 0.2896794

As one can see, the double bootstrap correction produces the closest estimate, compared to the true value of 0.3.

Additionally, a jackknife correction is implemented:

intraAMM(D1,N1, JC=TRUE)
## $Original
## [1] 0.2550277
## 
## $Jackknife
## [1] 0.2981715

As an additional feature, the package AssetCorr provides the possibility to evaluate and visualize a default time series using a list of estimators simultaneously to obtain first insights. The default is set to use all intra correlation estimators:

Output<-intraALL(D1,N1, B=500, plot=TRUE,Adjust = 0.0001, Estimator = c("AMM","FMM","CMM","JDP1","JDP2","AMLE") )

plot of chunk unnamed-chunk-6

Output
##    Estimator  Estimate Type correction   B DB CI_Boot CI
## 1        AMM 0.2550277 PEST       none  NA NA      NA   
## 2        FMM 0.2513167 PEST       none  NA NA      NA   
## 3        CMM 0.2816997 PEST       none  NA NA      NA   
## 4       JDP1 0.2427684 PEST       none  NA NA      NA   
## 5       JDP2 0.2465936 PEST       none  NA NA      NA   
## 6       AMLE 0.2610108 PEST       none  NA NA      NA   
## 7        AMM 0.2824123 CEST  Bootstrap 500 NA      NA   
## 8        FMM 0.2843232 CEST  Bootstrap 500 NA      NA   
## 9        CMM 0.3248225 CEST  Bootstrap 500 NA      NA   
## 10      JDP1 0.2757849 CEST  Bootstrap 500 NA      NA   
## 11      JDP2 0.2770714 CEST  Bootstrap 500 NA      NA   
## 12      AMLE 0.2751015 CEST  Bootstrap 500 NA      NA

Inter correlation

Also the inter correlation estimates have a substantial impact on the portfolio's risk, various methods are implemented. First, two correlated default time series are generated.

library(mvtnorm)
set.seed(2)
#number of obligors: 1000
#intra asset correlation 1: 0.3
#intra asset correlation 2: 0.1
#inter correlation of the systematic factors: 0.5
#length of the default time series: 20
#probability of default: 0.01

Psi=rmvnorm(20,sigma=matrix(c(1,0.5,0.5,1),2))
PDcond1=pnorm((qnorm(0.01)-sqrt(0.3)*Psi[,1])/sqrt(1-0.3))
PDcond2=pnorm((qnorm(0.01)-sqrt(0.1)*Psi[,2])/sqrt(1-0.1))

D1=rbinom(20,1000,PDcond1)
D2=rbinom(20,1000,PDcond2)
N1=N2=rep(1000,20)

All methods for estimating the intra correlation have a very similar structure. Hence only one method will be used in the following. First, the point estimate for the inter correlation will be calculated. For this purpose, the intra correlation estimates of the default time series serve as input:

rho1=intraAMM(D1,N1)$Original
rho2=intraAMM(D2,N2)$Original

interCov(D1,N1,D2,N2,rho1,rho2)
## $Original
## [1] 0.4289773

Also for inter correlation methods the resampling corrections are implemented:

#Single bootstrap Correction
rho1=intraAMM(D1,N1)$Original
rho2=intraAMM(D2,N2)$Original

Output<- interCov(D1,N1,D2,N2,rho1,rho2, B=1000, CI_Boot = 0.95, plot=TRUE)

plot of chunk unnamed-chunk-9

Output$Original
## [1] 0.4289773
Output$Bootstrap
## [1] 0.4657203
Output$CI_Boot
## [1] 0.01881139 0.74370888
#Double bootstrap correction

Output<- interCov(D1,N1,D2,N2,rho1,rho2, DB=c(100,100))

Output$Original
## [1] 0.4289773
Output$Bootstrap
## [1] 0.452747
Output$Double_Bootstrap
## [1] 0.4383344
#Furthermore, a Jackknife correction would be possible

Similar to the estimation of the intra correlations, the AssetCorr package also provides a function to combine several estimation techniques simultaneously. This function gives the user an in depth review of the dependencies of two default time series.

#A general overview

Output<-interALL(D1,N1,D2,N2,rho1,rho2 ,B=100, plot=TRUE)

plot of chunk unnamed-chunk-10

Output
##   Estimator  Estimate Type correction   B DB CI_Boot CI
## 1    Copula 0.5236092 PEST       none  NA NA      NA   
## 2       Cov 0.4289773 PEST       none  NA NA      NA   
## 3       JDP 0.4113636 PEST       none  NA NA      NA   
## 4       MLE 0.4736568 PEST       none  NA NA      NA   
## 5    Copula 0.5825729 CEST  Bootstrap 100 NA      NA   
## 6       Cov 0.4647675 CEST  Bootstrap 100 NA      NA   
## 7       JDP 0.4254936 CEST  Bootstrap 100 NA      NA   
## 8       MLE 0.5059120 CEST  Bootstrap 100 NA      NA

Evaluating a credit portfolio

In practical applications, there are several default time series corresponding to several different sectors. To give the user a first indication of the sectors and their dependencies to other sectors, we provide a detailed analyze function. It estimates the intra and inter correlations for a portfolio using all or selected estimation methods. Suppose, we have three sectors within the portfolio of interest. All sectors have the same intra correlation of 30% and are correlated with an inter correlation of 50%. Similar to the previous review functions, the default is set to use all available estimators:

#A general overview

library(mvtnorm)
set.seed(111)
NoO=1000 #Number of obligors in each sector
Years=20
AC=0.3
PD=0.01

#Calculate the conditional PDs:
Psi=rmvnorm(Years,sigma=matrix(c(1,0.5,0.5,0.5,1,0.5,0.5,0.5,1),3))
PDcond1=pnorm((qnorm(PD)-sqrt(AC)*Psi[,1])/sqrt(1-AC))
PDcond2=pnorm((qnorm(PD)-sqrt(AC/2)*Psi[,2])/sqrt(1-AC/2))
PDcond3=pnorm((qnorm(PD)-sqrt(AC*2)*Psi[,3])/sqrt(1-AC*2))


#Draw the default time series, depending on the conditional PDs
DTS=cbind(rbinom(Years,NoO,PDcond1),rbinom(Years,NoO,PDcond2),rbinom(Years,NoO,PDcond3))
N=matrix(NoO,nrow = Years,ncol = 3)

Output<-analyze_AssetCorr(DTS,N, B=100, Intra = c("AMM","FMM","CMM","JDP1"), Inter=c("Copula","Cov","JDP"))

plot of chunk unnamed-chunk-11

#Furthermore, the analyze_AssetCorr function also proves single/double bootstrap 
#and Jackknife corrections. Additionally, the confidence intervals
#can be estimated and visualized.

References

De Servigny, A. and O. Renault: Default correlation: empirical evidence. Working Paper, Standard and Poor's: 90-94, 2003. Available at: https://www.semanticscholar.org/paper/Default-correlation\%3A-empirical-evidence-Servigny-Renault/aae251436d0e3b489951c0d38463d71106755675. Accessed: 05.05.2020

Duellmann, K. and M. Gehde-Trapp: Systematic risk in recovery rates: an empirical analysis of US corporate credit exposures. Bundesbank Series 2, Discussion Paper (2): 2004. Available at: http://hdl.handle.net/10419/19729. Accessed: 04.06.2018

Duellmann, K., J. Kuell and M. Kunisch: Estimating asset correlations from stock prices or default rates- Which method is superior? Journal of Economic Dynamics and Control 34(11): 2341-2357, 2010

Efron, B. and R. J. Tibshirani: An introduction to the bootstrap. CRC press, 1994

Frei, C. and M. Wunsch: Moment Estimators for Autocorrelated Time Series and their Application to Default Correlations. Journal of Credit Risk 14: 1-29, 2018

Gordy, M. B.: A comparative anatomy of credit risk models. Journal of Banking & Finance 24(1): 119-149, 2000

Gordy, M. B. and E. Heitfield: Small-sample estimation of models of portfolio credit risk. In Recent Advances in Financial Engineering: Proceedings of the KIER-TMU International Workshop on Financial Engineering, 2009: Otemachi, Sankei Plaza, Tokyo, 3-4 August 2009: 43-63, World Scientific, 2010

Hoese, S. and S. Huschens: Confidence intervals for asset correlations in the asymptotic single risk factor model. In Operations Research Proceedings 2010: 111-116, 2010

Kalkbrener, M. and A. Onwunta: Validating structural credit portfolio models. Model risk-identification, measurement and management. Risk Books, London: 233-261, 2010

Loeffler, G. The effects of estimation error on measures of portfolio credit risk. Journal of Banking & Finance 27(8): 1427-1453, 2003

Lucas, D. J.: Default correlation and credit analysis. The Journal of Fixed Income 4(4): 76-87, 1995

Meyer, C.: Estimation of intra-sector asset correlations. The Journal of Risk Model Validation 3(3): 47-79, 2009

Pfeuffer M., M. Nagl , M. Fischer, and D. Roesch: Parameter Estimation, Bias Correction and Uncertainty Quantification in the Vasicek Credit Portfolio Model. Journal of Risk (22)1, 2020

Vasicek, O. A: The distribution of loan portfolio value. Risk 15(12): 160-162, 2002