Como simular a partir de uma cópula gaussiana?

16

Suponha que eu tenha duas distribuições marginais univariadas, digamos e , das quais eu possa simular. Agora, construa sua distribuição conjunta usando uma cópula gaussiana , denominada . Todos os parâmetros são conhecidos.FGC(F,G;Σ)

Existe um método não MCMC para simular a partir desta cópula?

Tilo
fonte
8
Supondo para , é claro: Gere . Tome e . Tudo feito. i = 1 , 2 ( X , Y ) N ( 0 , Σ ) F - 1 ( Φ ( X ) ) G - 1 ( Φ ( Y ) )Σii=1i=1,2(X,Y)N(0,Σ)F1(Φ(X))G1(Φ(Y))
cardeal
1
R também possui um pacote chamado "copula", que pode simular a maioria das cópulas padrão.
Semibruin

Respostas:

21

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 ( μ , Σ ) .X
E(X)=μcov(X)=ΣΣ=AAXNd(μ,Σ)

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

  1. Realize uma decomposição de de Cholesky e defina A como a matriz triangular inferior resultante.PA
  2. Repita as etapas a seguir vezes. n
    1. Gere um vetor de variáveis ​​normais padrão independentes.Z=(Z1,,Zd)
    2. Defina X=AZ
    3. 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.

insira a descrição da imagem aqui

QuantIbex
fonte
Onde F e G aparecem depois disso?
Lcrmorin
@Were_cat, o que você quer dizer?
QuantIbex 7/08/15
Na pergunta original, há uma menção a F e G, duas distribuições univariadas. Como você vai de cópulas para rv com margens F e G?
Lcrmorin
U1U2(0,1)Y1Y2FGY1=F1(U1)Y2=G1(U2)F1G1FG
2
@Were_cat, para citar a página da cópula da wikipedia : "uma cópula é uma distribuição de probabilidade multivariada para a qual a distribuição de probabilidade marginal de cada variável é uniforme. Cópulas são usadas para descrever a dependência entre variáveis ​​aleatórias."
precisa saber é o seguinte