Comment gérer les lacunes / NaN dans les données de séries chronologiques lors de l'utilisation de Matlab pour l'autocorrélation et les réseaux de neurones?


9

J'ai une série chronologique de mesures (séries de hauteurs unidimensionnelles). Au cours de la période d'observation, le processus de mesure s'est interrompu pendant quelques instants. Ainsi, les données résultantes sont un vecteur avec NaN où il y avait des lacunes dans les données. L'utilisation de MATLAB me pose un problème lors du calcul de l'autocorrélation ( autocorr) et de l'application des réseaux de neurones ( nnstart).

Comment ces lacunes / NaN devraient-elles être traitées? Dois-je simplement les supprimer du vecteur? Ou remplacer leur entrée par une valeur interpolée? (si oui, comment dans MATLAB)

Réponses:


4

Je ne toucherais pas du tout aux données. Utilisez ceci pour l'autocorrélation avec les NaN:

http://www.mathworks.com/matlabcentral/fileexchange/43840-autocorrelation-and-partial-autocorrelation-with-nans/content/nanautocorr.m

«ne pas toucher aux données» signifie ne pas supprimer de données ou de pas de temps ou les remplacer par 0 ou la moyenne, cela compromettrait les informations sur la dépendance linéaire à décalage temporel spécifique. J'éviterais également de simuler les valeurs des lacunes, si vous êtes intéressé par l'autocorrélation "SAMPLE", de toute façon même la meilleure technique de simulation n'ajoutera plus d'informations sur l'autocorrélation, étant basée sur les données elles-mêmes. J'ai recodé partiellement les fonctions d'autocorrélation et d'autocorrélation partielle du matlab (lien ci-dessus) pour traiter les NaN: tout couple de données, y compris les NaN, est exclu du calcul. Cela se fait pour chaque décalage. Ça a marché pour moi. Toute suggestion est bien acceptée.


Bienvenue @Fabio: Pourriez-vous donner plus d'explications sur ce que vous entendez par «ne pas toucher aux données»? Voulez-vous dire de ne rien supprimer? Il serait également utile de présenter le contenu auquel vous avez lié et d'expliquer pourquoi cela aide le PO.
Momo

Bonjour Momo, merci pour le commentaire. «ne pas toucher aux données» signifie ne pas supprimer de données ou de pas de temps ou les remplacer par 0 ou la moyenne, cela compromettrait les informations sur la dépendance linéaire à décalage temporel spécifique. J'ai recodé partiellement les fonctions d'autocorrélation et d'autocorrélation partielle du matlab (lien ci-dessus) pour traiter les NaN: tout couple de données, y compris les NaN, est exclu du calcul. Cela se fait pour chaque décalage. Ça a marché pour moi. Toute suggestion est bien acceptée.
Fabio

3

Certains algorithmes sont immunisés contre les valeurs manquantes, donc la solution préférée est de les rechercher (par exemple les R acfpour l'autocorrélation).

En général, la voie à suivre consiste soit à simplement éliminer les données avec des observations manquantes (cela peut être très douloureux), soit à imputer leurs valeurs - la moyenne des voisins peut être suffisante pour des séries lisses et de petits écarts, mais il y a bien sûr pléthore d'autres méthodes plus puissantes, utilisant des splines, des valeurs aléatoires / les plus fréquentes, l'imputation à partir de modèles, etc.


2
L'acf avec une valeur manquante est calculé de la manière normale, mais les valeurs manquantes sont «ignorées» dans les sommes (c'est-à-dire que la formule acf pour un décalage donné ressemble à une somme divisée par une somme, dans chacune de ces sommes, les valeurs manquantes peuvent être sauté). Ce n'est pas la même chose que de supprimer les valeurs manquantes des données d'origine. Le problème avec matlab est qu'il ne saute pas NaN, et l'inclure dans le calcul transforme tout en NaN.
Zero

1

Utilisez la détection d'intervention pour imputer les valeurs manquantes en exploitant la structure ARIMA utile et toutes les tendances temporelles locales et / ou les changements de niveau.


1

il y a 2 problèmes ici. la première fournit un cadre numérique significatif pour votre réponse d'autocorrélation dans matlab. pour que cela se produise, vous devez étirer et / ou corriger la partie chronologique de vos vecteurs de données ... cette composante «intégrité des données» du problème est la plus fondamentale.

deuxièmement, vous devez décider comment gérer la composante «valeur» de votre vecteur ... cela dépend dans une large mesure de l'application particulière quant à ce qu'il y a de mieux à supposer (par exemple, de petits horodatages manquants et les NaN correspondants ou Nulls pourrait être interpolé en toute sécurité à partir de ses voisins ... dans des espaces plus grands, définir la valeur à zéro est probablement plus sûr ... ou imputer comme recommandé ci-dessus - évidemment pour que cela soit significatif, les écarts doivent à nouveau être relativement petits.) .

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.