Search code examples
rdistributionprobability-distribution

Expected values from copula in R


I have a copula representing the dependence between two variables X and Y. I want to compute the following formula: E(X|Y≤1%). It is the expected value of X conditional on Y being lower than 1%. I see that a somewhat similar question was asked there but the R code provided does not give the value I am looking for. Below are some details about the copula and marginal distribution.

library(VineCopula)
   library(copula)
#I estimate my Copula and assumes normal distribution for the two marginals
copula_dist <- mvdc(copula=claytonCopula(param=1.0), margins=c("norm","norm"),
                    paramMargins=list(list(mean=0, sd=5),list(mean=0, sd=5)))

#I take a sample of 500 events
sim <- rMvdc(500,copula_dist)
# Compute the density
pdf_mvd <- dMvdc(sim, my_dist)
# Compute the CDF
cdf_mvd <- pMvdc(sim, my_dist)

Solution

  • You have to evaluate this double integral: integral of x*pdf(x,y), -oo < x < +oo, -oo < y < 1%, and divide it by Pr(Y < 1%). This is done below. I also perform an approximation by simulations to have a check.

    library(copula)
    
    # the distribution
    copula_dist <- mvdc(copula=claytonCopula(param=1.0), margins=c("norm","norm"),
                        paramMargins=list(list(mean=0, sd=5),list(mean=0, sd=5)))
    
    ### we will calculate E[X | Y < y0]
    y0 <- 1/100
    
    ### approximation of E[X | Y < y0] using simulations
    sim <- rMvdc(100000, copula_dist)
    mean(sim[sim[,2]<y0,1])
    # [1] -1.967642
    
    ### approximation of E[X | Y < y0] using numerical integration
    ### this is E[X * 1_{Y<y0}] / P(Y < y0)
    library(cubature)
    # PDF of the distribution 
    pdf <- function(xy) dMvdc(xy, copula_dist)
    # P(Y < y0)
    denominator <- pnorm(y0, mean=0, sd=5)
    # integrand
    f <- function(xy) xy[1] * pdf(xy)
    # integral
    integral <- hcubature(f, lowerLimit = c(-Inf, -Inf), upperLimit = c(Inf, y0))
    integral$integral / denominator
    # [1] -1.942691