Processo Guassiano de Imputação de Dados

7

Recentemente me deparei com Processos Gaussianos em Gelman et al. (2013), e estou tentando aprender mais sobre seu potencial aplicativo para uso na imputação de dados de séries temporais. Os dados de interesse são uma única série temporal variável da freqüência cardíaca de um indivíduo coletada usando um fotopletismograma (PPG; um sensor óptico que se conecta ao final do dedo de uma pessoa e mede alterações no volume sanguíneo).

O problema é que temos certas seções de dados que são confusas. As estratégias de edição existentes foram desenvolvidas para lidar com esses artefatos, mas foram otimizadas em grande parte com base nos dados coletados dos sensores de eletrocardiograma. A forma de onda lenta do PPG torna sua aplicação aos nossos dados obtidos um pouco desajeitada às vezes.

Resumidamente, aqui está um exemplo de uma seção bagunçada isolada cercada por um bom sinal do R Shiny App que eu construí para melhorar a edição manual de nossos dados:

insira a descrição da imagem aqui

A linha cinza clara representa o sinal original (redução da amostra de 2kH a 100Hz). A linha preta sólida com os pontos vermelhos é uma plotagem dos intervalos entre os batimentos (o tempo em segundos entre os sucessivos batimentos cardíacos) plotados ao longo do tempo. Os intervalos entre batimentos serão a variável principal em qualquer análise desses dados.

Por exemplo, usando os intervalos entre os batimentos de um indivíduo, podemos avaliar a variabilidade da frequência cardíaca. Infelizmente, a maioria das estratégias de edição tende a reduzir a variabilidade. Além disso, existem certas tarefas quando é mais provável que esses artefatos estejam presentes (devido ao movimento do participante), o que significa que eu não poderia simplesmente marcar essas seções bagunçadas para remoção e tratá-las como ausentes aleatoriamente.

A vantagem é que sabemos muito sobre as propriedades da freqüência cardíaca. Por exemplo, os adultos geralmente variam entre 60 e 100 BPM em repouso. Além disso, sabemos que a frequência cardíaca varia em função do ciclo respiratório, que por si só possui uma faixa conhecida de freqüências prováveis ​​em repouso. Finalmente, sabemos que existe um ciclo de baixa frequência que influencia a variabilidade da frequência cardíaca (pensado para ser influenciado por uma combinação de influências simpáticas e parassimpáticas na freqüência cardíaca).

A seção relativamente pequena de "dados inválidos" mostrada acima não é realmente minha principal preocupação. Eu desenvolvi algumas abordagens sazonais razoavelmente precisas de interpolação que parecem funcionar bem nesses tipos de casos isolados.

Meus problemas surgem mais ao lidar com seções de dados que intercalam regularmente um sinal ruim com o bom:

insira a descrição da imagem aqui

Como eu entendo de Gelman et al. (2013), parece possível especificar várias funções de covariância diferentes para processos gaussianos. Essas funções de covariância podem ser informadas pelos dados observados e distribuições anteriores razoavelmente bem conhecidas para medidas do débito cardíaco e respiratório de adultos (ou crianças).

Por exemplo, digamos que eu tenha alguma freqüência cardíaca observada ( ), eu poderia especificar um processo gaussiano governado por essa freqüência cardíaca média da seguinte maneira (e informe-me se eu estiver na matemática aqui, pois esta é minha primeira vez tentando aplicar esses modelos):fHR

g1(t)GP(0,k1)

Onde

k1(t,t)=σ12exp(2sin2(π(tt)fHRHz)2l12)

onde é minha taxa de amostragem é meu índice de tempo.Hzt

Com base no exemplo Gelman et al. (2013) fornecem em seu texto, parece possível modificar essa função de covariância para permitir variações em determinados períodos. Para mim, gostaria de permitir variações nas estimativas de dentro do ciclo respiratório e dentro do ciclo de variabilidade da frequência cardíaca de baixa frequência que mencionei acima.fHR

