Como uma média móvel deve lidar com pontos de dados ausentes?


10

Estou escrevendo um programa que calcula a média do peso do usuário em dias diferentes. Estou planejando usar uma média móvel de 5 pontos (dia atual, dois antes e dois depois). Às vezes, um ponto de dados está ausente por 1-2 dias. Como esses casos são geralmente tratados?

(se houver um filtro passa-baixas melhor que eu possa usar, adoraria sugestões)


primeira coisa que vem à mente é para interpolar os pontos antes de utilizar a média móvel de filtro
someguy

3
Realmente mais uma questão estatística do que uma questão de processamento de sinal, pelo menos na ausência de mais contexto. Mas você pode simplesmente pular a recálculo da média, usar a média atual como valor de substituição ou aguardar as medições subsequentes e tentar a interpolação, linear ou não.
Daniel R Hicks

Como os outros observaram, essa normalmente será uma decisão específica do aplicativo, com base em sua consideração de como você deseja que a saída filtrada se comporte. A maior parte da teoria do processamento de sinais é baseada em amostras espaçadas uniformemente, para que você não consiga algo que possa ser chamado objetivamente de "resposta certa".
Jason R

@JasonR Eu filtro para fornecer uma estimativa mais razoável do peso do usuário naquele momento. Os dados são amostrados uniformemente (frequência de amostragem = 1 / dia), exceto que alguns pontos de dados estão ausentes.
Anna

@ Anna: Certo, entendo por que você está filtrando os dados. No entanto, seus dados não são amostrados uniformemente, pois faltam pontos de dados. Portanto, como observei, é improvável que você encontre uma resposta teórica satisfatória para o seu problema. Uma solução ad-hoc que você considera "fazer sentido" para seu aplicativo em particular provavelmente será a resposta.
Jason R

Respostas:


4

Como impressão geral, a regressão funcionaria melhor ao ajustar automaticamente os pontos ausentes, em vez de um filtro de média móvel que você escolheu.

Se você usar um filtro AR (filtro regressivo automático) ou ARMA - poderá ter um valor previsto de uma saída de amostra com base nas entradas anteriores.

X^[i]=ωkx[i1k]+η

Onde é o valor previsto.X^[i]

Especificamente no seu caso, diga que você sabe que o peso da pessoa tem um intervalo específico . Agora, se você não tiver o valor - aplique duas substituições diferentes - uma com Min e outra com Max e com base no modelo disponível, você terá dois resultados extremos de casos para e poderá escolha algo entre eles. x [ i - 1 ]Xmax,Xminx[i1]X^[i]

Existem várias outras alternativas - você pode manter

x [i]=longa duração média da amostra de X 

X^[i]=X[i1]
ou
X^[i]=Long term sample average of X 

Essencialmente, é um jogo de previsão desse valor mencionado e continua a usá-lo como sinal. Obviamente, a previsão não será igual a uma amostra original, mas esse é o preço que você paga por não ter dados.


2
Por que você diz que a regressão funcionaria melhor no ajuste? Obrigado
Spacey

3

Um método simples e geral para preencher dados ausentes, se você tiver execuções completas, é usar a
regressão Linear . Digamos que você tenha 1000 execuções de 5 seguidas e nenhuma delas esteja faltando.
Configure o vetor 1000 x 1 y e a matriz X 1000 x 4:

y       X
wt[0]   wt[-2] wt[-1] wt[1] wt[2]
---------------------------------
68      67     70     70    68
...

A regressão fornece 4 números abcd que dão a melhor correspondência

wt[0] ~= a * wt[-2]  + b * wt[-1]  + c * wt[1]  + d * wt[2]

para suas 1000 linhas de dados - dados diferentes, diferentes abc d.
Então você usa esses abcd para estimar (prever, interpolar) o peso em falta [0].
(Para pesos humanos, eu esperaria que o abcd fosse em torno de 1/4.)

Em python, consulte numpy.linalg.lstsq .

(Existem milhões de livros e artigos sobre regressão, em todos os níveis. Para a conexão com a interpolação, porém, não conheço uma boa introdução; alguém?)


1

Se você não conhece alguns dados, sua melhor aposta é não ficar na média deles. Adivinhar com regressão linear e similares pode ajudar, mas também pode introduzir complexidade extra e viés não intencional para seus dados. Eu diria que, se você está calculando a média desses cinco pontos de dados: , sua resposta deve ser[a,b,c,?,e]

a+b+c+e4

1

acho que a maneira mais simples seria "prever" a data do "todo" na série temporal usando os dados que vieram antes. então você pode usar essas séries temporais para estimativa de parâmetros. (você pode prosseguir e reprimir os valores ausentes usando os parâmetros estimados de todas as séries temporais (concluídas) e repeti-las até convergirem. você deve derivar os limites de confiança do número de pontos de dados reais que você possui, e não da extensão dos dados concluídos.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.