나는 각각의 알려진 크기 표본에서 측정의 관측 평균과 SD를보고하는 일련의 논문을 검토했습니다 . 나는 내가 설계하고있는 새로운 연구에서 같은 측정법의 가능한 분포와 그 추측에 얼마나 많은 불확실성이 있는지에 대해 최선의 추측을하고 싶습니다. ) 이라고 가정 합니다.n X ~ N ( μ , σ 2
저의 첫 번째 생각은 메타 분석이었습니다. 그러나 모델은 일반적으로 점 추정치 및 해당 신뢰 구간에 중점을 둡니다. 그러나 의 전체 분포에 대해 말하고 싶습니다 .이 경우 분산에 대한 추측도 포함 됩니다. σ 2
나는 사전 지식에 비추어 주어진 분포의 전체 모수 세트를 추정하기위한 가능한 Bayeisan 접근법에 대해 읽었습니다. 이것은 일반적으로 나에게 더 의미가 있지만 베이지안 분석에 대한 경험이 없습니다. 이것은 또한 치아를 자르는 간단하고 비교적 간단한 문제처럼 보입니다.
1) 내 문제가 주어지면 어떤 접근법이 가장 합리적이며 왜 그럴까요? 메타 분석 또는 베이지안 접근?
2) 베이지안 접근법이 가장 좋다고 생각한다면, 이것을 구현하는 방법을 알려 줄 수 있습니까 (바람직하게는 R에서)?
EDITS :
나는 '단순한'베이지안 방식이라고 생각하는 방식 으로이 작업을 시도했습니다.
위에서 언급했듯이 추정 된 정보 뿐만 아니라 사전 정보, 즉 에 비추어 분산 에 관심이 있습니다.σ 2 P ( μ , σ 2 | Y )
다시 한 번, 베이에 이즘에 대해서는 전혀 알지 못하지만, 평균과 분산이 알려지지 않은 정규 분포의 후부 는 정규-역 감마 분포와 함께 공액 을 통해 닫힌 형태의 솔루션을 가지고 있음을 찾는 데 오래 걸리지 않았습니다 .
문제는 로 재구성됩니다 .
는 정규 분포로 추정됩니다. 역 감마 분포를 갖는 .
내 머리를 가져다 놓는 데 시간이 걸렸지만이 링크 ( 1 , 2 )에서 R 에서이 작업을 수행하는 방법을 정렬 할 수 있다고 생각했습니다.
33 개 연구 / 샘플 각각에 대한 행과 평균, 분산 및 표본 크기에 대한 열로 구성된 데이터 프레임으로 시작했습니다. 첫 번째 연구의 평균, 분산 및 표본 크기를 행 1의 사전 정보로 사용했습니다. 그런 다음 다음 연구의 정보로 이것을 업데이트하고 관련 매개 변수를 계산하고 normal-inverse-gamma에서 샘플링하여 및 의 분포를 얻습니다 . 이것은 33 개의 연구가 모두 포함될 때까지 반복됩니다.σ 2
# 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)
다음은 각각의 새 샘플이 추가 될 때 및 어떻게 변경되는지 보여주는 경로 다이어그램 입니다.
다음은 각 업데이트에서 평균 및 분산에 대한 추정 된 분포에서 샘플링 한 것입니다.
다른 사람에게 도움이되는 경우를 대비 하여이 내용을 추가하고 싶었으므로 알지 못하는 사람들이 이것이 합리적이고 결함이 있는지 등을 알 수 있습니다.