0

我正在尝试基于 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) 

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

所以基本上,我想用 sigma tau.a 的 -Fam-(例如 10)人模拟来自 -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,对称 = TRUE,EISPACK = EISPACK):“特征”中的非方阵

谁能给我任何提示或提示我做错了什么?

非常感谢, 最好的问候, inga

4

1 回答 1

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)
于 2014-08-22T11:02:51.570 回答