Vinecop.inverse_rosenblatt
- Vinecop.inverse_rosenblatt(self: pyvinecopulib.Vinecop, u: numpy.ndarray[numpy.float64[m, n]], num_threads: int = 1) numpy.ndarray[numpy.float64[m, n]]
Evaluates the inverse Rosenblatt transform.
The inverse Rosenblatt transform can be used for simulation: the function applied to independent uniform variates resembles simulated data from the vine copula model.
If the problem is too large, it is split recursively into halves (w.r.t. \(n\), the number of observations). “Too large” means that the required memory will exceed 1 GB. An examplary configuration requiring less than 1 GB is \(n = 1000\), \(d = 200\).
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,
Vinecop.rosenblatt()
returns the variables\[U_{M[d - j, j]}= F(V_{M[d - j, j]} | V_{M[d - j - 1, j - 1]}, \dots, V_{M[0, 0]}),\]where \(M\) is the structure matrix. Similarly,
Vinecop.inverse_rosenblatt()
computes\[V_{M[d - j, j]}= F^{-1}(U_{M[d - j, j]} | U_{M[d - j - 1, j - 1]}, \dots, U_{M[0, 0]}).\]- Parameters:
u – An \(n \times d\) matrix of evaluation points.
num_threads – The number of threads to use for computations; if greater than 1, the function will be applied concurrently to
num_threads
batches ofu
.
- Returns:
An \(n \times d\) matrix of evaluations.