Answers:
有一个非常简单的方法可以从高斯copula进行模拟,该方法基于多元正态分布和Gauss copula的定义。
我将首先提供所需的多元正态分布的定义和属性,然后是高斯copula,然后提供从高斯copula进行仿真的算法。
多元正态分布如果X d = μ + A Z ,则
随机向量具有多元正态分布,
其中Z是独立标准正态随机变量的k维向量,μ为a 常数的d维向量,A是常数的d × k矩阵。记号d =
高斯连接函数
的高斯系词从多元正态分布,即隐含定义的,高斯系动词是具有多元正态分布相关联的连接函数。具体地,从斯克拉定理高斯连接函数是
其中Φ
仿真算法
鉴于上述情况,从高斯系数进行仿真的自然方法是从具有适当相关矩阵的多元标准正态分布进行仿真,并使用具有标准正态分布函数的概率积分变换来转换每个余量。从具有协方差矩阵Σ的多元正态分布进行模拟时,本质上可以得到独立标准正态随机变量的加权和,其中“权重”矩阵A可通过协方差矩阵Σ的Cholesky分解获得。
因此,用相关矩阵P模拟高斯copula的样本的算法是:
以下代码在使用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)))}))
下图显示了以上R代码产生的数据。