R中copula的期望值
Expected values from copula in R
我有一个 copula 表示两个变量 X 和 Y 之间的相关性。我想计算以下公式:E(X|Y≤1%)。是在Y低于1%的条件下X的期望值。
我看到有人问了一个有点类似的问题 there 但提供的 R 代码没有给出我正在寻找的值。
以下是有关 copula 和边缘分布的一些详细信息。
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)
您必须计算此二重积分:integral of x*pdf(x,y), -oo < x < +oo, -oo < y < 1%
,并将其除以 Pr(Y < 1%)
。这是在下面完成的。我也通过模拟进行近似检查。
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
我有一个 copula 表示两个变量 X 和 Y 之间的相关性。我想计算以下公式:E(X|Y≤1%)。是在Y低于1%的条件下X的期望值。 我看到有人问了一个有点类似的问题 there 但提供的 R 代码没有给出我正在寻找的值。 以下是有关 copula 和边缘分布的一些详细信息。
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)
您必须计算此二重积分:integral of x*pdf(x,y), -oo < x < +oo, -oo < y < 1%
,并将其除以 Pr(Y < 1%)
。这是在下面完成的。我也通过模拟进行近似检查。
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