Verificação preditiva posterior após inferência ABC para vários parâmetros

8

Eu sou relativamente novo nas estatísticas bayesianas, por isso seja gentil.

Acabei de realizar a Computação Bayesiana Aproximada (ABC) para a inferência de um modelo multiparâmetros. Agora, estou procurando executar uma verificação preditiva posterior dos parâmetros que foram inferidos.

O que eu quero saber é que, quando amostrar a partir do posterior para gerar as estatísticas resumidas para a verificação preditiva posterior, eu amostrarei independentemente dos posteriores marginais para cada parâmetro, ou devo amostrar os valores dos parâmetros em conjunto (por exemplo, amostra das combinações exatas de parâmetros que deram origem às estatísticas de resumo aceitas).

O modelo contém muitos parâmetros (acima de 6) e estou interessado nos posteriores marginais de cada parâmetro. Espero que essa pergunta faça sentido.

David
fonte

Respostas:

8

Ótima pergunta para um iniciante !!!

Seu algoritmo ABC fornece uma amostra da distribuição posterior ABC. Para cada componente do vetor , você obtém uma amostra do tamanho do marginal ABC-posterior. Por exemplo, aqui está um exemplo de brinquedo sobre a média normal da variância posterior, ao usar mediana e mad como resumos:θ1,,θMθM

#normal data with 100 observations 
x=rnorm(100)
#observed summaries
sumx=c(median(x),mad(x))

#normal x gamma prior
priori=function(N){
  return(cbind(rnorm(N,sd=10),1/sqrt(rgamma(N,shape=2,scale=5))))
  }

ABC=function(N){

  prior=priori(N)  #reference table

  #pseudo-data
  summ=matrix(0,N,2)
  for (i in 1:N){
    xi=rnorm(100)*prior[i,2]+prior[i,1]
    summ[i,]=c(median(xi),mad(xi)) #summaries
    }

  #normalisation factor for the distance
  mads=c(mad(summ[,1]),mad(summ[,2]))

  #distance
  dist=(abs(sumx[1]-summ[,1])/mads[1])+(abs(sumx[2]-summ[,2])/mads[2])

  #selection
  posterior=prior[dist<quantile(dist,.05),]

  return(posterior)
  }

Se você planejar

res=ABC(10^5);hist(res[,1])

você receberá o ABC-posterior marginal para a média normal.

No entanto, se você quiser fazer uma verificação preditiva posterior, não poderá gerar um componente de sua posterior por vez para obter pseudo-dados e os resumos correspondentes. Você precisa de média e variância para obter uma nova amostra normal! Então meu código R seria

postsample=res[sample(1:length(res[,1]),10^3),]

para extrair uma amostra do ABC posterior e os pseudo-dados seriam gerados como anteriormente:

  #pseudo-data
  summ=matrix(0,M,2)
  for (i in 1:M){
    xi=rnorm(100)*postsample[i,2]+postsample[i,1]
    summ[i,]=c(median(xi),mad(xi)) #summaries
    }
Xi'an
fonte
1
Muito obrigado pela resposta completa. Seu exemplo de script R realmente deixou claro para mim. Depois que eu postei essa pergunta eu pensei mais cuidadosamente sobre o que eu estava pedindo e eu estava avançando em direção à conclusão de que você deu, por isso é ótimo ter de confirmar isso para mim :-)
David
1
@ Xi'an: Feito. Obrigado. Ainda sou novo neste site!
David
(Também novo na proba e na ABC, posso estar totalmente fora do escopo) Na resposta de @ Xi'an, não está realmente claro para mim o que é. Eu acho que deve ser o número de checagem posterior que você deseja executar, certo? e se eu estiver certo, então não está relacionado ao em definido na primeira parte, qual é o número de partículas selecionadas pelo ABC, certo? Isso me leva a outra pergunta: em sua resposta em Xi'an, você experimenta partículas posteriores. Ao executar seu código, o ABC me devolve partículas. Existe alguma regra para escolher quantas verificações posteriores se deve fazer? MMthetaM1035×103
Simon C.