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μ + A Z,
ZkμdEINd× 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 .
XE (X) = μc o v (X) = ΣΣ = A A′X∼ Nd( μ , Σ )
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
- Führen Sie eine Cholesky-Zerlegung von durch und setzen Sie als resultierende untere Dreiecksmatrix.APEIN
- Wiederholen Sie die folgenden Schritte Mal.
n
- Erzeugen Sie einen Vektor unabhängiger Standardnormalvariablen.Z= ( Z1, … , Zd)′
- Setze X= A Z
- 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.