假设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)
生成数据。
答案 0 :(得分:0)
为此,您可以使用软件包mc2d
中的 Iman and Conover方法。
首先,创建您的设置。考虑到上面没有陈述的相关性,我假设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 and 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)
,我们会看到修改后的示例的初始行:
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