2

特定の分布を持つ変数があります(以下の例ではノーマル)。

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

「Corr」に等しい線形相関係数 (ほぼまたは正確) で var1 に相関する変数 (var2) を作成したいと考えています。var1 と var2 の間の回帰の傾きは、(おおよそまたは正確に) 1 に等しくなければなりません。

Corr = 0.3

どうすればこれを達成できますか?

私はこのようなことをしたかった:

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

もちろん、実行中は:

cor(var1,var2)

結果は Corr に近くありません!

4

1 に答える 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)

繰り返しますが、これは一般化できます。上記のアプローチでは、多変量データセットは作成されません。

于 2013-06-11T17:13:20.680 に答える