我已经实现了一个 stan 层次模型,其中组内的级别 1 是线性模型,科目高斯混合模型内的级别 2。这意味着从级别 1 获得的斜率被级别模型 GMM 用于聚类。当我运行模型时,它存在收敛问题。
警告:pystan:超过最大(平面)参数计数(1000):
跳过 n_eff 和 Rhat 的诊断测试。要运行所有诊断调用 pystan.check_hmc_diagnostics(fit)
WARNING:pystan:2 of 500 迭代以分歧 (0.4 %) 结束。
警告:pystan:尝试使用大于 0.8 的 adapt_delta 运行以消除分歧。
WARNING:pystan:Chain 1: E-BFMI = 0.0611
WARNING:pystan:E-BFMI 低于 0.2 表示您可能需要重新参数化模型
对改进模型有何评论?
multi_level_model = """
data {
int<lower=0> N; // No of observations
int J; // No of subjects
int<lower=1,upper=J> RID[N];
vector[N] x; // Cognitive measure
}
parameters{
real a;
vector[J] b;
real mu_b;
real<lower=0,upper=2> sigma_b;
# Gaussian Parameters for level 2
ordered[2] mu;
real<lower=0> sigma[2];
real<lower=0, upper=1> theta;
}
transformed parameters {
vector[N] y_hat;
for(i in 1:N)
y_hat[i] <- a + x[i] * b[RID[i]];
}
model {
sigma_b ~ normal(0, 1);
b ~ normal (mu_b, sigma_b);
a ~ normal (0, 1);
sigma ~ normal(0, 1);
mu ~ normal(0, 1);
theta ~ beta(5, 5);
for (n in 1:J)
target += log_mix(theta,
normal_lpdf(b[n] | mu[1], sigma[1]),
normal_lpdf(b[n] | mu[2], sigma[2]));
}
"""