R:构造相关变量

时间:2013-06-11 14:46:29

标签: r correlation linear pearson

我有一个给定分布的变量(在我的下面例子中是normale)。

set.seed(32)    
var1 = rnorm(100,mean=0,sd=1)

我想创建一个与var1相关的变量(var2),其线性相关系数(粗略或精确)等于“Corr”。 var1和var2之间的回归斜率应该(粗略或精确)等于1.

Corr = 0.3

我如何实现这一目标?

我想做这样的事情:

decorelation = rnorm(100,mean=0,sd=1-Corr)
var2 = var1 + decorelation

但当然在跑步时:

cor(var1,var2)

,结果不接近Corr!

1 个答案:

答案 0 :(得分:2)

我刚刚做了类似的事情。我粘贴了一些用于3个相关变量的代码,但它可以很容易地推广到更复杂的东西。

首先创建一个F矩阵:

cor_Matrix <-  matrix(c (1.00, 0.90, 0.20 ,
                     0.90, 1.00, 0.40 ,
                     0.20, 0.40, 1.00), 
                  nrow=3,ncol=3,byrow=TRUE)

这可以是任意相关矩阵。

library(psych) 

fit<-principal(cor_Matrix, nfactors=3, rotate="none")

fit$loadings

loadings<-matrix(fit$loadings[1:3, 1:3],nrow=3,ncol=3,byrow=F)
loadings

#create three rannor variable

cases <- t(replicate(3, rnorm(3000)) ) #edited, changed to 3000 cases from 150 cases

multivar <- loadings %*% cases
T_multivar <- t(multivar)

var<-as.data.frame(T_multivar)

cor(var)

同样,这可以概括。您在上面列出的方法不会创建多变量数据集。