rosenblatt {rvinecopulib} | R Documentation |
(Inverse) Rosenblatt transform
Description
The Rosenblatt transform takes data generated from a model and turns it into independent uniform variates, The inverse Rosenblatt transform computes conditional quantiles and can be used simulate from a stochastic model, see Details.
Usage
rosenblatt(x, model, cores = 1)
inverse_rosenblatt(u, model, cores = 1)
Arguments
x |
matrix of evaluation points; must be in |
model |
a model object; classes currently supported are
|
cores |
if |
u |
matrix of evaluation points; must be in |
Details
The Rosenblatt transform (Rosenblatt, 1952) U = T(V)
of a random vector
V = (V_1,\ldots,V_d) ~ F
is defined as
U_1= F(V_1), U_{2} = F(V_{2}|V_1), \ldots, U_d =F(V_d|V_1,\ldots,V_{d-1}),
where F(v_k|v_1,\ldots,v_{k-1})
is the conditional distribution of
V_k
given V_1 \ldots, V_{k-1}, k = 2,\ldots,d
. The vector
U = (U_1, \dots, U_d)
then contains independent standard uniform
variables. The inverse operation
V_1 = F^{-1}(U_1), V_{2} = F^{-1}(U_2|U_1), \ldots,
V_d =F^{-1}(U_d|U_1,\ldots,U_{d-1}),
can be used to simulate from a distribution. For any copula F
, if
U
is a vector of independent random variables, V = T^{-1}(U)
has
distribution F
.
The formulas above assume a vine copula model with order d, \dots, 1
.
More generally, rosenblatt()
returns the variables
U_{M[d + 1- j, j]}= F(V_{M[d + 1- j, j]} | V_{M[d - j, j - 1]}, \dots, V_{M[1, 1]}),
where M
is the structure matrix. Similarly, inverse_rosenblatt()
returns
V_{M[d + 1- j, j]}= F^{-1}(U_{M[d + 1- j, j]} | U_{M[d - j, j - 1]}, \dots, U_{M[1, 1]}).
Examples
# simulate data with some dependence
x <- replicate(3, rnorm(200))
x[, 2:3] <- x[, 2:3] + x[, 1]
pairs(x)
# estimate a vine distribution model
fit <- vine(x, copula_controls = list(family_set = "par"))
# transform into independent uniforms
u <- rosenblatt(x, fit)
pairs(u)
# inversion
pairs(inverse_rosenblatt(u, fit))
# works similarly for vinecop models
vc <- fit$copula
rosenblatt(pseudo_obs(x), vc)