在分层贝叶斯分析中对组均值进行推断时使用什么级别?

机器算法验证 r 贝叶斯 锯齿 分层贝叶斯
2022-03-18 18:00:07

(这个问题与我的上一个问题有点相关,但这个问题是关于主题比较之间的,而这个问题是专门关于对群体进行推断的意思。)

使用分层贝叶斯模型分析数据时,您有时不想对个体受试者进行推断,而是在群体水平上进行推断(例如,对于 10 岁的女孩,最可信的测试分数是 100,95% 的可信区间为 [75, 125])。在使用 MCMC 框架(例如 JAGS/BUGS)构建这样的模型时,我看到了两种获取组级别平均值的方法。要么我可以使用先验的平均值(下。)采样分布的平均值,或者对于 MCMC 算法的每次迭代,我可以计算所有主题平均值的平均值(这是下图中所有的平均值)。如果我想对组进行推断意味着我应该使用这两种选择中的哪一种?μgrμsubj

作为测试,看看使用这两种不同的替代方案时会发生什么,我用模拟数据运行了一个模型。

这是一个层次模型的Kruschke 样式图我们估计了许多主题.μsubjμsubjμgr

克鲁施克图

这是 JAGS 和 R 代码,用于指定上述模型并模拟 50 个受试者的数据,其中每个受试者获得一个随机正态分布的平均值,其中然后 JAGS 模型运行 5000 次迭代,每次迭代都会保存先验的平均值和计算出的受试者平均值μ=0σ=1group_mumean_mu <- mean(mu[])

library(rjags)
model_string <- "model {
  for(i in 1:length(y)) {
    y[i] ~ dnorm( mu[subject[i]], precision[subject[i]])
  }

  mean_mu <- mean(mu[])
  for(subject_i in 1:n_subject) {
    mu[subject_i] ~ dnorm(group_mu, group_precision) 
    precision[subject_i] <- 1/pow(sigma[subject_i], 2)
    sigma[subject_i] ~ dunif(0, 10)
  }

  group_mu ~ dunif(-10, 10)
  group_precision <- 1/pow(group_sd, 2)
  group_sd ~ dunif(0, 10)
}"

# Creating fake data
n <- 10
n_subject <- 50
subject_mean <- rnorm(n_subject, mean=0, sd=1)
y <- rnorm(n * n_subject, mean=rep(subject_mean, each=n), sd=1)
subject <- rep(1:n_subject, each=n)

# Running the model with JAGS
jags_model <- jags.model(textConnection(model_string),
                         data=list(y=y, subject=subject, n_subject=n_subject), 
                         n.chains= 3, n.adapt= 1000)
update(jags_model, 1000)
jags_samples <- jags.samples(jags_model, 
                             variable.names=c("group_mu", "mean_mu"),
                             n.iter=5000)

查看 和 的分位数和箱mean_mu线图group_mu表明它们都以真实组均值为中心,但它们的分布差异很大,95% 的可信区间比 宽group_mu得多mean_mu

quantile(jags_samples$mean_mu, c(0.025, 0.5, 0.975))
##       2.5%         50%       97.5% 
##  -0.10804263 -0.00741235  0.09216414 
quantile(jags_samples$group_mu, c(0.025, 0.5, 0.975))
##        2.5%          50%        97.5% 
##  -0.262734656 -0.008996673  0.248624938
boxplot(jags_samples, outline=F, horizontal=T)

在此处输入图像描述

因此,如果我想对组进行推断意味着我应该使用哪个分布,group_mu或者mean_mu对我来说,这并不清楚,任何解释为什么一个比另一个更受欢迎的解释都非常感谢!

2个回答

所发生的情况是,个体受试者均值的估计值已向组均值收缩,从而导致了标准差。主体均值的偏差(以及因此主体均值的偏差)“太小”。这种收缩是分层贝叶斯方法的一部分。这些group_mu值是您想要的值。

group_mu如果您直接观察了 50 个真实主题,您可以通过比较从分位数摘要中观察到的 95% 可信区间的宽度与您在经典统计中预期的置信区间的宽度,以更经验的方式看到这些值是正确的方法。在这种情况下,这只是或 +/- 0.28,这与您在上面显示的分位数结果非常对应1.96/50group_mu: (-0.26,+0.25)。如果您实际观察到 50 个主题均值,您将无法做得比您做得更好,因此可信区间不应比置信区间小很多(因为您没有将任何实质性的先验信息添加到可能性。)显然,通过这种比较,替代均值的 (-0.1, 0.09) 分位数太接近 0。

实际上,您可以使用标准的比率。估计的主题均值与标准的偏差。偏差group_mu作为发生多少收缩的指标。(这不是唯一的此类指标;我只是指出它,因为无论如何您都在计算它们。)如果您的比率非常小,则从启发式意义上说,模型的分层部分不是t 增加很多,并假设所有主题均值都相同,这可能是一个合理的选择。相反,如果该比率接近 1,这也表明模型的分层部分并没有增加太多,并且仅对主题均值使用“固定效应”模型可能几乎一样好 - 建模方法等问题。 在旁边。

如果您希望对组级别进行推断,那么您的兴趣分布是p(μgr|Y). 原因很简单μgr实际上是生成模型中的随机变量。Mean_mu 不是您的生成模型中的随机变量,它是您的采样器碰巧生成或您碰巧计算的统计数据。此外, mean_mu 实际上是真实组均值的后验分布的点估计,即您感兴趣的分布。点估计提供的信息少于完整分布,并且您已经拥有完整分布本身(或至少有大量近似它的样本)。