Ho esaminato una serie di documenti, ciascuno dei quali riportava la media osservata e la DS di una misurazione di nel rispettivo campione di dimensioni note, . Voglio fare la migliore ipotesi possibile sulla probabile distribuzione della stessa misura in un nuovo studio che sto progettando e su quanta incertezza ci sia. Sono felice di assumere ).n X ∼ N ( μ , σ 2
Il mio primo pensiero era la meta-analisi, ma i modelli in genere impiegavano concentrarsi su stime puntuali e intervalli di confidenza corrispondenti. Tuttavia, voglio dire qualcosa sulla distribuzione completa di , che in questo caso includerebbe anche un'ipotesi sulla varianza, . σ 2
Ho letto dei possibili approcci di Bayeisan per stimare l'insieme completo di parametri di una data distribuzione alla luce delle conoscenze precedenti. Questo in genere ha più senso per me, ma non ho esperienza con l'analisi bayesiana. Anche questo sembra un problema semplice e relativamente semplice da tagliare.
1) Dato il mio problema, quale approccio ha più senso e perché? Meta-analisi o approccio bayesiano?
2) Se pensi che l'approccio bayesiano sia il migliore, puoi indicarmi un modo per implementarlo (preferibilmente in R)?
Modifiche:
Ho cercato di risolverlo in quello che penso sia un modo "semplice" bayesiano.
Come ho detto sopra, non sono solo interessato alla media stimata, , ma anche alla varianza, , alla luce delle informazioni precedenti, ovveroσ 2 P ( μ , σ 2 | Y )
Ancora una volta, non so nulla del bayeismo nella pratica, ma non ci volle molto per scoprire che il posteriore di una distribuzione normale con media e varianza sconosciute ha una soluzione in forma chiusa tramite coniugazione , con la distribuzione gamma normale inversa.
Il problema viene riformulato come .
è stimato con una distribuzione normale; con una distribuzione gamma inversa.
Mi ci è voluto un po 'per capovolgerlo, ma da questi collegamenti ( 1 , 2 ) sono stato in grado, credo, di ordinare come farlo in R.
Ho iniziato con un frame di dati composto da una riga per ciascuno dei 33 studi / campioni e colonne per la media, la varianza e la dimensione del campione. Ho usato la media, la varianza e la dimensione del campione dal primo studio, nella riga 1, come mia precedente informazione. Ho quindi aggiornato questo con le informazioni del prossimo studio, calcolato i parametri pertinenti e campionato dalla gamma normale-inversa per ottenere la distribuzione di e . Questo si ripete fino a quando non sono stati inclusi tutti e 33 gli studi.σ 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)
Ecco un diagramma del percorso che mostra come ed cambiano quando viene aggiunto ogni nuovo campione.
Ecco le differenze basate sul campionamento dalle distribuzioni stimate per la media e la varianza ad ogni aggiornamento.
Volevo solo aggiungere questo nel caso in cui fosse utile per qualcun altro, e in modo che le persone inesperte possano dirmi se questo era ragionevole, imperfetto, ecc.