私は一連の論文をレビューしました。各論文は、既知のサイズそれぞれのサンプルにおける測定値の観測平均とSDを報告しています。私が設計している新しい研究で同じ測定値の可能性のある分布について可能な限り推測し、その推測にどの程度の不確実性があるかを考えたいと思います。)と仮定してうれしいです。N X 〜N (μ 、σ 2
私の最初の考えはメタ分析でしたが、モデルは通常、ポイント推定と対応する信頼区間に焦点を当てています。ただし、の完全な分布について何か言いたいことがあります。この場合、分散について推測することも含まれます。 σ 2
私は、事前の知識に照らして、特定の分布のパラメーターの完全なセットを推定するための可能なBayeisanアプローチについて読んでいます。これは一般的に私には理にかなっていますが、ベイジアン分析の経験はゼロです。これは、歯を切るのが簡単で比較的単純な問題のようにも思えます。
1)私の問題を考えると、どのアプローチが最も理にかなっており、なぜですか?メタ分析またはベイジアンアプローチ?
2)ベイジアンアプローチが最適だと思う場合、これを実装する方法を教えていただけますか(できればRで)。
編集:
私は、これを「単純な」ベイジアン様式だと思う方法で解決しようとしています。
上で述べたように、私は推定された平均でなく、事前情報、すなわちを考慮した分散にも興味があります。
繰り返しになりますが、実際のベイジアンについては何も知りませんが、平均と分散が未知の正規分布の事後分布は、正規逆ガンマ分布の共役を介した閉形式解を持っていることを見つけるのに時間がかかりませんでした。
問題はとして再定式化されます。
は正規分布で推定されます。逆ガンマ分布の。
それはそれのまわりで私の頭を取得するために私にしばらく時間がかかったが、これらのリンクから(1、2、私はR.でこれを行う方法をソートするために、私が思うに、できました)
33個のスタディ/サンプルそれぞれの行と、平均、分散、サンプルサイズの列から構成されるデータフレームから始めました。事前情報として、1行目の最初の調査の平均、分散、サンプルサイズを使用しました。次に、次の調査の情報でこれを更新し、関連するパラメーターを計算し、正規逆ガンマからサンプリングしておよび分布を取得しました。これは、33の研究すべてが含まれるまで繰り返されます。
# 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)
新しいサンプルが追加されるたびにおよびどのように変化するかを示すパス図を次に示します。
以下は、更新ごとの平均と分散の推定分布からのサンプリングに基づく密度です。
他の人に役立つ場合にだけこれを追加したかったので、知識のある人がこれが理にかなっているか、欠陥があるかなどを教えてくれます