Package 'vasicekfit'

Title: Extended Vasicek Credit Loss Model with Macroeconomic Factors
Description: Fits the extended Vasicek single-factor credit loss model where the probability of default depends on macroeconomic covariates. Maximum likelihood estimates of all parameters, including asset value correlation, are obtained via closed-form probit-transformed OLS regression; see Mayorov (2026) <doi:10.2139/ssrn.6506378> for derivation.
Authors: Dmitriy Mayorov [aut, cre]
Maintainer: Dmitriy Mayorov <[email protected]>
License: MIT + file LICENSE
Version: 0.1.0.9000
Built: 2026-05-30 09:32:40 UTC
Source: https://github.com/externalmemory/vasicekfit-cran-package

Help Index


Extended Vasicek Credit Loss Model with Macroeconomic Factors

Description

Fits the extended Vasicek single-factor credit loss model where the probability of default depends on macroeconomic covariates. Maximum likelihood estimates of all parameters, including asset value correlation, are obtained via closed-form probit-transformed OLS regression. Also provides density, distribution, quantile, and random generation functions for the Vasicek loss distribution.

Author(s)

Dmitriy Mayorov

References

Vasicek, O. A. (2002). The distribution of loan portfolio value. Risk, 15(12), 160–162.

Yang, B. H. (2014). Estimating Long-Run PD, Asset Correlation, and Portfolio Level PD by Vasicek Models. MPRA Paper No. 57244.

See Also

vasicekfit, predict.vasicekfit, dvasicek


Predict Method for vasicekfit Objects

Description

Obtain predictions from a fitted Vasicek model, optionally at specified confidence levels.

Usage

## S3 method for class 'vasicekfit'
predict(object, newdata = NULL,
        type = c("link", "response"), alpha = NULL, ...)

Arguments

object

a vasicekfit object.

newdata

an optional data frame of new predictor values. If omitted, the training data are used.

type

character; "link" (default) returns predictions in probit space, "response" back-transforms to the (0, 1) loss-rate scale.

alpha

optional numeric vector of confidence levels in (0, 1). When supplied, predictions are conditional quantiles of the loss distribution at each confidence level.

...

additional arguments (currently unused).

Value

If alpha is NULL, a numeric vector of predictions. If alpha is supplied, a matrix with rows corresponding to observations and columns to confidence levels. When alpha is a scalar, the result is a vector.

See Also

vasicekfit

Examples

set.seed(42)
n <- 100
u <- rnorm(n)
x <- pnorm((qnorm(0.03) + 0.1 * u + sqrt(0.02) * rnorm(n)) / sqrt(1 - 0.02))
d <- data.frame(default_rate = x, macro = u)
fit <- vasicekfit(default_rate ~ macro, data = d)

# Conditional mean PD
predict(fit, type = "response")

# 99th percentile loss rate under stress
predict(fit, newdata = data.frame(macro = 2), alpha = 0.99,
        type = "response")

# Multiple confidence levels
predict(fit, newdata = data.frame(macro = c(0, 1, 2)),
        alpha = c(0.95, 0.99, 0.999), type = "response")

The Vasicek Loss Distribution

Description

Density, distribution function, quantile function, and random generation for the Vasicek credit loss distribution.

Usage

dvasicek(x, p, rho, kappa = NULL, u = NULL, log = FALSE)
pvasicek(q, p, rho, kappa = NULL, u = NULL, lower.tail = TRUE, log.p = FALSE)
qvasicek(prob, p, rho, kappa = NULL, u = NULL, lower.tail = TRUE, log.p = FALSE)
rvasicek(n, p, rho, kappa = NULL, u = NULL)

Arguments

x, q

vector of quantiles (loss rates in (0, 1)).

prob

vector of probabilities.

n

number of observations to generate.

p

probability of default, in (0, 1).

rho

asset value correlation, in (0, 1).

kappa

optional numeric vector of macro-factor sensitivities.

u

