Est-il possible d'extraire des points de données de données moyennes mobiles?
En d'autres termes, si un ensemble de données n'a que des moyennes mobiles simples des 30 points précédents, est-il possible d'extraire les points de données d'origine?
Si c'est le cas, comment?
Réponses:
+1 à la réponse de fabee, qui est complète. Juste une note pour le traduire en R, basé sur les packages que j'ai trouvés pour effectuer les opérations à portée de main. Dans mon cas, j'avais des données qui sont des prévisions de température de la NOAA sur une base de trois mois: janvier-février-mars, février-mars-avril, mars-avril-mai, etc., et je voulais les détailler (approximativement) valeurs mensuelles, en supposant que la température de chaque période de trois mois est essentiellement une moyenne.
Ce qui fonctionne très bien pour moi. Merci @fabee.
EDIT: OK, en rétraduisant mon R en Python, j'obtiens:
(Ce qui a pris beaucoup plus de temps pour déboguer que la version R. D'abord parce que je ne suis pas aussi familier avec Python qu'avec R, mais aussi parce que R est beaucoup plus utilisable de manière interactive.)
la source
J'essaie de mettre ce que whuber a dit dans une réponse. Disons que vous avez un grand vecteur avec n = 2000 entrées. Si vous calculez une moyenne mobile avec une fenêtre de longueur ℓ = 30 , vous pouvez l'écrire comme une multiplication matricielle vectorielle y = A x du vecteur x avec la matricex n=2000 ℓ=30 y=Ax x
qui en a qui sont décalés à mesure que vous avancez dans les rangées jusqu'à ce que les 30 atteignent l'extrémité de la matrice. Ici, le vecteur moyen y a 1970 dimensions. La matrice a 1970 lignes et 2000 colonnes. Par conséquent, il n'est pas inversible.30 30 y 1970 2000
Si vous n'êtes pas familier avec les matrices, pensez-y comme un système d'équations linéaires: vous recherchez des variablesx1,...,x2000 y1 y2
Le problème avec le système d'équations (et la matrice) est qu'il a plus d'inconnues que d'équations. Par conséquent, vous ne pouvez pas identifier de manière unique vos inconnuesx1,...,xn x y x
Un autre, peut - être plus facile, est d'utiliser la pseudo - de A . Cela génère un vecteur zA† A z=A†y X y Az
De nombreux programmes numériques offrent des pseudo-inverses (par exemple Matlab, numpy en python, etc.).
Voici le code python pour générer les signaux de mon exemple:
J'espère que cela pourra aider.
la source