2

我有一个具有给定分布的变量(在下面的示例中为正态)。

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!

4

1 回答 1

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)

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

于 2013-06-11T17:13:20.680 回答