假设 X~exp(.67) , Y~exp(.45) 和 Z~exp(.8) . 现在 X 与 Y 相关,相关系数为-0.6 . 同样, X 与 Z 相关,相关系数为-0.6 . 如何将此相关性合并为生成随机变量 X , Y 和 Z ?我知道如果它们之间没有相关性,那么我可以简单地通过 X <- rexp(n=10, rate=.67) , Y <- rexp(10, .45) 和 Z <- rexp(10, .8) 生成数据 .
X~exp(.67)
Y~exp(.45)
Z~exp(.8)
X
Y
Z
X <- rexp(n=10, rate=.67)
Y <- rexp(10, .45)
Z <- rexp(10, .8)
为此,您可以使用包 mc2d 中的Iman和Conover方法 .
mc2d
首先,创建您的设置 . 我假设Y和Z是不相关的,因为上面没有明确的相关性 . (如果不是,只需相应地更改相关矩阵 . )
library(mc2d) x1 <- rexp(n = 1000, rate = 0.67) x2 <- rexp(n = 1000, rate = 0.45) x3 <- rexp(n = 1000, rate = 0.8) mat <- cbind(x1, x2, x3) corr <- matrix(c(1, -0.6, -0.6, -0.6, 1, 0, -0.6, 0, 1), ncol=3)
我们现在可以测试随机样本的实际相关性......所有这些似乎都是独立的,如预期的那样 .
cor(mat, method="spearman")
......产生:
x1 x2 x3 x1 1.00000000 0.01602557 -0.0493488 x2 0.01602557 1.00000000 0.0124209 x3 -0.04934880 0.01242090 1.0000000
我们现在将Iman和Conover方法应用于数据 .
matc <- cornode(mat, target=corr, result=TRUE)
这样做会产生以下相关性:
Spearman Rank Correlation Post Function x1 x2 x3 x1 1.0000000 -0.59385975 -0.56201396 x2 -0.5938597 1.00000000 -0.04115543 x3 -0.5620140 -0.04115543 1.00000000
最后,通过运行 head(matc) ,我们可以看到修改过的示例的初始行:
head(matc)
x1 x2 x3 [1,] 1.1375395 0.3081750 2.26850817 [2,] 2.9387996 0.4434207 0.08940867 [3,] 1.0918648 0.4175625 2.29498679 [4,] 10.0273879 1.1478072 0.16099230 [5,] 1.5093832 0.4023230 2.57870672 [6,] 0.9474039 2.1134685 0.95268424
1 回答
为此,您可以使用包
mc2d
中的Iman和Conover方法 .首先,创建您的设置 . 我假设Y和Z是不相关的,因为上面没有明确的相关性 . (如果不是,只需相应地更改相关矩阵 . )
我们现在可以测试随机样本的实际相关性......所有这些似乎都是独立的,如预期的那样 .
......产生:
我们现在将Iman和Conover方法应用于数据 .
这样做会产生以下相关性:
最后,通过运行
head(matc)
,我们可以看到修改过的示例的初始行: