【问题标题】:Inserting estimates from R to jags将估计值从 R 插入到 jags
【发布时间】:2014-06-19 21:58:09
【问题描述】:

对于我的研究,我需要估计方差,并将这些估计值插入到我在 JAGS 中的 Wishart 分布的比例矩阵(在我的 JAGS 代码中称为 R)中。我使用 R2JAGS(在 Mac 上),我想知道如何使用 R/JAGS 代码做到这一点?我想自动执行此操作,因为我需要运行模拟研究。

所以我得到了以下 R 代码来运行我的模型:

Res.NoCorr <- jags(data, model.file = "LVL_3_MODEL_SD_NoRanEff.bug", parameters = 
c("sigma.mean.mu", "sigma.mean.beta", "sigma.mean.phi"), n.chains = 1, n.iter = itt, 
n.burnin = bi, DIC = FALSE)

Res.NoCorr

Inference for Bugs model at "LVL_3_MODEL_SD_NoRanEff.bug", fit using jags,
 1 chains, each with 1e+05 iterations (first 10000 discarded), n.thin = 90
 n.sims = 1000 iterations saved
                mu.vect sd.vect  2.5%   25%   50%   75% 97.5%
sigma.mean.beta   0.121   0.054 0.021 0.082 0.123 0.160 0.222
sigma.mean.mu     1.345   0.608 0.070 0.955 1.398 1.800 2.386
sigma.mean.phi    0.096   0.014 0.069 0.087 0.095 0.106 0.126

这是我手动插入估计值的 JAGS 代码:

Prec.Mat[1:3, 1:3] ~ dwish(R[,], 3) # prior for precision matrix random effects

est.sd.mu <- 1.345
est.sd.beta <- 0.121
est.sd.phi <- 0.096

est.var.mu <- est.sd.mu * est.sd.mu
est.var.beta <- est.sd.beta * est.sd.beta
est.var.phi <- est.sd.phi * est.sd.phi

variance.estimation.mu <- est.var.mu * 3
variance.estimation.beta <- est.var.beta * 3
variance.estimation.phi <- est.var.phi * 3

R[1,1] <- variance.estimation.mu
R[2,2] <- variance.estimation.beta
R[3,3] <- variance.estimation.phi
R[1,2] <- 0
R[1,3] <- 0
R[2,3] <- 0
R[2,1] <- 0
R[3,1] <- 0
R[3,2] <- 0

所以在这种情况下,我需要编程插入 est.sd.mu、est.sd.beta 和 est.sd.phi 的数字。

【问题讨论】:

    标签: r jags


    【解决方案1】:

    如果您将 JAGS 文件编写为 brew 包模板,您可以执行以下操作:

    est.sd.mu <- <%= Xmu %>
    est.sd.beta <- <%= Xbeta %>
    est.sd.phi <- <%= Xphi %>
    [etc]
    

    然后您使用brew 函数对其进行处理以生成 JAGS 文件,并将 R 变量 XmuXbetaXphi 设置为您要替换的值。

    作为模板使用文本的说明:

    > Xmu=-1.23
    > brew(text="est.sd.mu <- <%= Xmu %>")
    est.sd.mu <- -1.23
    > 
    

    但您应该使用模板文件,使用 file=output= 参数来指定输入模板和输出 JAGS 文件。

    您可以使用paste 在 R 中组装文件的字符版本,然后将其保存为 JAGS 文件,但这只是重复了 brew 的设计用途。

    【讨论】:

    • 我尝试将您的建议与 brew 包一起使用,但它似乎不起作用。我认为这与file=output= 参数有关。这是我的参数之一的 R 代码:brew(text="est.sd.mu &lt;- &lt;%= Xmu %&gt;", file = "LVL_3_Model_SD.bug", output = "res.Corr") 其中 LVL_3_MODEL_SD.bug 是我的整个模型的文件,而 res.Corr 是我希望我的 jags 输出所在的 R 对象。
    • 不,你把 标签放在 LVL_3_Model_SD.bug 文件中,然后执行brew("LVL_3_Model_SD.bug", output="LVL_3_Model_SD-out.bug"),替换将出现在-out.bug 文件中。然后你把它喂给 JAGS。不要使用text=,那只是我创建了一个简单的模板替换示例。
    • 感谢您的快速回复,现在可以使用了!最后一个问题:我收到以下警告,我的问题是我是否可以忽略它(因为它会生成正确的 JAGS 文件):警告消息:在 readLines(icon, 1) 中:在 'LVL_3_Model_SD.错误'
    • 听起来你文件的最后一行没有'return'。转到行尾并按回车键,保存,然后重试。
    猜你喜欢
    • 1970-01-01
    • 2016-07-03
    • 1970-01-01
    • 1970-01-01
    • 2019-06-27
    • 2019-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多