我想生成由相关矩阵指定的相关变量。
首先我生成相关矩阵:
require(psych)
require(Matrix)
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
}
ind<-lower.tri(cor.table)
cor.table[ind]<-t(cor.table)[ind]
diag(cor.table) <- 1
这个相关矩阵是不一致的,因此,特征值分解是不可能的。为了使其保持一致,我使用了 nearPD:
c<-nearPD(cor.table)
完成此操作后,我将生成相关变量:
fit<-principal(c, nfactors=50,rotate="none")
fit$loadings
loadings<-matrix(fit$loadings[1:50, 1:50],nrow=50,ncol=50,byrow=F)
loadings
cases <- t(replicate(50, rnorm(10)) )
multivar <- loadings %*% cases
T_multivar <- t(multivar)
var<-as.data.frame(T_multivar)
cor(var)
然而,由此产生的相关性与我最初指定的任何东西相去甚远。
是不可能创建这样的相关性还是我做错了什么?
UPDATE
从 Greg Snow 的评论中可以清楚地看出,问题在于我的初始相关矩阵不合理。
那么问题是如何使矩阵合理。目标是:
- 49 个变量中的每一个都应与第一个变量相关 >.5。
- 约 40 个变量应具有 >.8 的高相关性
- 其余约 9 个变量应该彼此具有低或负相关。
这整个要求是不可能的吗?