optional numeric vector of macro-factor values, same length as kappa.

log, log.p

logical; if TRUE, probabilities/densities are given as log(p).

lower.tail

logical; if TRUE (default), probabilities are P[Xx]P[X \le x], otherwise P[X>x]P[X > x].

Details

The Vasicek loss distribution arises from the single-factor Gaussian copula model. Its probability density function is

f(x)=1ρρexp{12(Φ1(x)2[1ρΦ1(x)κjujΦ1(p)ρ]2)}f(x) = \sqrt{\frac{1-\rho}{\rho}} \exp\left\{\frac{1}{2}\left(\Phi^{-1}(x)^2 - \left[\frac{\sqrt{1-\rho}\,\Phi^{-1}(x) - \sum \kappa_j u_j - \Phi^{-1}(p)}{\sqrt{\rho}}\right]^2\right)\right\}

When kappa and u are NULL, this reduces to the standard two-parameter Vasicek distribution.

Value

dvasicek gives the density, pvasicek gives the distribution function, qvasicek gives the quantile function, and rvasicek generates random deviates.

References

Vasicek, O. A. (2002). The distribution of loan portfolio value. Risk, 15(12), 160–162.

See Also

vasicekfit

Examples

# Standard Vasicek density
curve(dvasicek(x, p = 0.03, rho = 0.10), from = 0.001, to = 0.20,
      ylab = "Density", main = "Vasicek loss distribution")

# 99th percentile (Basel-style)
qvasicek(0.99, p = 0.03, rho = 0.10)

# Check CDF and quantile are inverses
qvasicek(pvasicek(0.05, p = 0.03, rho = 0.10), p = 0.03, rho = 0.10)

# Random sample
set.seed(1)
hist(rvasicek(10000, p = 0.03, rho = 0.10), breaks = 100,
     main = "Vasicek loss distribution samples")

Fit an Extended Vasicek Credit Loss Model

Description

Fits the extended Vasicek single-factor credit loss model where the probability of default depends on macroeconomic covariates. All parameters, including asset value correlation, are estimated via closed-form probit-transformed OLS.

Usage

vasicekfit(formula, data, bias_correct = FALSE, portfolio_size = NULL)

Arguments

formula

a formula of the form response ~ predictors where the response is an observed default/loss rate in (0, 1).

data

a data frame containing the variables in formula.

bias_correct

logical; if TRUE, apply the small-sample bias correction to the variance estimate by multiplying by N/(Nm1)N/(N - m - 1), where NN is number of observations and mm is number of predictors.

portfolio_size

optional positive integer. If supplied, a finite-portfolio variance correction is applied to the response before fitting (see Yang, 2014, section 4.3).

Value

An object of class "vasicekfit", which is a list containing:

p

estimated probability of default (baseline PD).

rho

estimated asset value correlation.

kappa

named numeric vector of macro-factor sensitivities.

sigma2

MLE variance estimate in probit space.

lm_fit

the underlying lm object.

fitted.values

fitted values in probit (Y) space.

residuals

residuals in probit (Y) space.

formula

the model formula.

call

the matched call.

terms

the terms object.

model

the model frame.

bias_correct

logical flag used.

portfolio_size

portfolio size used, or NULL.

References

Vasicek, O. A. (2002). The distribution of loan portfolio value. Risk, 15(12), 160–162.

Yang, B. H. (2014). Estimating Long-Run PD, Asset Correlation, and Portfolio Level PD by Vasicek Models. MPRA Paper No. 57244.

See Also

predict.vasicekfit, dvasicek

Examples

set.seed(42)
n <- 100
u1 <- rnorm(n)
u2 <- rnorm(n)
p_true <- 0.03; rho_true <- 0.02
kappa_true <- c(0.13, -0.07)
z <- rnorm(n)
x <- pnorm((qnorm(p_true) + kappa_true[1] * u1 + kappa_true[2] * u2 +
  sqrt(rho_true) * z) / sqrt(1 - rho_true))
