可以使用对 Vasicek VaR 模型的修改,以经济资本的形式反映集中信用风险。Vasicek 模型是 Basel II 框架下信用风险的关键模型,它假设信用风险敞口是统一的。然而,可以通过应用蒙特卡罗方法来修改它,该方法根据预期违约率 k/n 对投资组合中的 k 个风险敞口进行随机抽样。通过重复此过程,可以获得具有浓度的损耗分布。下面的代码完成了这项工作。
-------------------------------------------------- -----------------------------------------
Monte Carlo 中使用的迭代次数
N_iter <- 10000 #1000000
曝光次数
N <- 150
违约概率
PD_Portfolio <- 0.05 LGD_Portfolio <- 0.6
在默认情况下创建一个虚拟曝光序列
set.seed(123) u <- seq(1,N,1) u1 <- pnorm(rnorm(u))
EAD<- 10^3/分钟(u1)*u1
相关因子(应根据暴露类别而变化)
R <- 0.03*(1-exp(-35*PD))/(1-exp(-35))+0.16*(1-(1-exp(-35*PD))/(1-exp(- 35)))
max_loss_R <- function(PD,s) {
返回(pnorm(R^(-0.5)*(sqrt(1-R)*qnorm(s)-qnorm(PD))))
}
列出可能的损失值
S_range <- seq(0,1,1/N) N2 <- N+1 loss_tabulation <- cbind(0:N,S_range,max_loss_R(PD_Portfolio,S_range)) loss_tabulation_df <- as.data.frame(loss_tabulation) colnames( loss_tabulation_df)<- c("#Defaults(D)","%Defaults(D/N)","#Defaults<=D")
均匀分布的随机样本
vec_N_Defaults <- rep(0,N_iter) 损失 <- rep(0,N_iter)
for(i in 1:N_iter){
y <- runif(1) vec_N_Defaults[i] <- LGD_Portfolio which(abs(loss_tabulation_df[,3]-y)==min(abs(loss_tabulation_df[,3]-y))) Loss[i] <- LGD_Portfolio sum (EAD[样本(1:N,vec_N_Defaults[i],replace=F)])
}
vec_N_Defaults2 <- 排序(vec_N_Defaults,递减=真)
损失2 <-排序(损失,递减=真)
估计没有集中的投资组合的经济资本因子 K
K_granular <- quantile(vec_N_Defaults2,0.999)/N
估计具有集中度的投资组合的经济资本因子 K
K_concentration <- quantile(Loss2,0.999)/sum(EAD)