结合来自多项研究的信息来估计正态分布数据的均值和方差 - 贝叶斯与元分析方法

机器算法验证 贝叶斯 正态分布 荟萃分析
2022-01-21 00:09:31

我回顾了一组论文,每篇论文都报告了在其各自已知大小的样本 n 中观测到的平均值和测量值的 SD。我想对我正在设计的一项新研究中相同度量的可能分布做出最好的猜测,以及该猜测中有多少不确定性。我很高兴假设 XN(μ,σ2)。

我的第一个想法是元分析,但模型通常采用的重点是点估计和相应的置信区间。但是,我想说一下 X 的完整分布,在这种情况下还包括对方差 σ2 的猜测。

我一直在阅读有关根据先验知识估计给定分布的完整参数集的可能的 Bayeisan 方法。这通常对我来说更有意义,但我对贝叶斯分析的经验为零。这似乎也是一个直截了当、相对简单的问题。

1)鉴于我的问题,哪种方法最有意义,为什么?元分析还是贝叶斯方法?

2)如果您认为贝叶斯方法是最好的,您能否指出一种实现方法(最好在 R 中)?

相关问题

编辑:

我一直在尝试以我认为是“简单”的贝叶斯方式来解决这个问题。

正如我上面所说,我不仅对估计的均值 μ 感兴趣,而且对根据先验信息的方差 σ2 感兴趣,即 P(μ,σ2|Y)

同样,我在实践中对贝叶斯主义一无所知,但很快就发现具有未知均值和方差的正态分布的后验通过conjugacy具有封闭形式的解,具有正态逆伽马分布。

问题被重新表述为 P(μ,σ2|Y)=P(μ|σ2,Y)P(σ2|Y)

P(μ|σ2,Y) 是用正态分布估计的;P(σ2|Y) 具有逆伽马分布。