d <- data.frame(default_rate = x, unemp = u1, hpi = u2)
fit <- vasicekfit(default_rate ~ unemp + hpi, data = d)
fit

Methods for vasicekfit Objects

Description

Print, summary, coefficient extraction, covariance, confidence interval, and accessor methods for "vasicekfit" objects.

Usage

## S3 method for class 'vasicekfit'
print(x, ...)
## S3 method for class 'vasicekfit'
summary(object, type = c("iid", "HAC"), ...)
## S3 method for class 'vasicekfit'
coef(object, ...)
## S3 method for class 'vasicekfit'
fitted(object, ...)
## S3 method for class 'vasicekfit'
residuals(object, ...)
## S3 method for class 'vasicekfit'
vcov(object, type = c("iid", "HAC"), ...)
## S3 method for class 'vasicekfit'
confint(object, parm, level = 0.95,
                              type = c("iid", "HAC"), ...)

Arguments

x, object

a vasicekfit object.

parm

a specification of which parameters to compute confidence intervals for, either a vector of names or indices. If missing, all parameters are considered.

level

the confidence level required.

type

covariance type. "iid" (default) uses the closed-form block-diagonal Gaussian covariance. "HAC" uses a kernel long-run covariance of the joint influence functions for (β^,σ^2)(\hat\beta, \hat\sigma^2) and requires the sandwich package.

...

when type = "HAC", extra arguments are forwarded to lrvar, e.g. prewhite, kernel, bw, or adjust. (lrvar's own type argument cannot be set this way because the name collides; if you need Newey-West-style bandwidth selection, pass kernel = "Bartlett" and an explicit bw.) Ignored when type = "iid".

Details

coef returns the recovered Vasicek parameters (p, rho, and kappas) in the original parameter space.

fitted and residuals return values in probit (Y) space, consistent with the underlying OLS regression.

vcov returns the delta-method covariance matrix for the original-space parameters (p,ρ,κ1,,κm)(p, \rho, \kappa_1, \ldots, \kappa_m), obtained by propagating the joint covariance of (β^,σ^2)(\hat\beta, \hat\sigma^2) through the closed-form recovery transform.

With type = "iid" the (β^,σ^2)(\hat\beta, \hat\sigma^2) block is treated as block-diagonal by the independence of sample mean and variance under normality. The variance of σ^2\hat\sigma^2 uses 2σ4(Nm1)/N22 \sigma^4 (N - m - 1)/N^2 for the MLE and 2σ4/(Nm1)2 \sigma^4 / (N - m - 1) when bias_correct = TRUE.

With type = "HAC" the joint covariance of (β^,σ^2)(\hat\beta, \hat\sigma^2) is estimated as the long-run variance of the stacked influence functions ψβ,i=(XX/N)1xiei\psi_{\beta,i} = (X'X/N)^{-1} x_i e_i and ψσ2,i=ei2σ^2\psi_{\sigma^2,i} = e_i^2 - \hat\sigma^2, computed via lrvar. This is appropriate when the data exhibit serial correlation (e.g. quarterly macro covariates), at the cost of some finite-sample bias. Defaults follow lrvar (Andrews quadratic-spectral kernel, prewhitened); pass prewhite, kernel, bw, or adjust via ... to override.

The HAC standard errors do not change with bias_correct: the long-run variance is estimated empirically from the influence functions rather than from the parametric Gaussian formula, so the N/(Nm1)N/(N-m-1) scaling does not apply. The bias_correct flag still affects the point estimates of pp, ρ\rho, and κ\kappa (via σ^2\hat\sigma^2) regardless of type.

confint returns Wald intervals based on vcov.

Value

print and summary return object invisibly.

coef returns a named numeric vector.

fitted and residuals return numeric vectors.

vcov returns a (m+2)×(m+2)(m+2) \times (m+2) covariance matrix.

confint returns a two-column matrix of lower and upper bounds.

See Also

vasicekfit, predict.vasicekfit