2016-08-01 131 views
0

我感到很困惑,在V形凹口下面的語法,例如,如何解釋jags中的某些語法(n.adapt,update ..)?

n.iter=100,000 
thin=100 
n.adapt=100 
update(model,1000,progress.bar = "none") 

目前我認爲

n.adapt=100意味着您將第一個100平的老化,

n.iter=100,000指MCMC鏈有100,000次迭代,包括老化,

我已經檢查了這個問題的很多時間的解釋,但仍然不確定我的解釋約n.itern.adapt是否正確以及如何理解update()thinning

任何人都可以向我解釋?

+0

@colin嗨,對此有何想法? – user5802211

+0

請不要貪婪與您的標籤。這似乎與'r'無關,與代碼編輯器'RStudio'無關。 – Gregor

+0

@Gregor它涉及到Rstudio。它只是R的一個包裝 – user5802211

回答

2

此答案基於包rjags,它採用n.adapt參數。首先我會討論適應,老化和細化的意義,然後我會討論它的語法(我覺得你很清楚老化和細化的含義,但不適應;適當的解釋可能會讓這個答案對未來的讀者更有用)。

正如你可能從介紹到MCMC抽樣瞭解,從MCMC鏈迭代的一些數必須被丟棄燒傷項。這是因爲在擬合模型之前,您不知道是否已初始化特徵集內的MCMC鏈,即合理後驗概率的區域。在該區域之外初始化的鏈需要有限的(有時很大的)迭代次數來找到該區域並開始探索它。這段時間的MCMC樣本不是隨機抽取後驗分佈。因此,將每個MCMC鏈的第一部分丟棄爲「老化」是標準的。有幾種事後技術可以確定有多少鏈必須被丟棄。

減薄 一個單獨的問題的產生是因爲在所有但最簡單的模型,MCMC採樣算法產生鏈,其中連續的平基本上自相關。因此,總結基於MCMC鏈的所有迭代(後燒錄)的後驗可能是不可取的,因爲有效的後驗樣本大小可能比分析師認識的要小得多(注意,STAN實現哈密頓蒙特卡洛採樣顯着降低在某些情況下這個問題)。因此,對「稀化」鏈進行推斷是標準的,其中在推斷中僅使用MCMC迭代的一部分(例如,取決於自相關的嚴重程度,只進行每第五次,第十次或第100次迭代)。

適應 JAGS用於採樣後驗的MCMC採樣器受影響其精確行爲的可調參數的控制。對這些參數進行適當的調整可以提高採樣的速度或去相關性。 JAGS包含自動調整這些參數的機器,並且可以繪製後面的樣本。這個過程被稱爲改編,但它是非馬爾可夫;所得到的樣本不構成馬爾可夫鏈。因此,必須在適應後分別執行。用適應期替代老化是不正確的。但是,有時候只有相對較短的老化纔是適應後的必要條件。

語法 讓我們來看一個非常具體的例子(在OP代碼實際上並沒有表現出在那裏同樣n.adaptthin參數習慣)。我們會要求rjags以這樣一種方式適合模型,即每一步都將清晰。

n.chains = 3 
n.adapt = 1000 
n.burn = 10000 
n.iter = 20000 
thin = 50 
my.model <- jags.model(mymodel.txt, data=X, inits=Y, n.adapt=n.adapt) # X is a list pointing JAGS to where the data are, Y is a vector or function giving initial values 
update(my.model, n.burn) 
my.samples <- coda.samples(my.model, params, n.iter=n.iter, thin=thin) # params is a list of parameters for which to set trace monitors (i.e. we want posterior inference on these parameters) 

jags.model()構建有向非循環圖,然後爲一些由n.adapt給定的迭代執行適應階段。 update()通過運行MCMC進行n.burn迭代而不保存任何後驗樣本(如果要檢查完整鏈並放棄事後預燒期,請跳過此步驟),從而在每個鏈上執行預燒。 coda.samples()(來自尾聲包)運行每個MCMC鏈的迭代次數由n.iter,指定,但不保存每次迭代。相反,它只保存第n次迭代,其中n由thin給出。再次,如果您想要確定事後細化間隔,則在此階段不需要進行細化。在這個階段進行細化的一個優點是,尾聲語法使得它很容易實現;您不必瞭解由coda.samples()返回的MCMC對象的結構,並自行減少它。如果n.iter非常大,則在此階段實現更薄的更大優勢。例如,如果自相關非常糟糕,那麼可能會運行200萬次迭代並僅保存每千次(thin=1000)。如果你在這個階段沒有瘦身,你(和你的RAM)就需要操作一個物體,每個物體有三個兩百萬個數字的鏈。但是隨着時間的推移,最終的對象在每個鏈上只有2千個數字。

+0

非常感謝! – user5802211