R ve JAGS kullanarak bir meta-analiz için oldukça karmaşık bir hiyerarşik Bayesian modeli oluşturuyorum. Biraz basitleştirmek, modelin iki temel seviyeleri vardır burada olan inci gözlem son nokta (bu durumda, GM vs GM olmayan ekin verimleri) çalışma içinde j , \ alpha_j çalışması için etkisidir j , \ gama ler çeşitli çalışma düzeyindeki değişkenler için etkileri (ülkenin ekonomik gelişme durumu nerede çalışma yapıldı, bitki türleri, çalışma yöntemi, vb.) h fonksiyonlarından oluşan bir aile ve \ epsilonα j = ∑ h γ h ( j ) + ϵ j y i j i j α j j γ h ϵ
Öncelikle s değerlerini tahmin etmekle ilgileniyorum . Bu, çalışma düzeyi değişkenlerinin modelden çıkarılmasının iyi bir seçenek olmadığı anlamına gelir.
Çalışma düzeyi değişkenlerinin bazıları arasında yüksek korelasyon var ve bence bu MCMC zincirlerimde büyük otokorelasyonlar üretiyor. Bu diyagnostik çizim, zincir yörüngelerini (solda) ve ortaya çıkan otokorelasyonu (sağda) gösterir:
Otokorelasyonun bir sonucu olarak, her biri 10.000 numunenin 4 zincirinden 60-120 etkili örnek boyutları elde ediyorum.
Biri nesnel ve diğeri daha öznel olmak üzere iki sorum var.
İnceltme, daha fazla zincir ekleme ve örnekleyiciyi daha uzun süre çalıştırma dışında, bu otokorelasyon sorununu yönetmek için hangi teknikleri kullanabilirim? "Yönetmek" derken "makul bir süre içinde oldukça iyi tahminler üretmek" demek istiyorum. Bilgi işlem gücü açısından, bu modelleri bir MacBook Pro'da çalıştırıyorum.
Bu otokorelasyon derecesi ne kadar ciddidir? Her iki Tartışmalar burada ve John Kruschke blogunda biz sadece yeterince uzun modeli çalıştırırsanız, (Kruschke) "clumpy otokorelasyon muhtemelen tüm dışarı ortalama olmuştur" önerisini ve bu yüzden gerçekten büyük bir anlaşma değil.
Aşağıda, yukarıdaki ayrıntıları oluşturan modelin JAGS kodu, herkesin ayrıntılara girecek kadar ilgilenmesi durumunda:
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)
}
}