Jak średnia ruchoma powinna obsługiwać brakujące punkty danych?

10

Piszę program, który uśrednia wagę użytkownika w różnych dniach. Planuję użyć 5-punktowej średniej kroczącej (bieżący dzień, dwa przed i dwa po). Czasami brakuje punktu danych na 1-2 dni. Jak zwykle obsługiwane są te sprawy?

(jeśli jest lepszy filtr dolnoprzepustowy, którego mógłbym użyć, chętnie skorzystam z sugestii)

Ania
źródło
pierwszą rzeczą, która przychodzi na myśl, jest interpolacja punktów przed użyciem filtra średniej
ruchomej
3
Naprawdę bardziej pytanie statystyczne niż pytanie przetwarzania sygnału, przynajmniej przy braku większego kontekstu. Ale możesz po prostu pominąć ponowne obliczanie średniej, użyć bieżącej średniej jako wartości zastępczej lub poczekać na kolejne pomiary i spróbować interpolacji, liniowej lub innej.
Daniel R Hicks
Jak zauważyli inni, będzie to zazwyczaj decyzja specyficzna dla aplikacji, oparta na rozważeniu tego, jak chcesz zachować filtrowane dane wyjściowe. Większość teorii przetwarzania sygnałów opiera się na próbkach o równych odstępach, więc nie uzyskasz czegoś, co można obiektywnie nazwać „właściwą odpowiedzią”.
Jason R
@JasonR I filtruję, aby podać bardziej rozsądną ocenę wagi użytkownika w tym momencie. Dane są równomiernie próbkowane (częstotliwość próbkowania = 1 / dzień), z wyjątkiem niektórych punktów danych.
Anna
@Anna: Racja, rozumiem, dlaczego filtrujesz dane. Twoje dane nie są jednakowo próbkowane, ponieważ brakuje punktów danych. Dlatego, jak zauważyłem, prawdopodobnie nie znajdziesz satysfakcjonującej teoretycznej odpowiedzi na swój problem. Rozwiązaniem ad hoc, które uważasz za „sensowne” dla konkretnej aplikacji, prawdopodobnie będzie odpowiedź.
Jason R

Odpowiedzi:

4

Ogólnie rzecz biorąc, regresja działałaby lepiej w automatycznym dopasowywaniu brakujących punktów zamiast wybranego filtru średniej ruchomej.

Jeśli używasz AR (filtr auto-regresywny) lub filtr ARMA - możesz mieć przewidywaną wartość wyjściowej próbki na podstawie przeszłych danych wejściowych.

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

X^[i]

Xmax,Xminx[i1]X^[i]

Istnieją różne inne alternatywy - możesz zachować

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

Zasadniczo jest to gra polegająca na przewidywaniu tej wartości i kontynuowaniu jej używania jako sygnału. Oczywiście przewidywania nie będą takie same jak w oryginalnej próbce, ale to nie cena, jaką płacisz za brak danych.

Dipan Mehta
źródło
2
Dlaczego mówicie, że regresja lepiej pasowałaby? Dzięki
Spacey,
3

Prostą i ogólną metodą wypełniania brakujących danych w przypadku serii kompletnych danych jest
regresja liniowa . Załóżmy, że masz 1000 przebiegów po 5 z rzędu, ale żadnego nie brakuje.
Skonfiguruj wektor 1000 x 1 y i macierz 1000 x 4 X:

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

Regresja da ci 4 liczby abcd, które dają najlepsze dopasowanie

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

dla 1000 wierszy danych - różne dane, różne abc d.
Następnie używasz tych abcd do oszacowania (przewidywania, interpolacji) brakujących wt [0].
(W przypadku ludzkich ciężarów spodziewałbym się, że abcd będzie wynosić około 1/4).

W python, patrz numpy.linalg.lstsq .

(Istnieje wiele książek i artykułów na temat regresji na wszystkich poziomach. Jednak w związku z interpolacją nie znam dobrego wstępu; ktoś?)

denis
źródło
1

[a,b,c,?,e]

a+b+c+e4
Phonon
źródło
1

myślę, że najprostszym sposobem byłoby „przewidzieć” datę „całości” w szeregu czasowym, korzystając z danych, które pojawiły się wcześniej. wtedy możesz użyć tego szeregu czasowego do oszacowania parametrów. (możesz następnie kontynuować i ponownie ustalić brakujące wartości, używając oszacowanych parametrów z całego (ukończonego) szeregu czasowego i powtarzaj to, aż się zbiegną). granice ufności powinieneś wyprowadzić z liczby rzeczywistych punktów danych, które posiadasz, a nie z długości wypełnionych zestawów danych.

Blabla
źródło