diff options
Diffstat (limited to 'R')
| -rw-r--r-- | R/distrib.R | 18 |
1 files changed, 8 insertions, 10 deletions
diff --git a/R/distrib.R b/R/distrib.R index 2b14776..2f288f9 100644 --- a/R/distrib.R +++ b/R/distrib.R @@ -68,7 +68,7 @@ convolve <- function(dist1, dist2) { n2 <- length(dist2) dist1 <- c(dist1, rep(0, n2-1)) dist2 <- c(dist2, rep(0, n1-1)) - Re(fft(fft(dist1) * fft(dist2), inverse=T))/length(dist1) + Re(stats::fft(stats::fft(dist1) * stats::fft(dist2), inverse=T)) / length(dist1) } #' Loss distribution of a portfolio @@ -487,14 +487,14 @@ shockprob <- function(p, rho, Z, log.p=F) { ## p and rho are scalars, Z is a vector of length n, returns vector of length n if(length(p)==1) { if(rho==1) { - return(Z <= qnorm(p)) + return(Z <= stats::qnorm(p)) } else { - return(pnorm((qnorm(p)-sqrt(rho)*Z)/sqrt(1-rho), log.p=log.p)) + return(stats::pnorm((stats::qnorm(p) - sqrt(rho)*Z)/sqrt(1 - rho), log.p = log.p)) } } else { result <- double(length(p)) - result[rho==1] <- Z<=qnorm(p[rho==1]) - result[rho<1] <- pnorm((qnorm(p[rho<1])-sqrt(rho[rho<1])*Z)/sqrt(1-rho[rho<1]), log.p=log.p) + result[rho == 1] <- Z <= stats::qnorm(p[rho == 1]) + result[rho < 1] <- stats::pnorm((stats::qnorm(p[rho < 1]) - sqrt(rho[rho < 1]) * Z)/sqrt(1 - rho[rho < 1]), log.p = log.p) return( result ) } } @@ -509,14 +509,12 @@ shockseverity <- function(S, Stilde=1, Z, rho, p) { return(result) } -#' @export dshockprob <- function(p,rho,Z) { - dnorm((qnorm(p)-sqrt(rho)*Z)/sqrt(1-rho))*dqnorm(p)/sqrt(1-rho) + stats::dnorm((stats::qnorm(p) - sqrt(rho) * Z) / sqrt(1-rho)) * dqnorm(p) / sqrt(1-rho) } -#' @export dqnorm <- function(x) { - 1/dnorm(qnorm(x)) + 1 / stats::dnorm(stats::qnorm(x)) } #' @export @@ -528,7 +526,7 @@ fit.prob <- function(Z, w, rho, p0) { } if(rho == 1) { distw <- distr::DiscreteDistribution(Z, w) - return(distr::pnorm(distr::q(distw)(p0))) + return(stats::pnorm(distr::q(distw)(p0))) } eps <- 1e-12 dp <- (crossprod(shockprob(p0, rho, Z),w) - p0) / crossprod(dshockprob(p0, rho, Z), w) |
