นี่เป็นวิธีหนึ่งในระบบอัตโนมัติ ข้อเสนอแนะชื่นชมมาก นี่คือความพยายามที่จะแทนที่การตรวจสอบด้วยภาพครั้งแรกด้วยการคำนวณตามด้วยการตรวจสอบด้วยสายตาที่ตามมาเพื่อให้สอดคล้องกับมาตรฐานการปฏิบัติ
โซลูชันนี้รวมสองโซลูชันที่เป็นไปได้ก่อนอื่นคำนวณการเบิร์นอินเพื่อลบความยาวของโซ่ก่อนถึงขีด จำกัด บางส่วนจากนั้นใช้เมทริกซ์
- คำนวณเวกเตอร์ของค่ามัธยฐานสูงสุดของเจลแมน - รูบินคอนเวอร์เจนซ์การวินิจฉัยการย่อส่วน (grsf) สำหรับตัวแปรทั้งหมดใน
- ค้นหาจำนวนตัวอย่างขั้นต่ำที่ grsf ในทุกตัวแปรต่ำกว่าขีด จำกัด บางตัวอย่างเช่น 1.1 ในตัวอย่างอาจต่ำกว่าในทางปฏิบัติ
- ย่อยตัวอย่างเชนจากจุดนี้ไปยังจุดสิ้นสุดของเชน
- ทำให้โซ่บางโดยใช้ความสัมพันธ์อัตโนมัติของโซ่ที่สัมพันธ์กันมากที่สุด
- ยืนยันคอนเวอร์เจนซ์ด้วยการติดตาม, การหาค่าอัตโนมัติและแปลงความหนาแน่น
วัตถุ mcmc สามารถดาวน์โหลดได้ที่นี่: jags.out.Rdata
# jags.out is the mcmc.object with m variables
library(coda)
load('jags.out.Rdata')
# 1. calculate max.gd.vec,
# max.gd.vec is a vector of the maximum shrink factor
max.gd.vec <- apply(gelman.plot(jags.out)$shrink[, ,'median'], 1, max)
# 2. will use window() to subsample the jags.out mcmc.object
# 3. start window at min(where max.gd.vec < 1.1, 100)
window.start <- max(100, min(as.numeric(names(which(max.gd.vec - 1.1 < 0)))))
jags.out.trunc <- window(jags.out, start = window.start)
# 4. calculate thinning interval
# thin.int is the chain thin interval
# step is very slow
# 4.1 find n most autocorrelated variables
n = min(3, ncol(acm))
acm <- autocorr.diag(jags.out.trunc)
acm.subset <- colnames(acm)[rank(-colSums(acm))][1:n]
jags.out.subset <- jags.out.trunc[,acm.subset]
# 4.2 calculate the thinning interval
# ac.int is the time step interval for autocorrelation matrix
ac.int <- 500 #set high to reduce computation time
thin.int <- max(apply(acm2 < 0, 2, function(x) match(T,x)) * ac.int, 50)
# 4.3 thin the chain
jags.out.thin <- window(jags.out.trunc, thin = thin.int)
# 5. plots for visual diagnostics
plot(jags.out.thin)
autocorr.plot(jags.win.out.thin)
--update--
เมื่อนำมาใช้ใน R การคำนวณของเมทริกซ์ autocorrelation ช้ากว่าที่ต้องการ (> 15 นาทีในบางกรณี) ในระดับที่น้อยกว่าดังนั้นการคำนวณของ GR shrink factor มีคำถามเกี่ยวกับวิธีเพิ่มความเร็วขั้นตอนที่ 4 ใน stackoverflow ที่นี่
- ปรับปรุงส่วนที่ 2--
คำตอบเพิ่มเติม:
มันเป็นไปไม่ได้ที่จะวินิจฉัยการบรรจบกันเพียงเพื่อวินิจฉัยการขาดการบรรจบกัน(Brooks, Giudici และ Philippe, 2003)
ฟังก์ชั่น autorun.jags จากแพ็คเกจrunjags ทำการคำนวณระยะเวลาในการรันและการวินิจฉัยการลู่เข้าแบบอัตโนมัติ มันไม่ได้เริ่มตรวจสอบห่วงโซ่จนกว่าการวินิจฉัย Rubman ของ Gelman จะต่ำกว่า 1.05; มันคำนวณความยาวโซ่โดยใช้การวินิจฉัยของ Raftery และ Lewis
Gelman และคณะ (การวิเคราะห์ข้อมูล Bayesian 2004, 295, Gelman และ Shirley, 2010 ) ระบุว่าพวกเขาใช้วิธีอนุรักษ์นิยมในการทิ้งช่วงครึ่งแรกของห่วงโซ่ แม้ว่าจะเป็นวิธีแก้ปัญหาที่ค่อนข้างง่าย แต่ในทางปฏิบัติมันก็เพียงพอที่จะแก้ปัญหาสำหรับชุดรูปแบบและข้อมูลเฉพาะของฉัน
#code for answer 3
chain.length <- summary(jags.out)$end
jags.out.trunc <- window(jags.out, start = chain.length / 2)
# thin based on autocorrelation if < 50, otherwise ignore
acm <- autocorr.diag(jags.out.trunc, lags = c(1, 5, 10, 15, 25))
# require visual inspection, check acceptance rate
if (acm == 50) stop('check acceptance rate, inspect diagnostic figures')
thin.int <- min(apply(acm2 < 0, 2, function(x) match(TRUE, x)), 50)
jags.out.thin <- window(jags.out.trunc, thin = thin.int)