gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 15:44:04 25 4
gpt4 key购买 nike

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

问题类似于这个问题: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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com