Come simulare da una copula gaussiana?


16

Supponiamo che io abbia due distribuzioni marginali univariate, diciamoF eG , che posso simulare. Ora, costruisci la loro distribuzione congiunta usando unacopula gaussiana, indicata conC(F,G;Σ) . Tutti i parametri sono noti.

Esiste un metodo non MCMC per la simulazione da questa copula?


8
Supponendo Σii=1 per i=1,2 , ovviamente: Genera (X,Y)N(0,Σ) . Prendi F1(Φ(X)) e G1(Φ(Y)) . Tutto fatto.
cardinale il

1
R ha anche un pacchetto chiamato "copula", che può simulare la maggior parte delle copule standard.
semibruin,

Risposte:


21

Esiste un metodo molto semplice per simulare dalla copula gaussiana che si basa sulle definizioni della distribuzione normale multivariata e della copula di Gauss.

Inizierò fornendo la definizione e le proprietà richieste della distribuzione normale multivariata, seguita dalla copula gaussiana, quindi fornirò l'algoritmo per simulare dalla copula di Gauss.

Multivariata distribuzione normale
Un vettore casuale ha una distribuzione normale multivariata se X d = μ + A Z , dove Z è un k -dimensionale vettore di variabili casuali normali standard indipendente, μ è un d dimensionale vettore di costanti, e a è un d × k matrice di costanti. La notazione d =X=(X1,,Xd)

X=dμ+AZ,
ZkμdAd×k=ddenota l'uguaglianza nella distribuzione. Quindi, ogni componente di è essenzialmente una somma ponderata di variabili casuali normali standard indipendenti. Dalle proprietà dei vettori medi e delle matrici di covarianza, abbiamo E ( X ) = μ e c o v ( X ) = Σ , con Σ = A A , che porta alla notazione naturale X N d ( μ , Σ )X
E(X)=μcov(X)=ΣΣ=AAXNd(μ,Σ) .

Copula di Gauss
La copula di Gauss è definita implicitamente dalla distribuzione normale multivariata, ovvero la copula di Gauss è la copula associata a una distribuzione normale multivariata. In particolare, dal teorema di Sklar la copula di Gauss è dove Φ

CP(u1,,ud)=ΦP(Φ1(u1),,Φ1(ud)),
Φdenota la funzione di distribuzione normale standard e indica la funzione di distribuzione normale standard multivariata con matrice di correlazione P. Quindi, la copula di Gauss è semplicemente una distribuzione normale multivariata standard in cui la trasformazione integrale di probabilità viene applicata a ciascun margine.ΦP

Algoritmo di simulazione
Alla luce di quanto sopra, un approccio naturale per simulare dalla copula di Gauss è simulare dalla distribuzione normale standard multivariata con una matrice di correlazione appropriata e convertire ciascun margine usando la trasformazione integrale di probabilità con la funzione di distribuzione normale standard. Mentre si simula da una distribuzione normale multivariata con matrice di covarianza Σ si riduce essenzialmente a fare una somma ponderata di variabili casuali normali standard indipendenti, in cui la matrice "peso" A può essere ottenuta dalla decomposizione di Cholesky della matrice di covarianza Σ .PΣUNΣ

Pertanto, un algoritmo per simulare campioni dalla copula di Gauss con matrice di correlazione P è:nP

  1. Esegui una decomposizione Cholesky di e imposta A come matrice triangolare inferiore risultante.PUN
  2. Ripeti i seguenti passaggi volte. n
    1. Genera un vettore di variate normali standard indipendenti.Z=(Z1,,Zd)
    2. Impostare X=AZ
    3. Restituisce .U=(Φ(X1),,Φ(Xd))


Il seguente codice in un'implementazione di esempio di questo algoritmo utilizzando 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)))}))

La seguente tabella mostra i dati risultanti dal codice R sopra.

inserisci qui la descrizione dell'immagine


Dove compaiono F e G dopo quello?
lcrmorin,

@Were_cat, che vuoi dire?
QuantIbex

Nella domanda originale si parla di F e G, due distribuzioni univariate. Come passi dalle copule ai camper con i margini F e G?
Lcrmorin,

U1U2(0,1)Y1Y2FGY1=F1(U1)Y2=G1(U2)F1G1FG

2
@Were_cat, per citare la pagina della copula di wikipedia : "una copula è una distribuzione di probabilità multivariata per la quale la distribuzione di probabilità marginale di ogni variabile è uniforme. Le copule sono usate per descrivere la dipendenza tra variabili casuali".
QuantIbex,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.