diff options
Diffstat (limited to 'R/cds_functions_generic.R')
| -rw-r--r-- | R/cds_functions_generic.R | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/R/cds_functions_generic.R b/R/cds_functions_generic.R index 706072ee..64176812 100644 --- a/R/cds_functions_generic.R +++ b/R/cds_functions_generic.R @@ -768,14 +768,13 @@ FEP <- function(index, exerciseDate) { return( fep )
}
-SP <- function(sc, startdate=Sys.Date()){
+SP <- function(sc, dates, dT){
## computes the survival probability associated with the survival curve
- T <- c(0, yearFrac(startdate, sc@dates))
- dT <- diff(T)
- return( cumprod(exp(-sc@hazardrates * dT)) )
+ h <- approx(sc@dates, sc@hazardrates, dates, "constant", rule=2)$y
+ return( cumprod(exp(-h * dT)) )
}
-SPmatrix <- function(portfolio, n.dates){
+SPmatrix <- function(portfolio, dates){
## computes matrix of survival probability
## inputs:
## portfolio: portfolio of survival curves
@@ -784,10 +783,14 @@ SPmatrix <- function(portfolio, n.dates){ ## matrix of survival probabilities of dimensions dim1 x dim2
## with dim1 number of issuers and dim2 number of dates in the
## coupon schedule of index
- SP <- matrix(0, length(portfolio), n.dates)
+ SP <- matrix(0, length(portfolio), length(dates))
for(i in 1:length(portfolio)){
- SP[i,] <- SP(portfolio[[i]]@curve, portfolio[[i]]@startdate)[1:n.dates]
+ T <- c(0, yearFrac(portfolio[[i]]@startdate, dates))
+ dT <- diff(T)
+ SP[i,] <- SP(portfolio[[i]]@curve, dates, dT)
}
+ colnames(SP) <- as.character(dates)
+ rownames(SP) <- unlist(lapply(portfolio, function(x)x@issuer))
return( SP )
}
|
