Learn R Programming

copula (version 0.999-7)

absdPsiMC: Absolute Value of Generator Derivatives via Monte Carlo

Description

Computes the absolute values of the $d$th generator derivative $\psi^{(d)}$ via Monte Carlo simulation.

Usage

absdPsiMC(t, family, theta, degree = 1, n.MC,
          method = c("log", "direct", "pois.direct", "pois"),
          log = FALSE, is.log.t = FALSE)

Arguments

t
numeric vector of evaluation points.
family
Archimedean family (name or object).
theta
parameter value.
degree
order $d$ of the derivative.
n.MC
Monte Carlo sample size.
method
different methods: [object Object],[object Object],[object Object],[object Object]
log
if TRUE the logarithm of absdPsi is returned.
is.log.t
if TRUE the argument t contains the logarithm of the mathematical $t$, i.e., conceptually, psi(t, *) == psi(log(t), *, is.log.t=TRUE), where the latter may potentially be numerically accurate, e.g., f

Value

  • numeric vector of the same length as t containing the absolute values of the generator derivatives.

Details

The absolute value of the $d$th derivative of the Laplace-Stieltjes transform $\psi=\mathcal{LS}[F]$ can be approximated via $$(-1)^d\psi^{(d)}(t)=\int_0^\infty x^d\exp(-tx)\,dF(x)\approx\frac{1}{N}\sum_{k=1}^NV_k^d\exp(-V_kt),\ t> 0,$$ where $V_k\sim F,\ k\in{1,\dots,N}$. This approximation is used where $d=$degree and $N=$n.MC. Note that this is comparably fast even if t contains many evaluation points, since the random variates $V_k\sim F,\ k\in{1,\dots,N}$ only have to be generated once, not depending on t.

References

Hofert, M., Mächler{Maechler}, M., and McNeil, A. J. (2011a), Estimators for Archimedean copulas in high dimensions: A comparison, submitted.

See Also

acopula-families.

Examples

Run this code
t <- c(0:100,Inf)
set.seed(1)
(ps <- absdPsiMC(t, family="Gumbel", theta=2, degree=10, n.MC=10000, log=TRUE))
## Note: The absolute value of the derivative at 0 should be Inf for
## Gumbel, however, it is always finite for the Monte Carlo approximation
set.seed(1)
ps2 <- absdPsiMC(log(t), family="Gumbel", theta=2, degree=10,
                 n.MC=10000, log=TRUE, is.log.t = TRUE)
stopifnot(all.equal(ps[-1], ps2[-1], tol=1e-14))
## Now is there an advantage of using "is.log.t" ?
sapply(eval(formals(absdPsiMC)$method), function(MM)
       absdPsiMC(780, family="Gumbel", method = MM,
                 theta=2, degree=10, n.MC=10000, log=TRUE, is.log.t = TRUE))
## not really better, yet...

Run the code above in your browser using DataLab