Modelo CR+ com a biblioteca GCPM:
############################################################################
#install.packages("GCPM")
library(GCPM)
############################################################################
#The package helps to analyze the default risk of credit portfolios. Commonly known models, like
#CreditRisk+ or the CreditMetrics model are implemented in their very basic settings. The portfolio
#loss distribution can be achieved either by simulation or analytically in case of
#the classic CreditRisk+ model. Models are only implemented to respect losses caused by defaults, i.e. migration
#risk is not included. The package structure is kept flexible especially with respect to distributional
#assumptions in order to quantify the sensitivity of risk figures with respect to several assumptions.
#Therefore the package can be used to determine the credit risk of a given portfolio as well as to
#quantify model sensitivities.#
#create a random portfolio with NC counterparties
NC=1000
#assign business lines and countries randomly
business.lines=c("A","B","C")
CP.business=business.lines[ceiling(runif(NC,0,length(business.lines)))]
countries=c("A","B","C","D","E")
CP.country=countries[ceiling(runif(NC,0,length(countries)))]
#create matrix with sector weights (CreditRisk+ setting)
#according to business lines
NS=length(business.lines)
W=matrix(0,nrow = NC,ncol = length(business.lines),
dimnames = list(1:NC,business.lines))
for(i in 1:NC){W[i,CP.business[i]]=1}
#create portfolio data frame
portfolio=data.frame(Number=1:NC,Name=paste("Name ",1:NC),Business=CP.business,
Country=CP.country,EAD=runif(NC,1e3,1e6),LGD=runif(NC),
PD=runif(NC,0,0.3),Default=rep("Poisson",NC),W)
#draw sector variances randomly
sec.var=runif(NS,0.5,1.5)
names(sec.var)=business.lines
#draw N sector realizations (independent gamma distributed sectors)
N=5e4
random.numbers=matrix(NA,ncol=NS,nrow=N,dimnames=list(1:N,business.lines))
for(i in 1:NS){
random.numbers[,i]=rgamma(N,shape = 1/sec.var[i],scale=sec.var[i])}
#create a portfolio model and analyze the portfolio
TestModel=init(model.type = "simulative",link.function = "CRP",N = N,
loss.unit = 1e3, random.numbers = random.numbers,LHR=rep(1,N),loss.thr=5e6,
max.entries=2e4)
## Generalized Credit Portfolio Model
## Copyright (C) 2015 Kevin Jakob & Dr. Matthias Fischer
##
## This program is free software; you can redistribute it and/or
## modify it under the terms of the GNU General Public License
## version 2 as published by the Free Software Foundation.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
## GNU General Public License for more details.
##
## You should have received a copy of the GNU General Public License
## along with this program; if not, write to the Free Software
## Foundation, Inc., 51 Franklin Street, Fifth Floor,
## Boston, MA 02110-1301, USA.
TestModel=analyze(TestModel,portfolio)
## Importing portfolio data....
## 3 sectors ...
## 1000 counterparties (0 removed due to EAD=0 (0), lgd=0 (0), pd<=0 (0) pd>=1 (0))
## Portfolio statistics....
## Loss unit: 1 K
## Portfolio EAD:490.94 M
## Portfolio potential loss:246.37 M
## Portfolio expected loss:36.56 M(analytical)
## Starting simulation (50000simulations )
## Warning in loss.dist.sim(this, Ncores): Number of loss scenarios exceeded memory limit. Increase loss.thr or max.entries.
## Risk contributions are not available.
## Simulation finished
## Calculating loss distribution...
## Calculating risk measures from loss distribution....
## Expected loss from loss distribution: 36.59 M (deviation from EL calculated from portfolio data: 0.08%)
## Exceedance Probability of the expected loss:0.41328
## Portfolio mean expected loss exceedance: 58.19 M
## Portfolio loss standard deviation:23.38 M
#plot of pdf of portfolio loss (in million) with indicators for EL, VaR and ES
alpha=c(0.995,0.999)
#plot(TestModel,1e6,alpha=alpha)
#calculate portfolio VaR and ES
VaR=VaR(TestModel,alpha)
ES=ES(TestModel,alpha)