r - 如何在 [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)
解决方案
如果您有 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 个变量的均值和标准差存储在向量means
和stdevs
中,您可以这样做:
rv <- sapply(1:nv, function(i) qlnorm(U[,i], meanlog = means[i], sdlog = stdevs[i]))
这些rv
是您的模拟变量,具有接近所需的相关结构,您可以使用 进行检查cor(rv)
。
推荐阅读
- android - 如何使用 Volley 在列表视图中显示图像?
- python - 对 Cloudera Manager ApiResource 使用加密密码而不是明文密码
- intellij-idea - 将 chromedriver 设置为在 IntelliJ 内的 Geb 测试中使用的默认值
- python - DREAM - 神经网络不收敛 - 上下损失
- python - pyenv 卸载是否会删除通过 pip 安装的所有软件包?
- android - 在哪里添加菜单以在所有活动中工作
- c++ - 下面的打印树功能为什么不起作用?
- c# - 在 if 子句中验证空查询
- javascript - Javascript如何通过多个分隔符拆分字符串并将它们包含在结果中
- javascript - 如何将模块的所有内容包含在不同的模块中(在 Electron JS 中)