簡體   English   中英

模擬JAGS / r2jags中的數據

[英]Simulate data in JAGS/r2jags

是否有可能將JAGS誤用作從具有已知參數的模型生成數據的工具? 我需要從預定義的模型中采樣數據點,以便進行仿真研究並測試我在R中開發的模型的功能。

不幸的是,該模型有些棘手(帶有AR和VAR組件的分層結構),我無法直接在R中模擬數據。在互聯網上搜索時,我發現了一篇博客文章 ,其中的數據是使用data{}在JAGS中生成的data{}區塊JAGS。 在帖子中,作者隨后直接在JAGS中估算了該模型。 由於我的模型在R中,因此我想將數據不使用model{}塊傳回到R中。 這可能嗎?

最好,贏

沒有特別的理由需要使用數據塊以這種方式生成數據-模型塊可以很容易地以“反向”方式基於固定參數生成數據。 只需將參數指定為JAGS的“數據”,並監視模擬的數據點(並根據需要的數據集運行盡可能多的迭代-可能僅為1!)。

話雖如此,原則上您可以使用數據塊或模型塊(或兩者的組合)來模擬數據,但是您需要具有一個模型塊(即使它是簡單且無關的模型)才能運行JAGS。 例如,以下使用數據塊來模擬一些數據:

txtstring <- '
data{
    for(i in 1:N){
        Simulated[i] ~ dpois(i)
    }
}

model{
    fake <- 0
}
#monitor# Simulated
#data# N
'


library('runjags')

N <- 10
Simulated <- coda::as.mcmc(run.jags(txtstring, sample=1, n.chains=1, summarise=FALSE))
Simulated

唯一真正的區別是,數據塊僅更新一次(在仿真開始時),而模型塊在每次迭代時更新。 在這種情況下,我們只抽取1個樣本,所以沒關系,但是如果您想在同一JAGS運行中生成模擬數據的多個實現,則必須將代碼放入模型塊中。 [數據塊和模型塊之間可能還存在其他差異,但我想不到任何有用的東西]。

請注意,您將以不同的格式將數據從JAGS中取出(單個向量,其名稱給出了被監視數據中任何數組的索引),因此可能需要一些工作才能將其返回到向量/數組的列表中/ R中的任何內容。編輯:除非R2jags為此提供了一些實用程序-我不確定,因為我不使用該軟件包。

使用模型塊運行模擬多個數據集的單個MCMC鏈會存在問題,因為MCMC樣本通常是相關的。 (使用先前的樣本繪制每個后續樣本)。 對於模擬研究,您希望從分布中生成獨立的樣本。 可行的方法是遞歸地使用數據或模型塊,例如在for循環中,這將確保您的樣本獨立。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM