基于Winbugs / JAGS脚本模拟R中多变量分布的数据

时间:2014-08-22 09:31:35

标签: r simulation multivariate-testing

我正在尝试基于JAGS / Winbugs脚本的一部分来模拟数据。该剧本来自Eaves& Erkanli(2003,见http://psych.colorado.edu/~carey/pdffiles/mcmc_eaves.pdf,第295-296页)。

我希望以我的模拟为基础的脚本(部分)如下(不同于原始论文中的变量名称):

 for(fam in 1 : nmz ){
    a2mz[fam, 1:N] ~ dmnorm(mu[1:N], tau.a[1:N, 1:N])
    a1mz[fam, 1:N] ~ dmnorm(a2mz[fam, 1:N], tau.a[1:N, 1:N])
 }

 #Prior
 tau.a[1:N, 1:N] ~ dwish(omega.g[,], N) 

我想在R中模拟上面脚本中给出的参数a2mz和a1mz中的数据。

所以基本上,我想用-sam-(例如10)具有sigma tau.a的人来模拟-N-(例如= 3)多变量分布的数据。

使这更具说明性:目的是模拟-fam-(例如10)家族的遗传效应。每个家族(例如同卵双胞胎)的遗传效应相同,方差为tau.a(例如0.5)。在这些遗传效应中,3'版本' (3个多变量分布)必须进行模拟。

我在R中尝试模拟JAGS / Winbugs脚本中给出的数据如下:

 library(MASS)
 nmz = 10 #number of families, here e.g. 10
 var_a = 0.5 #tau.g in the script

 a2_mz <- mvrnorm(3, mu = rep(0, nmz), Sigma = diag(nmz)*var_a)

这模拟了上面JAGS / Winbugs脚本中提到的a2mz参数的数据:

 > print(t(a2_mz))
        [,1]       [,2]        [,3]
  [1,] -1.1563683 -0.4478091 -0.15037563
  [2,]  0.5673873 -0.7052487  0.44377336
  [3,]  0.2560446  0.9901964 -0.65463341
  [4,] -0.8366952  0.4924839 -0.56891991
  [5,]  0.7343780  0.5429955  0.87529201
  [6,]  0.5592868 -0.3899988 -0.33709105
  [7,] -1.8233663 -0.7149141 -0.18153049
  [8,] -0.8213804 -1.4397075 -0.09159725
  [9,] -0.7002797 -0.3996970 -0.29142215
  [10,]  1.1084067  0.3884869 -0.46207940 

然而,当我尝试使用这些数据来模拟a1mz(JAGS / Winbugs的第三行)脚本的数据时,出现了问题,我不确定是什么:

 a1_mz <- mvrnorm(3, mu = t(a2_mz), Sigma = c(diag(nmz)*var_a, diag(nmz)*var_a,     diag(nmz)*var_a))

这会导致错误: 特征误差(Sigma,symmetric = TRUE,EISPACK = EISPACK):   非特征矩阵在&#39; eigen&#39;

任何人都可以给我任何有关我做错的提示或提示吗?

非常感谢, 最好的祝福, inga

1 个答案:

答案 0 :(得分:0)

mvrnorm()采用均值向量和方差矩阵作为输入,而这不是你要提供的。我不确定我理解你的问题,但是如果你想模拟来自3个不同的多元正态分布的3个样本,它们具有相同的方差和不同的均值。然后使用:

a1_mz<-array(dim=c(dim(a2_mz),3))
for(i in 1:3)  a1_mz[,,i]<-mvrnorm(3,t(a2_mz)[,i],diag(nmz)*var_a)