aboutsummaryrefslogtreecommitdiffstats
path: root/calibrate_tranches.R
diff options
context:
space:
mode:
Diffstat (limited to 'calibrate_tranches.R')
-rw-r--r--calibrate_tranches.R32
1 files changed, 27 insertions, 5 deletions
diff --git a/calibrate_tranches.R b/calibrate_tranches.R
index 6f243a6a..07a07b2f 100644
--- a/calibrate_tranches.R
+++ b/calibrate_tranches.R
@@ -281,10 +281,9 @@ percentiles <- (seq(0, 1, length=n.scenarios+1)[-1]+
seq(0, 1, length=n.scenarios+1)[-(n.scenarios+1)])/2
l <- matrix(0, ncol(defaultprob), n.scenarios)
r <- matrix(0, ncol(defaultprob), n.scenarios)
-Ngrid <- 501
-MFdist <- MFlossdistrib(cl, cs, w.mod, rho, defaultprob, p, issuerweights, 501)
-MFdist.orig <- MFlossdistrib(cl, cs, w, rho, defaultprob, defaultprob, issuerweights, 501)
+MFdist <- MFlossdistrib(cl, cs, w.mod, rho, defaultprob, p, issuerweights, Ngrid)
+MFdist.orig <- MFlossdistrib(cl, cs, w, rho, defaultprob, defaultprob, issuerweights, Ngrid)
lossdist.orig <- BClossdistC(SurvProb, issuerweights, recov, rho, 101, 500)
for(i in 1:17){
Lfun <- splinefun(c(0, cumsum(MFdist$L[,i])),c(0, seq(0, 1, length=Ngrid)), "monoH.FC")
@@ -297,6 +296,29 @@ for(i in 1:17){
## joint generation of scenarios for loss and recovery distribution
clusterExport(cl, list("lossrecovdist.joint.term", "lossdistribC.joint"))
-MFdist2 <- MFlossdistrib2(cl, cs, w.mod, rho, defaultprob, p, issuerweights, 501)
+MFdist2 <- MFlossdistrib2(cl, cs, w.mod, rho, defaultprob, p, issuerweights, Ngrid)
+## memory never gets released by the clusters for some reasons, needs to call gc twice
+clusterCall(cl, gc)
+clusterCall(cl, gc)
+gc()
+#L+R<=1
+test <- apply(MFdist2[21,,], 2, rev)
+test.tri <- lower.tri(test)
+sum(test[test.tri]) #close to 1
-supportD <- outer(seq(0,1,0.01), seq(0,1, 0.01), "+")
+## D=L+R
+dist <- MFdist2[21,,]
+supportD <- outer(seq(0,1, length=Ngrid), seq(0,1, length=Ngrid), "+")
+## compute the joint density of (L/D, D)
+## u=x/(x+y)
+## v=x+y
+x <- seq(0,1, length=Ngrid) %o% seq(0,1, length=Ngrid)
+y <- sweep(-x, 2, seq(0, 1, length=Ngrid), "+")
+xgrid <- round(x/0.005)
+ygrid <- round(y/0.005)
+distchv <- matrix(0, Ngrid, Ngrid)
+for(i in 1:Ngrid){
+ for(j in 1:Ngrid){
+ distchv[i,j] <- dist[xgrid[i,j]+1, ygrid[i,j]+1]*seq(0,1, length=Ngrid)[j]
+ }
+}