回答:
指定された相関構造を持つ多変量正規データを生成するには、分散共分散行列を作成し、chol
関数を使用してそのコレスキー分解を計算する必要があります。目的のvcov行列のコレスキー分解と観測の独立したランダム正規ベクトルとの積により、その分散共分散行列を持つランダム正規データが生成されます。
v <- matrix(c(2,.3,.3,2), 2)
cv <- chol(v)
o <- replicate(1000, {
y <- cv %*% matrix(rnorm(100),2)
v1 <- var(y[1,])
v2 <- var(y[2,])
v3 <- cov(y[1,], y[2,])
return(c(v1,v2,v3))
})
## MCMC means should estimate components of v
rowMeans(o)
rmvnorm()関数を使用します。3つの引数を取ります。分散共分散行列、平均、行数です。
シグマは3 * 5 = 15行と列になります。各変数の観測ごとに1つ。これらの15 ^ 2パラメータを設定する方法はたくさんあります(ar、左右対称、非構造化...)。ただし、特に相関/共分散をゼロに設定する場合、または2つの分散を等しく設定する場合は、このマトリックスに入力して、仮定に注意してください。出発点として、シグママトリックスは次のようになります。
sigma=matrix(c(
#y1 y2 y3
3 ,.5, 0, 0, 0, 0, 0, 0, 0, 0,.5,.2, 0, 0, 0,
.5, 3,.5, 0, 0, 0, 0, 0, 0, 0,.2,.5,.2, 0, 0,
0 ,.5, 3,.5, 0, 0, 0, 0, 0, 0, 0,.2,.5,.2, 0,
0 , 0,.5, 3,.5, 0, 0, 0, 0, 0, 0, 0,.2,.5,.2,
0 , 0, 0,.5, 3, 0, 0, 0, 0, 0, 0, 0, 0,.2,.5,
0 ,0 ,0 ,0 , 0, 3,.5, 0, 0, 0, 0, 0, 0, 0, 0,
0 ,0 ,0 ,0 ,0 ,.5, 3,.5, 0, 0, 0, 0, 0, 0, 0,
0 ,0 ,0 ,0 ,0 ,0 ,.5, 3,.5, 0, 0, 0, 0, 0, 0,
0 ,0 ,0 ,0 ,0 ,0 ,0 ,.5, 3,.5, 0, 0, 0, 0, 0,
0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,.5, 3, 0, 0, 0, 0, 0,
.5,.2,0 ,0 ,0 ,0 ,0 ,0 ,0 , 0, 3,.5, 0, 0, 0,
.2,.5,.2,0 ,0 ,0 ,0 ,0 ,0 ,0 ,.5, 3,.5, 0, 0,
0 ,.2,.5,.2,0 ,0 ,0 ,0 ,0 ,0 ,0 ,.5, 3,.5, 0,
0 ,0 ,.2,.5,.2,0 ,0 ,0 ,0 ,0 ,0 ,0 ,.5, 3,.5,
0 ,0 ,0 ,.2,.5,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,.5, 3
),15,15)
したがって、sigma [1,12]は.2であり、これは、Y1の最初の観測とY3の2番目の観測の間の共分散が.2であり、他のすべての13変数を条件とすることを意味します。対角線はすべて同じ数である必要はありません。これは、私が作成した単純化した仮定です。時々それは理にかなっています、時にはそれはそうではありません。一般に、3番目の観測値と4番目の観測値の相関は、1番目と2番目の観測値の相関と同じであることを意味します。
手段も必要です。それはと同じくらい簡単かもしれません
meanTreat=c(1:5,51:55,101:105)
meanControl=c(1,1,1,1,1,50,50,50,50,50,100,100,100,100,100)
ここで、最初の5つはY1の5つの観測値の平均です...、最後の5つはY3の観測値です
それからあなたのデータの2000の観察を得る:
sampleT=rmvnorm(1000,meanTreat,sigma)
sampleC=rmvnorm(1000,meanControl,sigma)
sample=data.frame(cbind(sampleT,sampleC) )
sample$group=c(rep("Treat",1000),rep("Control",1000) )
colnames(sample)=c("Y11","Y12","Y13","Y14","Y15",
"Y21","Y22","Y23","Y24","Y25",
"Y31","Y32","Y33","Y34","Y35")
ここで、Y11はY1の最初の観測です...、Y15はY1の5番目の観測です...
n <- 3*5; sigma <- diag(1, nrow=n, ncol=n); sigma[rbind(cbind(1:n-1,1:n),cbind(1:n,1:n-1))] <- 1/2
。同様のアプローチで2番目の例が生成されます。ただし、これらには共通の問題があります。各期間中に間の共分散が失われています。これらの行列は反復測定構造を反映していません。