R:在 r 中创建具有特定相关性的数据集

标签 r random dataset correlation

我如何创建一个包含两列的数据集,这些列彼此具有特定的相关性?我希望能够定义将要创建的值的数量,并指定输出应具有的相关性。

问题类似于这个问题:Generate numbers with specific correlation

答案之一是使用:

out <- mvrnorm(10, mu = c(0,0), Sigma = matrix(c(1,0.56,0.56,1),, ncol = 2), 
                mpirical = TRUE)

产生这样的输出:

            [,1]         [,2]
 [1,] -0.4152618  0.033311146
 [2,]  0.7617759 -0.181852441
 [3,] -1.6393045 -1.054752469
 [4,] -1.7872420 -0.605214425
 [5,]  0.9581152  2.511000955
 [6,]  0.5048160 -0.278329145
 [7,]  0.8656220  0.483521747
 [8,] -0.1385699  0.017395548
 [9,]  0.3261103 -0.932889606
[10,]  0.5639388  0.007808691

与以下相关表cor(out):

     [,1] [,2]
[1,] 1.00 0.56
[2,] 0.56 1.00

但我希望数据集包含更高、没有负数和更远的数字例如:

       x   y
   1   5   5
   2  20  20
   3  30  30
   4 100 100

相关系数为 1:

    x y
  x 1 1
  y 1 1

距离越远,我的意思是“更多”随机且值更大,就像我上面的示例一样。

有没有(简单的)方法来归档类似的东西?

最佳答案

相关性不受基础变量线性变换的影响。因此,获得所需内容的最直接方法可能是:

out <- as.data.frame(mvrnorm(10, mu = c(0,0), 
                     Sigma = matrix(c(1,0.56,0.56,1),, ncol = 2), 
                     empirical = TRUE))

out$V1.s <- (out$V1 - min(out$V1))*1000+10
out$V2.s <- (out$V2 - min(out$V2))*200+30

现在数据框 out 有“移位”的列 V1.sV2.s 是非负的和“大的” .您可以在上面的代码中使用任何您想要的数字,而不是 1000、10、200 和 30。相关性的答案仍然是 0.56。

> cor(out$V1.s, out$V2.s)
[1] 0.56

关于R:在 r 中创建具有特定相关性的数据集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28416897/

相关文章:

c - 两个骰子滚动模拟器

javascript - 如何才能使数组中的值一旦被使用,就不能再次使用,直到数组完成为止?

RSelenium 无法连接到主机 rsDriver()

java - 创建一组均匀分布的随机数

dataset - 在 AWS Quick Sight 中更改视觉对象的数据集

Azure 机器学习工作室 : How to import images dataset?

c# - 使用 Linq 过滤 ComboBox.DataSource?

R:你能指定 reshape /类型转换的可变列的顺序吗?

r - ggplot 中的次要点没有填充

r - 使用 as.data.frame() 在 R 中复制行名称