gtrafo {copula} | R Documentation |
Compute the following goodness-of-fit (GOF) testing transformations,
rtrafo()
is also of
importance outside of GOF computations: The Rosenblatt
transformation is used for computing conditional copulas and
for sampling purposes. Currently, rtrafo()
is applicable
to elliptical and Archimedean copulas.
htrafo()
the transformation described in Hering and Hofert (2014), for Archimedean copulas.
rtrafo(u, cop, j.ind = NULL, n.MC=0, inverse=FALSE, log=FALSE) htrafo(u, cop, include.K=TRUE, n.MC=0, inverse=FALSE, method=eval(formals(qK)$method), u.grid, ...)
u |
n x d-matrix with values in [0,1]. If
|
cop |
a |
j.ind |
|
n.MC |
parameter |
inverse |
logical indicating whether the inverse of the transformation is returned. |
log |
logical specifying if the logarithm of the transformation, i.e., conditional distributions is desired. |
include.K |
logical indicating whether the last component, involving the
Kendall distribution function |
method |
method to compute |
u.grid |
argument of |
... |
additional arguments passed to |
rtrafo
Given a d-dimensional random vector U following an Archimedean copula C with generator ψ, the conditional copula of U_j=u_j given U_1=u_1,..., U_{j-1}=u_{j-1} is given by
C(u_j | u_1,...,u_{j-1}) = (psi^{(j-1)}(sum(k=1.. j) psi^{(-1)}(u_k))) / (psi^{(j-1)}(sum(k=1..j-1) psi^{(-1)}(u_k))).
This formula is either evaluated with the exact derivatives or, if
n.MC
is positive, via Monte Carlo; see absdPsiMC
.
Rosenblatt (1952) showed that U' ~ U[0,1]^m, where U'_1 = U_1, U'_2 = C(U_2 | U_1), ..., and U'_m = C(U_m | U_1,..., U_{m-1}).
rtrafo
applies this transformation row-wise to u
(with default m=d) and thus returns an n x
m-matrix.
The inverse transformation (inverse=TRUE
) applied to
U[0,1]^d data is known as “conditional distribution
method” for sampling.
Note that for the Clayton, the Gauss and the t copula, both the
conditional copulas and their inverses are known explicitly and
rtrafo()
utilizes these explicit forms.
htrafo
Given a d-dimensional random vector U following an Archimedean copula C with generator ψ, Hering and Hofert (2014) showed that U'~U[0,1]^d, where
U'_j = ((psi^{-1}(U_1) + ... + psi^{-1}(U_j)) / (psi^{-1}(U_1) + ... + psi^{-1}(U_{j+1})))^j, j in {1,..., d-1}, U'_d = K(C(U)).
htrafo
applies this transformation row-wise to
u
and thus returns either an n x d- or an
n x (d-1)-matrix, depending on whether the last
component U'_d which involves the (possibly
numerically challenging) Kendall distribution function K is used
(include.K=TRUE
) or not (include.K=FALSE
).
htrafo()
returns an
n x d- or n x (d-1)-matrix
(depending on whether include.K
is TRUE
or
FALSE
) containing the transformed input u
.
rtrafo()
returns an n x d-matrix containing the
transformed input u
.
Marius Hofert, Martin Maechler.
Genest, C., Rémillard, B., and Beaudoin, D. (2009). Goodness-of-fit tests for copulas: A review and a power study. Insurance: Mathematics and Economics 44, 199–213.
Rosenblatt, M. (1952). Remarks on a Multivariate Transformation, The Annals of Mathematical Statistics 23, 3, 470–472.
Hering, C. and Hofert, M. (2014). Goodness-of-fit tests for Archimedean copulas in high dimensions. Innovations in Quantitative Risk Management.
Hofert, M., Mächler, M., and McNeil, A. J. (2012). Likelihood inference for Archimedean copulas in high dimensions under known margins. Journal of Multivariate Analysis 110, 133–150.
gofCopula
where both transformations are applied or
emde
where htrafo
is applied.
tau <- 0.5 (theta <- copGumbel@iTau(tau)) # 2 (copG <- onacopulaL("Gumbel", list(theta, 1:5))) # d = 5 set.seed(1) n <- 1000 x <- rnacopula(n, copG) x <- qnorm(x) # x now follows a meta-Gumbel model with N(0,1) marginals u <- pobs(x) # build pseudo-observations ## graphically check if the data comes from a meta-Gumbel model ## with the transformation of Hering and Hofert (2014): u.h <- htrafo(u, cop=copG) # transform the data pairs(u.h, gap=0, cex=0.2) # looks good ## with the transformation of Rosenblatt (1952): u.r <- rtrafo(u, cop=copG) # transform the data pairs(u.r, gap=0, cex=0.2) # looks good ## what about a meta-Clayton model? ## the parameter is chosen such that Kendall's tau equals (the same) tau copC <- onacopulaL("Clayton", list(copClayton@iTau(tau), 1:5)) ## plot of the transformed data (Hering and Hofert (2014)) to see the ## deviations from uniformity u.H <- htrafo(u, cop=copC) # transform the data pairs(u.H, gap=0, cex=0.2) # clearly visible ## plot of the transformed data (Rosenblatt (1952)) to see the ## deviations from uniformity u.R <- rtrafo(u, cop=copC) # transform the data pairs(u.R, gap=0, cex=0.2) # clearly visible ## rtrafo() for elliptical: fN <- fitCopula(normalCopula(dim=ncol(u)), u) # fit a Gauss copula pairs(rtrafo(u, cop=fN@copula), gap=0, cex=0.2) # visible but not so clearly if(copula:::doExtras()) { f.t <- fitCopula(tCopula(dim=ncol(u)), u) tCop <- f.t@copula } else { tCop <- tCopula(param = 0.685, df = 7, dim=ncol(u)) } u.Rt <- rtrafo(u, cop=tCop) # transform with a fitted t copula pairs(u.Rt, gap=0, cex=0.2) # *not* clearly visible