Dada uma cadeia 10D MCMC, como posso determinar seus modos posteriores em R?

10

Pergunta: Com uma cadeia MCMC de 10 dimensões, digamos que estou preparado para entregar uma matriz dos sorteios: 100.000 iterações (linhas) por 10 parâmetros (colunas), qual a melhor forma de identificar os modos posteriores? Estou especialmente preocupado com vários modos.

Fundo:Eu me considero um estatístico computacionalmente experiente, mas quando um colega me fez essa pergunta, fiquei com vergonha de não conseguir encontrar uma resposta razoável. A principal preocupação é que vários modos possam aparecer, mas apenas se pelo menos oito das dez dimensões forem consideradas. Meu primeiro pensamento seria usar uma estimativa de densidade do kernel, mas uma pesquisa no R não revelou nada promissor para problemas maiores que três dimensões. O colega propôs uma estratégia ad-hoc de binning em dez dimensões e buscando um máximo, mas minha preocupação é que a largura de banda possa levar a problemas de escassez significativos ou à falta de resolução para discernir vários modos. Dito isso, eu aceitaria com prazer sugestões de sugestões automatizadas de largura de banda, links para um estimador de densidade de 10 kernel ou qualquer outra coisa que você conheça.

Preocupações:

  1. Acreditamos que a distribuição pode estar bastante distorcida; portanto, desejamos identificar os modos posteriores e não os meios posteriores.

  2. Estamos preocupados que possam existir vários modos posteriores.

  3. Se possível, preferimos uma sugestão baseada em R. Mas qualquer algoritmo funcionará desde que não seja incrivelmente difícil de implementar. Acho que prefiro não implementar um estimador de densidade de kernel Nd com seleção automática de largura de banda a partir do zero.

M. Tibbits
fonte
Por favor, veja o tema em modo rápido métodos de estimação stats.stackexchange.com/questions/33625
Pavel Ruzankin

Respostas:

9

Você já pensou em usar uma abordagem de vizinho mais próximo?

por exemplo, construindo uma lista dos kvizinhos mais próximos para cada um dos 100.000 pontos e, em seguida, considere o ponto de dados com a menor distância do kthmodo vizinho. Em outras palavras: encontre o ponto com a 'menor bolha' contendo koutros pontos ao redor deste ponto.

Não sei ao certo quão robusto isso é e a escolha para kobviamente está influenciando os resultados.

Andre Holzner
fonte
Às vezes eu só quero me bater na cabeça. Excelente sugestão.
M. Tibbits
11
Eu também pensei em usar a kmeansfunção em R. Eu realmente não deveria fazer perguntas entre meia-noite e 04:00.
M. Tibbits
4

Esta é apenas uma resposta parcial.

Recentemente, usei o figtree para estimativas multidimensionais da densidade do kernel. É um pacote C e eu consegui que ele funcionasse facilmente. No entanto, eu apenas o usei para estimar a densidade em pontos específicos, não para calcular estatísticas resumidas.

csgillespie
fonte
3

Se você mantiver as probabilidades do log, poderá selecionar apenas aquele com o valor mais alto. Além disso, se o seu interesse for principalmente o modo, basta fazer uma otimização para encontrar o ponto com a maior probabilidade de log.

John Salvatier
fonte
Esta é a resposta mais relevante, pelo menos a primeira parte! Em muitas simulações do MCMC, as probabilidades (log-) são calculadas para todas as propostas e podem ser armazenadas. Ou o valor mais alto até agora e seu argumento pode ser armazenado. Desde que o algoritmo MCMC tenha convergido para o número de simulações executadas, essa é uma abordagem válida.
Xian
2

Você já considerou 'PRIM / bump hunting'? (veja, por exemplo, a Seção 9.3. de 'Os elementos da aprendizagem estatística' de Tibshirani et al. ou pergunte ao seu mecanismo de pesquisa favorito). Não tenho certeza se isso é implementado no R.

[Pelo que entendi, você está tentando encontrar o modo da densidade de probabilidade a partir da qual suas 100.000 linhas são desenhadas. Portanto, seu problema seria parcialmente resolvido encontrando um density estimationmétodo apropriado ].

Andre Holzner
fonte
Sim, há um pacote prim , com uma vinheta R: Usando prim para a caça aos solavancos . Não é óbvio para mim como vai funcionar nesse caso.
chl