我有一个给定分布的变量(在我的下面例子中是normale)。
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!
答案 0 :(得分:2)
首先创建一个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)
同样,这可以概括。您在上面列出的方法不会创建多变量数据集。