J'ai une matrice de cellule chacune contenant une séquence de valeurs en tant que vecteur de ligne. Les séquences contiennent des valeurs manquantes représentées par Je voudrais remplacer toutes les nans en utilisant une sorte de méthode d'interpolation, comment puis-je peut-être le faire dans matlab? Je suis également ouvert à d'autres suggestions sur la manière de traiter ces valeurs manquantes. P> Considérez cette exemple de données pour illustrer le problème: P> nan code>.
seq{1}
ans =
-0.50782 -0.32058 NaN -3.0292 -0.45701 1.2424 NaN 0.93373 NaN -0.029006
seq{2}
ans =
0.18245 -1.5651 -0.084539 1.6039 0.098348 0.041374 -0.73417
seq{3}
ans =
NaN NaN 0.42639 -0.37281 -0.23645 2.0237 -2.2584 2.2294
6 Réponses :
Comme le dit Jackowill, vous devez assumer une sorte de relation entre vos données. P>
Une option triviale serait de calculer la moyenne de votre série totale et d'utiliser celles des données manquantes. Une autre option triviale serait de prendre la moyenne des n précédentes et des valeurs suivantes. p>
Mais soyez très prudent avec ceci: si vous manquez des données, vous préférez gérer ces données manquantes que de constituer de fausses données qui pourraient bousiller votre analyse. P>
Eh bien, si vous travaillez avec des données de la série temporelle, vous pouvez utiliser la fonction d'interpolation intégrée de Matlab.
Quelque chose comme ça devrait fonctionner pour votre situation, mais vous devrez l'adapter un peu ... c'est à dire. Si vous n'avez pas d'échantillonnage égal espacé, vous devez modifier la ligne Vous devez jouer avec le options de fois code>. p>
interpolle code> pour déterminer lesquelles fonctionnent le mieux pour votre situation. P> P>
Merci, dans mon cas, je dois modifier le vecteur code> code> car les valeurs sont enregistrées sur une base de 3 secondes
... Maintenant que j'y pense, cela n'a pas d'importance tant que les séquences sont échantillonnées de manière égale, n'est-ce pas?
Ouais, tant qu'ils sont également échantillonnés, cela n'a pas vraiment d'importance ... mais j'essaie d'être aussi explicite que possible.
Si vous avez accès à la boîte à outils EM>, vous pouvez utiliser MISDATA fonction pour estimer les valeurs manquantes. Selon le Documentation :
Cette commande interpolate de manière linéaire valeurs manquantes pour estimer le premier maquette. Ensuite, il utilise ce modèle pour estimer les données manquantes comme Paramètres en minimisant la sortie Erreurs de prédiction obtenues à partir du Données reconstruites. P> blockQuote>
Fondamentalement, l'algorithme alterne entre estimation des données manquantes et estimer des modèles, d'une manière similaire à l'algorithme d'optimisation des attentes (EM). p>
Le modèle estimé peut être n'importe lequel des modèles linéaires IDModel code> (ar / arx / ..), ou si non donné, utilise un modèle d'espace d'état de commande par défaut. p>
Voici comment l'appliquer à vos données: P >
for i=1:numel(seq) dat = misdata( iddata(seq{i}(:)) ); seq{i} = dat.OutputData; end
J'utiliserais Inpaint_nans , un outil conçu pour remplacer les éléments NAN en 1-D ou matrices 2-D par interpolation.
seq{1} = [-0.50782 -0.32058 NaN -3.0292 -0.45701 1.2424 NaN 0.93373 NaN -0.029006]; seq{2} = [0.18245 -1.5651 -0.084539 1.6039 0.098348 0.041374 -0.73417]; seq{3} = [NaN NaN 0.42639 -0.37281 -0.23645 2.0237]; for i = 1:3 seq{i} = inpaint_nans(seq{i}); end seq{:} ans = -0.50782 -0.32058 -2.0724 -3.0292 -0.45701 1.2424 1.4528 0.93373 0.44482 -0.029006 ans = 0.18245 -1.5651 -0.084539 1.6039 0.098348 0.041374 -0.73417 ans = 2.0248 1.2256 0.42639 -0.37281 -0.23645 2.0237
considérer l'exemple suivant p>
x = un tableau NX1 Y = f (x) avec des nans dedans p>
Ensuite, utilisez p>
x1 = x (trouver (~ isnan (y))); Y1 = y (trouver (~ isnan (y))); p>
Interpoler maintenant sur X1 et Y1 pour calculer toutes les valeurs du tout X. P>
Utilisez GriddeddePLant P>
Il y a aussi d'autres fonctions telles que Interp1. Pour les parcelles courbes Spline est la meilleure méthode pour trouver des données manquantes. P>
Bien que ce lien puisse répondre à la question, il est préférable d'inclure les parties essentielles de la réponse ici et de fournir le lien pour référence. Les réponses uniquement uniquement peuvent devenir invalides si la page liée change. - de l'avis
@Michel Ce n'est pas une réponse uniquement sur le lien. La réponse est le nom de la fonction à utiliser - le lien n'est qu'un lien vers la documentation de cette fonction.
@JWG Votre question est dans une analyse de mauvaise qualité. Vous voudrez peut-être partager comment i> one utiliserait cette fonction, pas seulement le nom de la fonction et un lien.
Dans votre exemple, je pense que vous seriez pressé de trouver un moyen d'interpoler les valeurs manquantes. L'interpolation exige qu'il existe une sorte de relation entre les points de données. Souvent, cela peut être qu'ils viennent d'une série temporelle (de sorte que la partie manquante puisse être déduite des points voisins). Dans votre exemple de données, vous essayez de deviner une "pièce à bascule" basée uniquement sur d'autres coups de pièces. Si vous pouvez nous donner plus d'informations sur votre exemple spécifique, nous pouvons vous aider davantage.
@Judowill: Je pense qu'il utilisait simplement des données aléatoires comme exemple pour que les gens puissent jouer.