Comment une moyenne mobile doit-elle gérer les points de données manquants?

10

J'écris un programme qui fait la moyenne du poids de l'utilisateur sur différents jours. Je prévois d'utiliser une moyenne mobile à 5 points (jour en cours, deux avant et deux après). Parfois, un point de données manque pendant 1-2 jours. Comment ces cas sont-ils généralement traités?

(s'il y a un meilleur filtre passe-bas que je pourrais utiliser, j'adorerais les suggestions)

Anna
la source
la première chose qui me vient à l'esprit est d'interpoler les points avant d'utiliser le filtre de moyenne mobile
someguy
3
Vraiment plus une question statistique qu'une question de traitement du signal, du moins en l'absence de plus de contexte. Mais vous pouvez simplement ignorer le recalcul de la moyenne, utiliser la moyenne actuelle comme valeur de remplacement, ou attendre les mesures suivantes et tenter une interpolation, linéaire ou autre.
Daniel R Hicks
Comme les autres l'ont noté, ce sera généralement une décision spécifique à l'application basée sur votre considération de la façon dont vous souhaitez que la sortie filtrée se comporte. La plupart des théories de traitement du signal sont basées sur des échantillons uniformément espacés, donc vous n'obtiendrez pas quelque chose qui peut objectivement être appelé la «bonne réponse».
Jason R
@JasonR Je filtre afin de donner une estimation plus raisonnable du poids de l'utilisateur à ce moment-là. Les données sont échantillonnées uniformément (fréquence d'échantillonnage = 1 / jour), à l'exception de certains points de données manquants.
Anna
@Anna: D'accord, je comprends pourquoi vous filtrez les données. Cependant, vos données ne sont pas échantillonnées uniformément car il vous manque des points de données. Par conséquent, comme je l'ai noté, vous ne trouverez probablement pas de réponse théorique satisfaisante à votre problème. Une solution ad hoc que vous jugerez "logique" pour votre application particulière sera probablement la réponse.
Jason R

Réponses:

4

Comme impression générale, la régression fonctionnerait mieux en ajustant automatiquement les points manquants plutôt qu'un filtre de moyenne mobile que vous avez choisi.

Si vous utilisez un filtre AR (filtre auto-régressif) ou ARMA - vous pouvez avoir une valeur prédite d'un échantillon de sortie basée sur les entrées passées.

X^[je]=ωkX[je-1-k]+η

Lorsque X [ i ] est la valeur prédite.X^[je]

Plus précisément dans votre cas, disons que vous savez que le poids de la personne a une plage spécifique . Maintenant , si vous n'avez pas x [ i - 1 ] valeur - appliquer deux substitutions différentes - l' un avec min et une avec Max et basé sur le modèle disponible , vous aurez deux résultats de cas extrême pour X [ i ] et vous pouvez choisir quelque chose entre eux.XmuneX,XmjenX[je-1]X^[je]

Il existe diverses autres alternatives - vous pouvez garder

X^[je]=X[je-1]
X^[je]=Moyenne d'échantillon à long terme de X 

Il s'agit essentiellement d'un jeu de prédiction de cette valeur et de continuer à l'utiliser comme signal. Bien sûr, la prédiction ne sera pas la même qu'un échantillon original mais ce n'est pas le prix à payer pour ne pas avoir de données.

Dipan Mehta
la source
2
Pourquoi dites-vous que la régression fonctionnerait mieux dans l'ajustement? Merci
Spacey
3

Une méthode simple et générale pour remplir les données manquantes, si vous avez des séries de données complètes, consiste à utiliser la
régression linéaire . Supposons que vous ayez 1000 séries de 5 d'affilée sans qu'aucune ne manque.
Configurez le vecteur 1000 x 1 y et la matrice 1000 x 4 X:

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

La régression vous donnera 4 chiffres abcd qui donnent une meilleure correspondance

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

pour vos 1000 lignes de données - différentes données, différents abc d.
Ensuite, vous utilisez ces abcd pour estimer (prédire, interpoler) le poids manquant [0].
(Pour les poids humains, je m'attends à ce que abcd soit d'environ 1/4.)

En python, voir numpy.linalg.lstsq .

(Il y a des millions de livres et d'articles sur la régression, à tous les niveaux. Pour le lien avec l'interpolation, cependant, je ne connais pas de bonne introduction; quelqu'un?)

denis
la source
1

[une,b,c,?,e]

une+b+c+e4
Phonon
la source
1

Je pense que la manière la plus simple serait de "prédire" la date du "tout" dans la série chronologique en utilisant les données précédentes. alors vous pouvez utiliser cette série temporelle pour l'estimation des paramètres. (vous pouvez ensuite continuer et reprédire les valeurs manquantes à l'aide de vos paramètres estimés de l'ensemble des séries temporelles (terminées) et répéter jusqu'à ce qu'elles convergent). vous devez cependant déduire les limites de confiance du nombre de points de données réels dont vous disposez, et non de la longueur des séries de données terminées.

blabla
la source