Para atingir meu primeiro objetivo, como eu o entendo, isso significaria especificar um processo gaussiano e uma função de covariância para a taxa de respiração ( ) e um processo gaussiano que incorpore características de ambos os processos na função de covariância:fR

g2(t)GP(0,k2)

Onde

k2(t,t)=σ22exp(2sin2(π(tt)fRHz)2l22)

e...

g3(t)GP(0,k3)

Onde

k3(t,t)=σ32exp(2sin2(π(tt)fHRHz)l1,32)exp(2sin2(π(tt)fRHz)2l2,32)

Se eu parasse nesse ponto, meu modelo seria algo como:

yt(t)=g1(t)+g2(t)+g3(t)+ϵt

EDITAS / ATUALIZAÇÕES :

Primeiro, uma especificação mais correta dos meus três processos gaussianos é:

Começando com o kernel de covariância exponencial ao quadrado:

g1(t)N(0,k1)

k1(t,t)=σ12exp((tt)22l12)

A seguir, uma função de covariância que incorpora um padrão quase periódico com base na freqüência cardíaca do indivíduo.

g2(t)N(0,k2)

k2(t,t)=σ22exp(2sin2(π(tt)fHRl22)exp((tt)22l32)

E, finalmente, uma função de covariância que modela a variação da frequência cardíaca em função do ciclo respiratório:

g3(t)N(0,k3)

k3(t,t)=σ32exp(2sin2(π(tt)fHRl42)exp(2sin2(π(tt)fRl52)

PERGUNTAS ANTIGAS (com respostas atualizadas em itálico ):

1) Saber pouco sobre os processos guassianos parece uma aplicação defensável? Eles parecem altamente flexíveis e parecem ter um número de propriedades desejáveis ​​que poderiam resolver meus problemas de manter a maior variabilidade verdadeira possível em meus dados, mas só recentemente os encontrei e quero ter certeza de que não vou me decepcionar. em descer esta toca de coelho.

Minha resposta até agora a esta pergunta é que não, isso não tem sido uma toca de coelho, ou pelo menos não improdutiva. Eu cheguei mais perto com esses modelos do que qualquer outro para recuperar valores "verdadeiros" em um sinal confuso. Eu gostaria de poder descobrir uma maneira de reduzir o tempo de execução, no entanto, como esses modelos são computacionalmente caros para estimar. Embora tenha feito progresso aqui (observação usando Stan e rstan), ainda tenho um caminho a percorrer.

2) Estou entendendo e representando corretamente os recursos básicos da covariância e, mais importante, minha tentativa de permitir variação em como uma função de correta (ou seja, função )?fHRfRg3(t)

Eu acredito que os núcleos especificados acima são consistentes com meus principais objetivos de modelagem. Dito isto, pode haver maneiras de reduzir a complexidade que certamente está levando a meus tempos de execução excessivamente longos. Essa continua sendo uma área que eu estou buscando ativamente enquanto tento otimizar meus modelos agora que tenho o básico.

3) Mais tecnicamente falando, como se identifica valores para ? E o que é precisamente que representa em cada função de covariância? Também parece ser algo para o qual terei que especificar uma distribuição anterior, mas não entendo completamente o que ela representa neste caso. Presumivelmente, uma variação de algum tipo ...lσ2

No momento, e quase certamente um fator no meu tempo de convergência, estou estimando esses valores a partir dos dados. Se eu pudesse fixar esses valores ou restringir severamente suas distribuições anteriores, a fim de (defensivamente) reduzir o espaço de parâmetros coberto pelos modelos, acho que isso ajudaria muito a melhorar o tempo de execução.

4) Encontrei uma fonte adicional que estou começando a pesquisar sobre processos gaussianos (Rasmussen & Williams, 2006). Existem outros recursos recomendados por aí que eu deva procurar para obter uma melhor compreensão desses modelos?

Encontrei várias fontes adicionais úteis na minha busca contínua de uma estratégia de modelagem final. Ver abaixo.

Métodos rápidos para treinar processos gaussianos em grandes conjuntos de dados - Moore et al., 2016

