He revisado un conjunto de documentos, cada uno informando la media observada y la DE de una medida de en su muestra respectiva de tamaño conocido, . Quiero hacer la mejor suposición posible sobre la distribución probable de la misma medida en un nuevo estudio que estoy diseñando, y cuánta incertidumbre hay en esa suposición. Estoy feliz de asumir ).
Mi primer pensamiento fue el metanálisis, pero los modelos típicamente empleados se centran en estimaciones puntuales y los intervalos de confianza correspondientes. Sin embargo, quiero decir algo sobre la distribución completa de , que en este caso también incluiría adivinar la varianza, .
He estado leyendo sobre posibles enfoques Bayeisan para estimar el conjunto completo de parámetros de una distribución dada a la luz de los conocimientos previos. Esto generalmente tiene más sentido para mí, pero no tengo experiencia con el análisis bayesiano. Esto también parece un problema sencillo y relativamente simple para cortarme los dientes.
1) Dado mi problema, ¿qué enfoque tiene más sentido y por qué? ¿Metanálisis o enfoque bayesiano?
2) Si cree que el enfoque bayesiano es el mejor, ¿puede indicarme una forma de implementar esto (preferiblemente en R)?
EDICIONES:
He estado tratando de resolver esto en lo que creo que es una manera bayesiana 'simple'.
Como dije anteriormente, no solo estoy interesado en la media estimada, , sino también en la varianza, , a la luz de la información previa, es decir,σ 2 P ( μ , σ 2 | Y )
Nuevamente, no sé nada sobre el bayeianismo en la práctica, pero no tardé mucho en encontrar que la parte posterior de una distribución normal con media y varianza desconocidas tiene una solución de forma cerrada por conjugación , con la distribución gamma inversa normal.
El problema se reformula como .
se estima con una distribución normal; con una distribución gamma inversa.
Me tomó un tiempo entenderlo, pero desde estos enlaces ( 1 , 2 ) pude, creo, ordenar cómo hacer esto en R.
Comencé con un marco de datos compuesto de una fila para cada uno de los 33 estudios / muestras, y columnas para la media, la varianza y el tamaño de la muestra. Utilicé la media, la varianza y el tamaño de la muestra del primer estudio, en la fila 1, como mi información previa. Luego actualicé esto con la información del siguiente estudio, calculé los parámetros relevantes y tomé muestras del gamma inverso normal para obtener la distribución de y . Esto se repite hasta que se hayan incluido los 33 estudios.σ 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)
Aquí hay un diagrama de ruta que muestra cómo cambian y medida que se agrega cada nueva muestra.E ( σ 2 )
Estas son las desnidades basadas en el muestreo de las distribuciones estimadas para la media y la varianza en cada actualización.
Solo quería agregar esto en caso de que sea útil para otra persona, y para que las personas que saben puedan decirme si esto fue sensato, defectuoso, etc.