私は、RとJAGSを使用したメタ分析のためのやや複雑な階層ベイズモデルを構築しています。ビットを簡略化、モデルの2つの主要なレベルが有する α J = Σ H γ H (J ) + ε J Y I jがあるIこの場合、エンドポイントの目を観察( 、研究における対非GM作物の収量GM)jは、α jは、研究のための効果であるJ、γ
私は主の値を推定することに興味が秒。つまり、モデルからスタディレベルの変数を削除することは適切なオプションではありません。
研究レベルの変数のいくつかの間には高い相関関係があり、これが私のMCMCチェーンで大きな自己相関を生み出していると思います。この診断プロットは、チェーンの軌跡(左)と結果の自己相関(右)を示しています。
自己相関の結果として、それぞれ10,000サンプルの4つのチェーンから60〜120の効果的なサンプルサイズを取得しています。
2つの質問があります。1つは明らかに客観的で、もう1つは主観的です。
間引き、チェーンの追加、サンプラーの実行時間の延長以外に、この自己相関問題を管理するためにどのようなテクニックを使用できますか?「管理」とは、「妥当な時間内に合理的に優れた見積もりを作成する」ことを意味します。計算能力に関しては、私はこれらのモデルをMacBook Proで実行しています。
この程度の自己相関はどの程度深刻ですか?こことJohn Kruschkeのブログの両方での議論は、モデルを十分に長く実行した場合、「だらしない自己相関はおそらくすべて平均化されている」(Kruschke)ことを示唆しているため、それほど大きな問題ではありません。
上記のプロットを作成したモデルのJAGSコードを次に示します。
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)
}
}