首页 > 解决方案 > 如何在 [r] 中诱导两个逆累积概率分布之间的相关性?

问题描述

我想创建一个相关的逆累积分布。目前,例如,我有两个逆分布,如下所示,但想引入例如 -0.5 的相关性。有没有办法可以做到这一点?


library(lognorm)
library(dplyr)

Var_a <- tbl_df(qlnorm(runif(1000), meanlog = 0.0326, sdlog = 0.0288))
var_b <- tbl_df(qlnorm(runif(1000), meanlog = 0.0452, sdlog = 0.0364))

cor(Var_a, var_b)

标签: rcdf

解决方案


如果您有 15 个具有相关矩阵 的变量CC,则可以使用高斯 copula 来获得相关的统一变量,使用 的 Cholesky 分解CC,然后像上面那样反转具有指定边际的变量。(例如,请参见此处)。

nv <- NROW(CC)
num_samples <- 1000
A <- matrix(rnorm(num_samples * nv), ncol = nv)
U <- pnorm(A %*% chol(CC))

如果您的 15 个变量的均值和标准差存储在向量meansstdevs中,您可以这样做:

rv <- sapply(1:nv, function(i) qlnorm(U[,i], meanlog = means[i], sdlog = stdevs[i]))

这些rv是您的模拟变量,具有接近所需的相关结构,您可以使用 进行检查cor(rv)


推荐阅读