Tôi đã xem xét một tập hợp các bài báo, mỗi báo cáo về giá trị trung bình và SD quan sát được của phép đo trong mẫu tương ứng có kích thước đã biết, . Tôi muốn đưa ra dự đoán tốt nhất có thể về sự phân phối có khả năng của cùng một biện pháp trong một nghiên cứu mới mà tôi đang thiết kế, và có bao nhiêu sự không chắc chắn trong dự đoán đó. Tôi rất vui khi giả sử ).n X ~ N ( μ , σ 2
Suy nghĩ đầu tiên của tôi là phân tích tổng hợp, nhưng các mô hình thường sử dụng tập trung vào ước tính điểm và khoảng tin cậy tương ứng. Tuy nhiên, tôi muốn nói điều gì đó về phân phối đầy đủ của , trong trường hợp này cũng bao gồm cả việc đoán về phương sai, . σ 2
Tôi đã đọc về các cách tiếp cận Bayeisan có thể để ước tính tập hợp đầy đủ các tham số của một phân phối nhất định theo kiến thức trước. Điều này thường có ý nghĩa hơn đối với tôi, nhưng tôi không có kinh nghiệm với phân tích Bayes. Đây cũng có vẻ là một vấn đề đơn giản, tương đối đơn giản để cắt răng của tôi.
1) Với vấn đề của tôi, cách tiếp cận nào có ý nghĩa nhất và tại sao? Phân tích tổng hợp hoặc một cách tiếp cận Bayes?
2) Nếu bạn nghĩ cách tiếp cận Bayes là tốt nhất, bạn có thể chỉ cho tôi cách để thực hiện điều này (tốt nhất là trong R) không?
CHỈNH SỬA:
Tôi đã cố gắng thực hiện điều này theo cách mà tôi nghĩ là một cách Bayes 'đơn giản'.
Như tôi đã nói ở trên, tôi không chỉ quan tâm đến giá trị trung bình, ước tính , mà còn là phương sai, , trong ánh sáng của thông tin trước đó, tức làσ 2 P ( μ , σ 2 | Y )
Một lần nữa, tôi không biết gì về chủ nghĩa Baye trong thực tế, nhưng không mất nhiều thời gian để thấy rằng phần sau của phân phối bình thường với trung bình không xác định và phương sai có một giải pháp dạng kín thông qua liên hợp , với phân phối gamma nghịch đảo bình thường.
Vấn đề được định dạng lại là .
được ước tính với phân phối bình thường; với phân phối nghịch đảo gamma.
Tôi phải mất một lúc để quay đầu lại, nhưng từ những liên kết này ( 1 , 2 ) tôi đã có thể, tôi nghĩ, để sắp xếp làm thế nào để làm điều này trong R.
Tôi bắt đầu với một khung dữ liệu được tạo thành từ một hàng cho mỗi 33 nghiên cứu / mẫu và các cột cho giá trị trung bình, phương sai và cỡ mẫu. Tôi đã sử dụng giá trị trung bình, phương sai và cỡ mẫu từ nghiên cứu đầu tiên, ở hàng 1, làm thông tin trước đó của tôi. Sau đó, tôi đã cập nhật thông tin này từ nghiên cứu tiếp theo, tính toán các tham số có liên quan và lấy mẫu từ gamma nghịch đảo bình thường để có được phân phối và . Điều này được lặp lại cho đến khi tất cả 33 nghiên cứu đã được đưa vào.σ 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)
Dưới đây là sơ đồ đường dẫn cho thấy và thay đổi như thế nào khi mỗi mẫu mới được thêm vào.E ( σ 2 )
Dưới đây là các giá trị dựa trên việc lấy mẫu từ các bản phân phối ước tính cho giá trị trung bình và phương sai tại mỗi bản cập nhật.
Tôi chỉ muốn thêm cái này trong trường hợp nó hữu ích cho người khác, và để những người hiểu biết có thể cho tôi biết liệu điều này có hợp lý, thiếu sót, v.v.