Modelos de processos gaussianos rápidos em stan - Nate Lemoine

Processos Gaussianos ainda mais rápidos em Stan - Nate Lemoine

Processos gaussianos robustos em stan - Michael Betancourt

Processos hierárquicos gaussianos em stan - Trangucci, 2016


NOVAS PERGUNTAS

  1. Existe uma maneira defensável de restringir os parâmetros da escala de comprimento no modelo (os 's) com base nas frequências com as quais estou trabalhando (1,5 Hz, 0,25 Hz e o eixo x em segundos, reduzido em 10 Hz).l

  2. Em que fatores devo me concentrar para acelerar o tempo de modelagem? Eu sei que parte disso é otimizar meu código stan, mas há algo mais que eu possa estar fazendo ou alterando sobre a parametrização do meu modelo?


RESULTADOS ATÉ A DATA Aqui está o melhor resultado até o momento (em um conjunto de dados com uma amostra bastante reduzida). A linha vermelha representa o sinal "verdadeiro". O azul é o sinal estimado do modelo para o mesmo período:

insira a descrição da imagem aqui

Nota : Eu ficaria bastante satisfeito com esse resultado se pudesse acelerar sua estimativa e suavizá-la um pouco.


Os dados foram analisados ​​por meio de questionários, entrevistas e entrevistas. Análise de Dados Bayesiana (3ª ed.) . Imprensa da CRC: Nova York.

Rasmussen, CE, e Williams, CKI (2006). Processos gaussianos para aprendizado de máquina . Imprensa do MIT: Boston, MA.

Matt Barstead
fonte
11
Uma atualização rápida aqui, pois encontrei informações úteis sobre os processos da Guassian no site de documentação da Stan . O capítulo relevante é 18 na versão 2.17.0.
precisa saber é o seguinte
E outra atualização. Fui encaminhado para este link com um Tutorial de Processo Gaussiano completo em Stan, que fornece muitas informações práticas sobre como codificar o modelo usando rstan.
precisa saber é o seguinte
Você está fazendo seis perguntas que parecem razoavelmente técnicas ou amplas, por isso é difícil responder. Você pode dividir essa pergunta em duas perguntas menores?
MachineEpsilon
Neste ponto, meu principal interesse é obter novas idéias / informações relacionadas ao meu artigo " Novas perguntas " (apenas duas das seis que você anotou). Eu queria manter o restante das perguntas anteriores e algumas das respostas que encontrei para que eu pudesse: a) manter um registro contínuo de meus pensamentos / esforços eb) fornecer recursos e raciocínio para as pessoas que se encontram no meu lugar com exemplos limitados lá fora, para tirar proveito de fazer boas escolhas relacionadas a esses modelos.
Matt Barstead 02/02
11
Ah ok. Você já viu o exemplo de discussão em Rasmussen et al. 5.4.3 em relação à identificação dos hiperparâmetros do modelo? De memória que parece relevante. Em relação ao ponto 2, quanto trabalho você está disposto a fazer? Existe um obstáculo fundamental, uma vez que a decomposição de Cholesky necessária para se ajustar ao modelo tem complexidade . Dito isto, as pessoas estão tentando maneiras diferentes de contornar isso. Você já olhou algo como GPFlow? O(N3)
MachineEpsilon

Respostas:

1

Embora eu não possa responder a todas as suas perguntas e não consiga postar um comentário devido à falta de reputação, em resposta a isso:

Existe uma maneira defensável de restringir os parâmetros da escala de comprimento no> modelo (os l's) com base nas frequências com as quais estou trabalhando (1,5 Hz, 0,25 Hz e> o eixo x, em segundos, reduzido para 10 Hz).

Você pode querer olhar para um núcleo de mistura espectral . Isso basicamente representa a representação de sua matriz de covariância por meio da transformação de Fourier e, portanto, lida com frequências e não com distâncias. Isso pode codificar mais naturalmente algumas das suas informações anteriores.

Você pode achar esta página útil se isso parecer interessante, e a tese original estiver aqui .

dizq22
fonte