Tôi đang xây dựng một mô hình Bayes phân cấp khá phức tạp để phân tích tổng hợp bằng R và JAGS. Đơn giản hóa một chút, hai cấp độ chính của mô hình có trong đó là quan sát thứ của điểm cuối (trong trường hợp này, năng suất cây trồng biến đổi gen so với cây trồng không biến đổi gen) trong nghiên cứu , là hiệu ứng cho nghiên cứu , là tác động đối với các biến số cấp độ nghiên cứu khác nhau (tình trạng phát triển kinh tế của quốc gia nơi nghiên cứu đã được thực hiện, các loài cây trồng, phương pháp nghiên cứu, v.v.) được lập chỉ mục bởi một họ các chức năng vàα j = Σ h γ h ( j ) + ε j y i j i j α j j γ h ε γ γ γ d e v đ l o p i n g γ d e v e l o p e d
Tôi chủ yếu quan tâm đến việc ước tính các giá trị của . Điều này có nghĩa là bỏ các biến cấp độ nghiên cứu khỏi mô hình không phải là một lựa chọn tốt.
Có mối tương quan cao giữa một số biến cấp độ nghiên cứu và tôi nghĩ rằng điều này đang tạo ra sự tự tương quan lớn trong chuỗi MCMC của tôi. Biểu đồ chẩn đoán này minh họa các quỹ đạo chuỗi (trái) và kết quả tự động tương quan (phải):
Do hậu quả của tự động tương quan, tôi nhận được kích thước mẫu hiệu quả là 60-120 từ 4 chuỗi 10.000 mẫu mỗi loại.
Tôi có hai câu hỏi, một câu hỏi rõ ràng khách quan và câu hỏi còn lại chủ quan hơn.
Ngoài việc làm mỏng, thêm nhiều chuỗi và chạy bộ lấy mẫu lâu hơn, tôi có thể sử dụng những kỹ thuật nào để quản lý vấn đề tự tương quan này? Bằng cách "quản lý", ý tôi là "tạo ra các ước tính hợp lý tốt trong một khoảng thời gian hợp lý." Về khả năng tính toán, tôi đang chạy các model này trên MacBook Pro.
Mức độ nghiêm trọng của sự tự kỷ này nghiêm trọng như thế nào? Các cuộc thảo luận ở đây và trên blog của John Kruschke cho thấy rằng, nếu chúng ta chỉ chạy mô hình đủ lâu, "sự tự kỷ khó hiểu có lẽ đã được tính trung bình" (Kruschke) và vì vậy nó không thực sự là vấn đề lớn.
Đây là mã JAGS cho mô hình đã tạo ra cốt truyện ở trên, trong trường hợp bất kỳ ai cũng đủ quan tâm để lội qua các chi tiết:
model {
for (i in 1:n) {
# Study finding = study effect + noise
# tau = precision (1/variance)
# nu = normality parameter (higher = more Gaussian)
y[i] ~ dt(alpha[study[i]], tau[study[i]], nu)
}
nu <- nu_minus_one + 1
nu_minus_one ~ dexp(1/lambda)
lambda <- 30
# Hyperparameters above study effect
for (j in 1:n_study) {
# Study effect = country-type effect + noise
alpha_hat[j] <- gamma_countr[countr[j]] +
gamma_studytype[studytype[j]] +
gamma_jour[jourtype[j]] +
gamma_industry[industrytype[j]]
alpha[j] ~ dnorm(alpha_hat[j], tau_alpha)
# Study-level variance
tau[j] <- 1/sigmasq[j]
sigmasq[j] ~ dunif(sigmasq_hat[j], sigmasq_hat[j] + pow(sigma_bound, 2))
sigmasq_hat[j] <- eta_countr[countr[j]] +
eta_studytype[studytype[j]] +
eta_jour[jourtype[j]] +
eta_industry[industrytype[j]]
sigma_hat[j] <- sqrt(sigmasq_hat[j])
}
tau_alpha <- 1/pow(sigma_alpha, 2)
sigma_alpha ~ dunif(0, sigma_alpha_bound)
# Priors for country-type effects
# Developing = 1, developed = 2
for (k in 1:2) {
gamma_countr[k] ~ dnorm(gamma_prior_exp, tau_countr[k])
tau_countr[k] <- 1/pow(sigma_countr[k], 2)
sigma_countr[k] ~ dunif(0, gamma_sigma_bound)
eta_countr[k] ~ dunif(0, eta_bound)
}
# Priors for study-type effects
# Farmer survey = 1, field trial = 2
for (k in 1:2) {
gamma_studytype[k] ~ dnorm(gamma_prior_exp, tau_studytype[k])
tau_studytype[k] <- 1/pow(sigma_studytype[k], 2)
sigma_studytype[k] ~ dunif(0, gamma_sigma_bound)
eta_studytype[k] ~ dunif(0, eta_bound)
}
# Priors for journal effects
# Note journal published = 1, journal published = 2
for (k in 1:2) {
gamma_jour[k] ~ dnorm(gamma_prior_exp, tau_jourtype[k])
tau_jourtype[k] <- 1/pow(sigma_jourtype[k], 2)
sigma_jourtype[k] ~ dunif(0, gamma_sigma_bound)
eta_jour[k] ~ dunif(0, eta_bound)
}
# Priors for industry funding effects
for (k in 1:2) {
gamma_industry[k] ~ dnorm(gamma_prior_exp, tau_industrytype[k])
tau_industrytype[k] <- 1/pow(sigma_industrytype[k], 2)
sigma_industrytype[k] ~ dunif(0, gamma_sigma_bound)
eta_industry[k] ~ dunif(0, eta_bound)
}
}