Bagaimana cara mensimulasikan dari Gaussian copula?

16

Misalkan saya memiliki dua distribusi marginal univariat, katakanlah dan G , yang dapat saya simulasikan. Sekarang, buat distribusi bersama mereka menggunakan Gaussian copula , dilambangkan C ( F , G ; Σ ) . Semua parameter diketahui.FGC(F,G;Σ)

Apakah ada metode non-MCMC untuk mensimulasikan dari copula ini?

Tilo
sumber
8
Dengan asumsi untuk i = 1 , 2 , tentu saja: Hasilkan ( X , Y ) N ( 0 , Σ ) . Ambil F - 1 ( Φ ( X ) ) dan G - 1 ( Φ ( Y ) ) . Semua selesai. Σii=1i=1,2(X,Y)N(0,Σ)F1(Φ(X))G1(Φ(Y))
kardinal
1
R juga memiliki paket yang disebut "kopula", yang dapat mensimulasikan sebagian besar kopula standar.
semibruin

Jawaban:

21

Ada metode yang sangat sederhana untuk mensimulasikan dari kopula Gaussian yang didasarkan pada definisi distribusi normal multivariat dan kopula Gauss.

Saya akan mulai dengan memberikan definisi dan properti yang diperlukan dari distribusi normal multivariat, diikuti oleh kopula Gaussian, dan kemudian saya akan menyediakan algoritma untuk mensimulasikan dari kopula Gauss.

Distribusi normal multivariat
Vektor acak memiliki distribusi normal multivariat jika X d = μ + A Z , di mana Z adalah vektor k- dimensi dari variabel standar normal normal independen, μ adalah d- dimensi vektor konstanta, dan A adalah matriks konstanta d × k . Notasi d =X=(X1,,Xd)

X=dμ+AZ,
ZkμdAd×k=dmenunjukkan kesetaraan dalam distribusi. Jadi, setiap komponen pada dasarnya adalah jumlah tertimbang dari variabel independen normal standar normal. Dari sifat-sifat vektor mean dan matriks kovarians, kita memiliki E ( X ) = μ dan c o v ( X ) = Σ , dengan Σ = A A ' , yang mengarah ke notasi alami X ~ N d ( μ , Σ ) .X
E(X)=μcov(X)=ΣΣ=AAXNd(μ,Σ)

Gauss kerja penghubung
The Gauss kerja penghubung didefinisikan secara implisit dari distribusi normal multivariat, yaitu kata kerja penghubung Gauss adalah kata kerja penghubung terkait dengan distribusi normal multivariat. Secara khusus, dari teorema Sklar, Gauss copula adalah mana Φ

CP(u1,,ud)=ΦP(Φ1(u1),,Φ1(ud)),
Φmenunjukkan fungsi distribusi normal standar, dan menunjukkan fungsi distribusi normal standar multivariat dengan matriks korelasi P. Jadi, kopula Gauss hanyalah distribusi normal multivariat standar di mana transformasi integral probabilitas diterapkan pada setiap margin.ΦP

Algoritma simulasi
Dalam pandangan di atas, pendekatan alami untuk mensimulasikan dari Gauss copula adalah untuk mensimulasikan dari distribusi normal standar multivariat dengan matriks korelasi sesuai , dan untuk mengkonversi setiap margin menggunakan probabilitas integral dengan fungsi distribusi normal standar. Sementara simulasi dari distribusi normal multivariat dengan matriks kovarians Σ pada dasarnya turun untuk melakukan penjumlahan dari variabel acak normal standar independen, di mana "bobot" matriks A dapat diperoleh dengan dekomposisi Cholesky dari matriks kovarians ΣPΣAΣ .

Oleh karena itu, algoritma untuk mensimulasikan sampel dari Gauss copula dengan matriks korelasi P adalah:nP

  1. Lakukan dekomposisi Cholesky , dan atur APA sebagai matriks segitiga bawah yang dihasilkan.
  2. Ulangi langkah-langkah berikut n kali.
    1. Hasilkan vektor Z=(Z1,,Zd) dari independen variates standar normal.
    2. Set X=AZ
    3. Kembalikan .U=(Φ(X1),,Φ(Xd))


Kode berikut dalam contoh implementasi algoritma ini menggunakan 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)))}))

Bagan berikut menunjukkan data yang dihasilkan dari kode R di atas.

masukkan deskripsi gambar di sini

QuantIbex
sumber
Di mana F dan G muncul setelah itu?
lcrmorin
@Were_cat, apa maksudmu?
QuantIbex
Dalam pertanyaan awal disebutkan F dan G, dua distribusi univariat. Bagaimana Anda beralih dari kopula ke rv dengan margin F dan G?
lcrmorin
U1U2(0,1)Y1Y2FGY1=F1(U1)Y2=G1(U2)F1G1FG
2
@Were_cat, untuk mengutip halaman wikipedia copula : "a copula adalah distribusi probabilitas multivariat yang distribusi probabilitas marjinal dari setiap variabel adalah seragam. Kopula digunakan untuk menggambarkan ketergantungan antara variabel acak."
QuantIbex