假设我有一个向量:
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)
此处继续:相关矩阵的特征值分解
作为解决方案的指针,在 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)
| 归档时间: |
|
| 查看次数: |
5177 次 |
| 最近记录: |