首页 文章

R:构造相关变量

提问于
浏览
2

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

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

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

Corr = 0.3

How can I achieve this ?

我想做这样的事情:

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

但当然在跑步时:

cor(var1,var2)

,结果不接近Corr!

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)
    

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

相关问题