
rtrafo()
rtrafo()
is applicable
to elliptical and Archimedean copulas.
htrafo()
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, ...)
inverse=FALSE
(the default), u
contains
(pseudo-/copula-)observations from the copula cop
based on
which the transformation is carried out; consider applying the
function pobs()
first in order to obtain u
. If
inverse=TRUE
, u
contains $U[0,1]^d$ distributed
values which are transformed to copula-based (cop
) ones."Copula"
with specified parameters
based on which the transformation is computed. For htrafo()
,
currently only Archimedean copulas are supported (specified as
"outer_nacopula"
), whereas for rtrafo()
,
hierarchical Archimedean and elliptical copulas (see
ellipCopula
) are allowed.n.MC
for K
(for htrafo
)
or for approximating the derivatives involved in the Rosenblatt
transform for Archimedean copulas (for rtrafo
).K
, is used in htrafo
.qK
.qK
(for method="discrete"
).qK()
if
inverse
is true.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
.
rtrafo
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
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
).
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
Run the code above in your browser using DataLab