使用成对相关的投资组合损失估计

时间:2017-04-27 18:40:28

标签: r optimization vectorization

我试图使用成对相关矩阵来估计投资组合损失。当前代码使用两个'for'循环来运行,并且需要相当长的时间。有没有办法优化代码以减少运行时间? 这里的公司是债务人或交易对手的数量(在这种情况下为1000)

编辑:尝试在这里解释一下逻辑 因此,存在包含借方详细信息的数据框df(Client_ID,扇区,曝光,默认的Probablity(PD))。例如

客户端ID为1,2,3,4,5 uptil 1000 扇区ID可以是1到21之间的任何值 曝光量为0至99999999

所以我需要识别所有client_ID对,乘以它们的曝光,这里它变得复杂,我还需要将它们的相关值相乘。该相关值存储在单独的21×21矩阵中,并且基于两个客户端所属的扇区来选择。最有效的方法是什么?下面的代码确实很好,但需要一段时间,我觉得必须有一个更简单的方法来做到这一点?合并? Expand.grid?

RC_UL=function(N_EAD, N_PD, N_LGD, N_LGD_VAR,N_CO_FAC_LOAD,V_SECTOR_ID,N_DFLT_PT)
{for (i in 1:corp){
for(j in 1:corp ){

if (i==j) { 
#borrower correlation with himself is always 1
sigma.ijk <- cbind( c(1, 1),c(1, 1)) 

} else
{ sigma.ijk <- cbind( c(1, N_CO_FAC_LOAD[i]*N_CO_FAC_LOAD[j] *rho[V_SECTOR_ID[i], V_SECTOR_ID[j]]),c(N_CO_FAC_LOAD[i]*N_CO_FAC_LOAD[j] * rho[V_SECTOR_ID[i], V_SECTOR_ID[j]], 1))
}
#rho is the correlation matrix across sectors (not shown in the code snippet #i have provided, but it is a 21*21 matrix corresponding to the 21 sectors #that the counterparties belong to
#N_CO_FAC_LOAD is an input that is specific to a sector      
#UL for each borrower  
UL[i]<-UL[i]+N_LGD[i] * N_LGD[j] *
N_EAD[i] * N_EAD[j] *
( pmvnorm(upper=c(N_DFLT_PT[i], N_DFLT_PT[j]), mean=c(0,0),sigma=sigma.ijk) - N_PD[i] * N_PD[j] )
}}
for (i in 1:corp){N_RC_UL[i]<-(UL[i]/sqrt(sum(UL)))}
return(N_RC_UL)
}

b<-RC_UL(EAD, PD, LGD, N_LGD_VAR,fac_weight_s,sector,def_pt1)

0 个答案:

没有答案