首页 文章

通过结合两个随机变量之间的相关性,从指数分布生成数据

提问于
浏览
5

假设 X~exp(.67)Y~exp(.45)Z~exp(.8) . 现在 XY 相关,相关系数为-0.6 . 同样, XZ 相关,相关系数为-0.6 . 如何将此相关性合并为生成随机变量 XYZ ?我知道如果它们之间没有相关性,那么我可以简单地通过 X <- rexp(n=10, rate=.67)Y <- rexp(10, .45)Z <- rexp(10, .8) 生成数据 .

1 回答

  • 0

    为此,您可以使用包 mc2d 中的Iman和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和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
    

相关问题