【问题标题】:Create normally distributed variables with a defined correlation in R在 R 中创建具有定义相关性的正态分布变量
【发布时间】:2018-01-27 13:47:45
【问题描述】:

我正在尝试在 R 中创建一个数据框,其中包含一组正态分布的变量。首先,我们只创建具有以下变量的数据框:

RootCause <- rnorm(500, 0, 9)
OtherThing <- rnorm(500, 0, 9)
Errors <- rnorm(500, 0, 4)

df <- data.frame(RootCuase, OtherThing, Errors)

在第二部分中,我们被要求重做上述操作,但 RootCause 和 OtherThing 之间的定义相关性为 0.5。我尝试阅读了几页解释 R 中相关命令的文章和文章,但恐怕我很难理解它。

【问题讨论】:

    标签: r statistics


    【解决方案1】:

    简单回答

    绘制另一个随机变量OmittedVar并将其添加到其他变量中:

        n <- 1000
        OmittedVar <- rnorm(n, 0, 9)
        RootCause <- rnorm(n, 0, 9) + OmittedVar
        OtherThing <- rnorm(n, 0, 9) + OmittedVar
        Errors <- rnorm(n, 0, 4)
    
        cor(RootCause, OtherThing)
        [1] 0.4942716
    

    其他答案:使用 MASS 包中的多元正态函数:

    但您必须定义方差/协方差矩阵,以提供您喜欢的相关性(此处为 Sigma 参数):

    d <- MASS::mvrnorm(n = n, mu = c(0, 0), Sigma = matrix(c(9, 4.5, 4.5, 9), nrow = 2, ncol = 2), tol = 1e-6, empirical = FALSE, EISPACK = FALSE)
    cor(d[,1], d[,2])
    [1] 0.5114698
    

    注意:

    获得 0.5 以外的相关性取决于过程;如果您想从0.5 更改它,您将更改详细信息(在第一层中添加1 * OmittedVar 或在第二层中更改Sigma)。但是您必须查找有关正态分布的方差规则的详细信息。

    【讨论】:

    • 有人添加了一条评论,建议您可以通过将 empirical = TRUE 参数添加到 mvrnorm 函数来强制经验相关性恰好为 0.5。否则,经验相关性将是平均值为 0.5 的随机变量(例如,在您的模拟中不完全是 0.5)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-26
    • 2015-07-20
    • 2018-05-08
    • 2019-12-08
    • 2021-10-07
    • 1970-01-01
    • 2015-11-28
    相关资源
    最近更新 更多