我一直在尝试使用1因子高斯copula模型生成二维相关的拉丁超立方体样本。但是,所得的相关分位数在二维拉丁立方体的每个行列中不一定具有1个采样点。
下面是使用2-d大小写的示例R代码。我已经编写了一个简单的LHS随机数生成器,并且没有为此使用R包,但是我认为这应该没关系。该图显示了不相关(黑点)和相关(红点)样本的二维拉丁方。您可以看到,尽管这似乎是正确的,但相关的样本并没有像在LHS中那样出现在每一行/每一列。
简单的LHS随机数生成器:
rnlhs <- function(n) {
# define strata
brks <- seq(0, 1, length.out=(n + 1))
strata <- data.frame(start=brks[1:n], end=brks[2:(n + 1)])
s <- runif(n, strata$start, strata$end)
# reshuffle
sample(s)
}
rho=0.5; n=10
### Random case
set.seed(9)
q1 <- rnlhs(n)
q2 <- rnlhs(n)
plot(q1, q2, xlim=c(0, 1), ylim=c(0, 1))
abline(h=seq(0, 1, 0.1), v=seq(0, 1, 0.1), col="gray", lty=3)
### Correlated samples (factor model)
q1 <- rnlhs(n)
q2 <- rnlhs(n)
q0 <- rnlhs(n)
X0 <- qnorm(q0, 0, 1)
X1 <- qnorm(q1, 0, 1)
X2 <- qnorm(q2, 0, 1)
Y1 <- sqrt(rho)*X0 + sqrt(1 - rho)*X1
Y2 <- sqrt(rho)*X0 + sqrt(1 - rho)*X2
# correlated quantiles using the normal CDF
q11 <- pnorm(Y1, 0, 1)
q22 <- pnorm(Y2, 0, 1)
points(q11, q22, col="red", pch=16)
由于-例如-q11
,q22
都没有样本,因此不能将所得的相关分位数q11
和q22
真正定义为拉丁超立方体样本点在[0.1,0.2]之内。如何确保在每一行和每一列中都出现一个相关的样本点?