Existe um método muito simples de simular a partir da cópula gaussiana, que se baseia nas definições da distribuição normal multivariada e na cópula de Gauss.
Começarei fornecendo a definição e as propriedades necessárias da distribuição normal multivariada, seguida pela cópula gaussiana, e depois fornecerei o algoritmo para simular a partir da cópula de Gauss.
Distribuição normal multivariada
Um vetor aleatório tem uma distribuição normal multivariada se
X d = μ + A Z ,
onde Z é um vetor tridimensional k de variáveis aleatórias normais padrão independentes, μ é um vetor d- dimensional de constantes e A é uma matriz d × k de constantes. A notação d =X=(X1,…,Xd)′
X=dμ+AZ,
ZkμdAd×k=ddenota igualdade na distribuição. Portanto, cada componente de
é essencialmente uma soma ponderada de variáveis aleatórias normais padrão independentes.
A partir das propriedades dos vetores médios e matrizes de covariância, temos
E ( X ) = μ e
c o v ( X ) = Σ , com
Σ = A A ′ , levando à notação natural
X ∼ N d ( μ , Σ ) .
XE(X)=μcov(X)=ΣΣ=AA′X∼Nd(μ,Σ)
Cópula de Gauss
A cópula de Gauss é definida implicitamente a partir da distribuição normal multivariada, ou seja, a cópula de Gauss é a cópula associada a uma distribuição normal multivariada. Especificamente, a partir do teorema de Sklar, a cópula de Gauss é
onde Φ
CP(u1,…,ud)=ΦP(Φ−1(u1),…,Φ−1(ud)),
Φdenota a função de distribuição normal padrão e
denota a função de distribuição normal padrão multivariada com matriz de correlação P. Portanto, a cópula de Gauss é simplesmente uma distribuição normal multivariada padrão em que a
transformação integral de probabilidade é aplicada a cada margem.
ΦP
Algoritmo de simulação
Em vista do exposto, uma abordagem natural para simular a partir da cópula de Gauss é simular a partir da distribuição normal padrão multivariada com uma matriz de correlação apropriada e converter cada margem usando a transformação integral de probabilidade com a função de distribuição normal padrão. Embora simulando a partir de uma distribuição normal multivariada com matriz covariância Σ essencialmente vem para baixo para fazer uma soma ponderada de variáveis independentes normais padrão aleatório, em que o "peso" matriz A podem ser obtidos por decomposição de Cholesky da matriz covariância Σ .PΣAΣ
Portanto, um algoritmo para simular amostras da cópula de Gauss com matriz de correlação P é:nP
- Realize uma decomposição de de Cholesky e defina A como a matriz triangular inferior resultante.PA
- Repita as etapas a seguir vezes.
n
- Gere um vetor de variáveis normais padrão independentes.Z=(Z1,…,Zd)′
- Defina X=AZ
- Retorno .U=(Φ(X1),…,Φ(Xd))′
O código a seguir em um exemplo de implementação desse 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)))}))
A tabela a seguir mostra os dados resultantes do código R acima.