Existe un método muy simple para simular a partir de la cópula gaussiana que se basa en las definiciones de la distribución normal multivariada y la cópula Gauss.
Comenzaré proporcionando la definición y las propiedades requeridas de la distribución normal multivariada, seguida de la cópula gaussiana, y luego proporcionaré el algoritmo para simular a partir de la cópula Gauss.
Distribución normal multivariante
Un vector aleatorio tiene una distribución normal multivariante si
X d = μ + A Z ,
donde Z es un vector k- dimensional de variables aleatorias normales estándar independientes, μ es un vector d- dimensional de constantes, y A es una matriz de constantes d × k . La notación d =X=(X1,…,Xd)′
X=dμ+AZ,
ZkμdAd×k=ddenota igualdad en la distribución. Por lo tanto, cada componente de
es esencialmente una suma ponderada de variables aleatorias normales estándar independientes.
A partir de las propiedades de los vectores medios y las matrices de covarianza, tenemos
E ( X ) = μ y
c o v ( X ) = Σ , con
Σ = A A ' , lo que lleva a la notación natural
X ∼ N d ( μ , Σ ) .
XE(X)=μcov(X)=ΣΣ=AA′X∼Nd(μ,Σ)
Cópula de Gauss
La cópula de Gauss se define implícitamente a partir de la distribución normal multivariada, es decir, la cópula de Gauss es la cópula asociada con una distribución normal multivariada. Específicamente, a partir del teorema de Sklar, la cópula de Gauss es
donde Φ
CP(u1,…,ud)=ΦP(Φ−1(u1),…,Φ−1(ud)),
Φdenota la función de distribución normal estándar, y
denota la función de distribución normal estándar multivariada con la matriz de correlación P. Entonces, la cópula de Gauss es simplemente una distribución normal multivariada estándar donde la
transformación integral de probabilidad se aplica a cada margen.
ΦP
Algoritmo de simulación
En vista de lo anterior, un enfoque natural para simular desde la cópula de Gauss es simular desde la distribución normal estándar multivariada con una matriz de correlación apropiada , y convertir cada margen usando la transformación integral de probabilidad con la función de distribución normal estándar. Mientras que la simulación de una distribución normal multivariada con matriz de covarianza Σ esencialmente se reduce a hacer una suma ponderada de variables aleatorias normales estándar independientes, donde la matriz de "peso" A se puede obtener mediante la descomposición de Cholesky de la matriz de covarianza ΣPΣAΣ .
Por lo tanto, un algoritmo para simular muestras de la cópula de Gauss con la matriz de correlación P es:nP
- Realice una descomposición Cholesky de y establezca APA como la matriz triangular inferior resultante.
- Repita los siguientes pasos n veces.
- Genere un vector Z=(Z1,…,Zd)′ de variables normales estándar independientes.
- Conjunto X=AZ
- Devuelve .U=(Φ(X1),…,Φ(Xd))′
El siguiente código en una implementación de ejemplo de este algoritmo usando R:
## Initialization and parameters
set.seed(123)
P <- matrix(c(1, 0.1, 0.8, # Correlation matrix
0.1, 1, 0.4,
0.8, 0.4, 1), nrow = 3)
d <- nrow(P) # Dimension
n <- 200 # Number of samples
## Simulation (non-vectorized version)
A <- t(chol(P))
U <- matrix(nrow = n, ncol = d)
for (i in 1:n){
Z <- rnorm(d)
X <- A%*%Z
U[i, ] <- pnorm(X)
}
## Simulation (compact vectorized version)
U <- pnorm(matrix(rnorm(n*d), ncol = d) %*% chol(P))
## Visualization
pairs(U, pch = 16,
labels = sapply(1:d, function(i){as.expression(substitute(U[k], list(k = i)))}))
El siguiente cuadro muestra los datos resultantes del código R anterior.