Wie simuliert man eine Gaußsche Kopula?

16

Angenommen, ich habe zwei univariate Randverteilungen, sagen wir und , die ich simulieren kann. Konstruieren Sie nun ihre gemeinsame Verteilung mit einer Gaußschen Kopula , die mit . Alle Parameter sind bekannt.G C ( F , G ; Σ )FGC(F,G;Σ)

Gibt es eine Nicht-MCMC-Methode zum Simulieren von dieser Kopula?

Tilo
quelle
8
Angenommen, Σii=1 für i=1,2 , natürlich: Generiere (X,Y)N(0,Σ) . Nimm F1(Φ(X)) und G1(Φ(Y)) . Alles erledigt.
Kardinal
1
R hat auch ein Paket namens "copula", das die meisten Standard-Copulas simulieren kann.
Semibruin

Antworten:

21

Es gibt eine sehr einfache Methode, um aus der Gaußschen Copula zu simulieren, die auf den Definitionen der multivariaten Normalverteilung und der Gaußschen Copula basiert.

Zunächst werde ich die erforderliche Definition und die Eigenschaften der multivariaten Normalverteilung, gefolgt von der Gaußschen Copula, bereitstellen und dann den Algorithmus zum Simulieren aus der Gaußschen Copula bereitstellen.

Multivariate Normalverteilung
Ein Zufallsvektor hat eine multivariate Normalverteilung, wenn X d = μ + A Z ist , wobei Z ein k- dimensionaler Vektor unabhängiger normaler Zufallsvariablen ist, μ a ist d- dimensionaler Konstantenvektor, und A ist eine d × k- Konstantenmatrix. Die Notation d =X=(X1,,Xd)

X=dμ+AZ,
ZkμdAd×k=dbezeichnet Gleichheit in der Verteilung. Jede Komponente von ist also im Wesentlichen eine gewichtete Summe unabhängiger normaler Standard-Zufallsvariablen. Aus den Eigenschaften der mittleren Vektoren und Kovarianzmatrizen ergibt sich E ( X ) = μ und c o v ( X ) = Σ , wobei Σ = A A , was zur natürlichen Notation X N d ( μ , Σ ) führt .X
E(X)=μcov(X)=ΣΣ=AAXNd(μ,Σ)

Gauß-Copula
Die Gauß-Copula wird implizit aus der multivariaten Normalverteilung definiert, dh die Gauß-Copula ist die Copula, die einer multivariaten Normalverteilung zugeordnet ist. Insbesondere aus Theorem Sklar ist die Gauss - Copula ist wobei die Standardnormalverteilungsfunktion bezeichnet und die multivariate Standardnormalverteilungsfunktion mit der Korrelationsmatrix P bezeichnet. Die Gauß-Kopula ist also einfach eine multivariate Standardnormalverteilung mit der Wahrscheinlichkeitsintegraltransformation wird auf jeden Rand angewendet.Φ Φ P

CP(u1,,ud)=ΦP(Φ-1(u1),,Φ-1(ud)),
ΦΦP

Simulationsalgorithmus
Angesichts des Vorstehenden besteht ein natürlicher Ansatz zum Simulieren aus der Gauß-Kopula darin, aus der multivariaten Standardnormalverteilung mit einer geeigneten Korrelationsmatrix zu simulieren und jeden Rand unter Verwendung der Wahrscheinlichkeitsintegraltransformation mit der Standardnormalverteilungsfunktion umzuwandeln. Bei der Simulation einer multivariaten Normalverteilung mit der Kovarianzmatrix Wesentlichen eine gewichtete Summe unabhängiger normaler Zufallsvariablen berechnet, wobei die "Gewichts" -Matrix durch die Cholesky-Zerlegung der Kovarianzmatrix .Σ A ΣPΣEINΣ

Daher ist ein Algorithmus zum Simulieren von Abtastwerten aus der Gauß-Kopula mit der Korrelationsmatrix :PnP

  1. Führen Sie eine Cholesky-Zerlegung von durch und setzen Sie als resultierende untere Dreiecksmatrix.APEIN
  2. Wiederholen Sie die folgenden Schritte Mal. n
    1. Erzeugen Sie einen Vektor unabhängiger Standardnormalvariablen.Z=(Z1,,Zd)
    2. Setze X=EINZ
    3. Rückgabe .U=(Φ(X1),,Φ(Xd))


Der folgende Code in einer Beispielimplementierung dieses Algorithmus mit 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)))}))

Die folgende Tabelle zeigt die Daten, die sich aus dem obigen R-Code ergeben.

Bildbeschreibung hier eingeben

QuantIbex
quelle
Wo erscheinen danach F und G?
Lcrmorin
@Were_cat, was meinst du?
QuantIbex,
In der ursprünglichen Frage werden F und G erwähnt, zwei univariate Verteilungen. Wie geht man von Copulas zu RV mit F- und G-Rändern?
Lcrmorin
U1U2(0,1)Y.1Y.2FGY.1=F-1(U1)Y.2=G-1(U2)F-1G-1FG
2
@Were_cat, um die Wikipedia- Copula- Seite zu zitieren : "Eine Copula ist eine multivariate Wahrscheinlichkeitsverteilung, für die die marginale Wahrscheinlichkeitsverteilung jeder Variablen einheitlich ist. Copulas werden verwendet, um die Abhängigkeit zwischen Zufallsvariablen zu beschreiben."
QuantIbex