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