我花了一段时间才弄清楚它,但是从这些链接(1、2 中,我认为我能够对如何在 R 中执行此操作进行排序。

我从一个数据框开始,该数据框由 33 个研究/样本中的每一个组成的一行,以及均值、方差和样本大小的列组成。我使用第 1 行中第一项研究的均值、方差和样本量作为我的先验信息。然后我用下一个研究的信息更新了这个,计算了相关参数,并从正态逆伽马中采样得到 $\mu$ 和 $\sigma^2$ 的分布。这会重复,直到所有 33 项研究都被包括在内。μ and σ2. This gets repeated until all 33 studies have been included.

# Loop start values values

  i <- 2
  k <- 1

# Results go here

  muL      <- list()  # mean of the estimated mean distribution
  varL     <- list()  # variance of the estimated mean distribution
  nL       <- list()  # sample size
  eVarL    <- list()  # mean of the estimated variance distribution
  distL    <- list()  # sampling 10k times from the mean and variance distributions

# Priors, taken from the study in row 1 of the data frame

  muPrior  <- bayesDf[1, 14]    # Starting mean
  nPrior   <- bayesDf[1, 10]    # Starting sample size
  varPrior <- bayesDf[1, 16]^2  # Starting variance

  for (i in 2:nrow(bayesDf)){

# "New" Data, Sufficient Statistics needed for parameter estimation

    muSamp    <- bayesDf[i, 14]          # mean
    nSamp     <- bayesDf[i, 10]          # sample size
    sumSqSamp <- bayesDf[i, 16]^2*(nSamp-1)  # sum of squares (variance * (n-1))

# Posteriors

    nPost   <- nPrior + nSamp
    muPost  <- (nPrior * muPrior + nSamp * muSamp) / (nPost)  
    sPost   <- (nPrior * varPrior) + 
                sumSqSamp + 
               ((nPrior * nSamp) / (nPost)) * ((muSamp - muPrior)^2)
    varPost <- sPost/nPost
    bPost   <- (nPrior * varPrior) + 
                sumSqSamp + 
               (nPrior * nSamp /  (nPost)) * ((muPrior - muSamp)^2)
# Update 

    muPrior   <- muPost
    nPrior    <- nPost
    varPrior  <- varPost

# Store

    muL[[i]]   <-  muPost
    varL[[i]]  <-  varPost
    nL[[i]]    <-  nPost
    eVarL[[i]] <- (bPost/2) / ((nPost/2) - 1)

# Sample

    muDistL  <- list()  
    varDistL <- list()

    for (j in 1:10000){
      varDistL[[j]] <- 1/rgamma(1, nPost/2, bPost/2)
      v             <- 1/rgamma(1, nPost/2, bPost/2)
      muDistL[[j]]  <- rnorm(1, muPost, v/nPost)
    }

# Store 

    varDist    <- do.call(rbind, varDistL)
    muDist     <- do.call(rbind, muDistL)
    dist       <- as.data.frame(cbind(varDist, muDist))
    distL[[k]] <- dist

# Advance

    k <- k+1 
    i <- i+1

  }

  var     <- do.call(rbind, varL)
  mu      <- do.call(rbind, muL)
  n       <- do.call(rbind, nL)
  eVar    <- do.call(rbind, eVarL)
  normsDf <- as.data.frame(cbind(mu, var, eVar, n)) 
  colnames(seDf) <- c("mu", "var", "evar", "n")
  normsDf$order <- c(1:33)

这是一个路径图,显示了 $E(\mu)$ 和 $E(\sigma^2)$ 在添加每个新样本时如何变化。E(μ) and E(σ2) change as each new sample is added.

在此处输入图像描述

以下是基于每次更新时均值和方差的估计分布的抽样得出的密度。

在此处输入图像描述

在此处输入图像描述

我只是想添加它以防它对其他人有帮助,以便知情人士告诉我这是否明智,有缺陷等。

2个回答

这两种方法(元分析和贝叶斯更新)并没有那么明显。元分析模型实际上通常被构建为贝叶斯模型,因为将证据添加到关于手头现象的先验知识(可能非常模糊)的想法很自然地适用于元分析。描述这种连接的文章是:

蒙大拿州布兰尼克 (2001)。经验贝叶斯荟萃分析对测试验证的影响。应用心理学杂志,86(3),468-480。

(作者使用相关性作为荟萃分析的结果度量,但无论度量如何,原理都是相同的)。

一篇关于元分析贝叶斯方法的更一般的文章是:

Sutton, AJ 和 Abrams, KR (2001)。元分析和证据综合中的贝叶斯方法。医学研究中的统计方法,10(4),277-303。

您似乎所追求的(除了一些综合估计之外)是一个预测/可信度区间,它描述了未来研究中真实结果/效果可能下降的位置。可以从“传统”元分析或贝叶斯元分析模型中获得这样的区间。例如,在以下内容中描述了传统方法:

Riley, RD, Higgins, JP 和 Deeks, JJ (2011)。解释随机效应荟萃分析。英国医学杂志,342,d549。

在贝叶斯模型的背景下(例如,Sutton & Abrams,2001 年的论文中方程 6 所描述的随机效应模型),可以很容易地获得 $\theta_i$ 的后验分布,其中 $\theta_i $ 是第 i 个研究中的真实结果/效果(由于这些模型通常使用 MCMC 进行估计,因此只需在合适的老化期后监控链的 $\theta_i$)。从该后验分布,可以得到可信区间。θi, where θi is the true outcome/effect in the ith study (since these models are typically estimated using MCMC, one just needs to monitor the chain for θi after a suitable burn-in period). From that posterior distribution, one can then obtain the credibility interval.

如果我正确理解了您的问题,那么这与通常的元分析设置不同,因为您不仅要估计共同均值,还要估算共同方差。所以原始数据的采样模型是 $y_{ij} \sim N(\mu, \sigma^2)$ 用于观察 $i = 1,...n_j$ 来自研究 $j = 1,...,千元。如果这是正确的,那么我认为 $\mu$ 的 MLE 只是合并样本均值,即 $$ \hat\mu = \frac{1}{N} \sum_{j=1}^K n_j \ bar{y}_j,\qquad N = \sum_{j=1}^K n_j.$$ $\sigma$ 的 MLE 有点棘手,因为它涉及研究内和研究间方差(单向考虑)方差分析)。但只是汇集样本方差也有效(即,是 $\sigma^2$ 的无偏估计量): $$\tilde\sigma^2 = \frac{1}{N - K}\sum_{j=1} ^K (n_j - 1) s_j^2$$ 如果 $N$ 很大,$K$ 不会太大,并且您使用的是弱先验,yijN(μ,σ2) for observation i=1,...nj from study j=1,...,K. If that is right, then I think the MLE of μ is simply the pooled sample mean, i.e.,

μ^=1Nj=1Knjy¯j,N=j=1Knj.
The MLE for σ is a little trickier because it involves both within- and between-study variance (think one-way ANOVA). But just pooling the sample variances works too (i.e., is an unbiased estimator of σ2):
σ~2=1NKj=1K(nj1)sj2
If N is large, K is not too big, and you are using weak priors, then the Bayesian estimates should be quite similar to these.