从现有变量创建相关变量

use*_*076 4 r correlation

假设我有一个向量:

Q<-rnorm(10,mean=0,sd=20)
Run Code Online (Sandbox Code Playgroud)

从这个向量我想:

1.创建 10 个变量(a1...a10),每个变量与 Q 的相关性高于 0.5(即介于 0.5 和 1 之间)。

第一部分可以通过以下方式完成:

t1<-sapply(1:10, function(x) jitter(t, factor=100))
Run Code Online (Sandbox Code Playgroud)

2.这些变量中的每一个都(a1...a10)应该具有预先指定的相互关系。例如,一些应该是相关的 0.8 和一些 -.2。

这两件事能做到吗?

我创建了一个相关矩阵:

cor.table <- matrix( sample( c(0.9,-0.9) , 2500 , prob = c( 0.8 , 0.2 ) , repl = TRUE ) , 50 , 50 )
k=1
while (k<=length(cor.table[1,])){
    cor.table[1,k]<-0.55
    k=k+1
    }
k=1
while (k<=length(cor.table[,1])){
    cor.table[k,1]<-0.55
    k=k+1
    }   
    diag(cor.table) <- 1
Run Code Online (Sandbox Code Playgroud)

但是,当我应用@SprengMeister 的优秀解决方案时,出现错误:

Error in eigen(cor.table)$values > 0 : 
  invalid comparison with complex values
Run Code Online (Sandbox Code Playgroud)

此处继续:相关矩阵的特征值分解

top*_*hef 6

作为解决方案的指针,在 R 中使用噪声函数抖动

set.seed(100)
t = rnorm(10,mean=0,sd=20)
t1 = jitter(t, factor = 100)
cor(t,t1)
[1] 0.8719447
Run Code Online (Sandbox Code Playgroud)