MATLAB: à l'Aide de l'interpolation pour remplacer les valeurs manquantes (NaN)
J'ai matrice de cellules, chacune contenant une séquence de valeurs comme un vecteur ligne. Les séquences contiennent certaines valeurs manquantes représenté par NaN
.
Je voudrais remplacer tous les NaNs à l'aide de la méthode d'interpolation, comment je peux faire cela dans MATLAB? Je suis également ouvert à d'autres suggestions sur la façon de traiter avec ces valeurs manquantes.
Considérer cet échantillon de données pour illustrer le problème:
seq = {randn(1,10); randn(1,7); randn(1,8)};
for i=1:numel(seq)
%# simulate some missing values
ind = rand( size(seq{i}) ) < 0.2;
seq{i}(ind) = nan;
end
Les séquences obtenues:
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
Edit:
Sur la base des réponses, je pense qu'il y a eu une confusion: évidemment, je ne suis pas de travail avec des données aléatoires, le code ci-dessus est simplement un exemple de la façon dont les données sont structurées.
Les données réelles est une certaine forme de signaux traités. Le problème est que lors de l'analyse, ma solution serait un échec si les séquences contiennent des valeurs manquantes, d'où la nécessité pour le filtrage d'interpolation (je l'ai déjà envisagé d'utiliser la moyenne de chaque séquence pour remplir les espaces vides, mais je suis l'espoir pour quelque chose de plus puissant)
Je pense qu'il était juste à l'aide de données aléatoires comme un exemple pour les gens à jouer avec.
OriginalL'auteur Dave | 2010-09-02
Vous devez vous connecter pour publier un commentaire.
Bien, si vous travaillez avec des séries chronologiques de données, alors vous pouvez utiliser Matlab est construit en fonction d'interpolation.
Quelque chose comme cela devrait fonctionner pour votre situation, mais vous aurez besoin de l'adapter un peu ... c'est à dire. si vous n'avez pas l'égalité espacés d'échantillonnage, vous devez modifier les
times
ligne.Vous aurez besoin de jouer avec les options de
interp1
de comprendre ce qui fonctionne le mieux pour votre situation.times
vecteur puisque les valeurs sont enregistrées sur une base 3 secondes... Maintenant que je suis en train de penser à ce sujet, il n'a pas d'importance aussi longtemps que les séquences sont également échantillonnés, n'est-ce pas?
ouais, tant qu'ils sont également échantillonnés il n'a pas vraiment d'importance ... mais j'essaie d'être aussi explicite que possible.
OriginalL'auteur JudoWill
Je voudrais utiliser inpaint_nans, un outil conçu pour remplacer nan éléments en 1-d et 2-d des matrices par interpolation.
OriginalL'auteur
Si vous avez accès à la Système d'Identification de la boîte à outils, vous pouvez utiliser le MISDATA de la fonction à estimer les valeurs manquantes. Selon le la documentation:
Fondamentalement, l'algorithme alterne entre l'estimation des données manquantes et de l'estimation de modèles, de façon similaire à l'Expectation Maximization (EM) de l'algorithme.
Le modèle estimé peut être l'un des modèles linéaires
idmodel
(AR/ARX/..), ou en cas de non donné, utilise une valeur par défaut-commande modèle espace-état.Voici comment l'appliquer à vos données:
OriginalL'auteur Amro
Utilisation griddedInterpolant
Il y a aussi d'autres fonctions comme interp1. Pour les courbes parcelles spline est la meilleure méthode pour trouver les données manquantes.
Ce n'est pas un lien seule réponse. La réponse est le nom de la fonction à utiliser - le lien est juste un lien vers la documentation de cette fonction.
Votre question est dans la faible qualité de l'examen. Vous souhaitez partager des comment on pourrait utiliser cette fonction, non seulement le nom de la fonction et un lien.
OriginalL'auteur Jwalant Bhatt
Comme JudoWill dit, vous avez besoin de supposer une sorte de relation entre vos données.
Un trivial option consisterait à calculer la moyenne de votre total de la série, et les utiliser pour les données manquantes. Un autre trivial option serait de prendre la moyenne des n précédentes et de n valeurs.
Mais être très prudent avec cela: s'il vous manque des données, vous êtes généralement préférable de traiter ces données manquantes, que de faire quelques fausses données qui pourraient endommager votre analyse.
OriginalL'auteur Kena
Considérons l'exemple suivant
X=certains Nx1 tableau
Y=F(X), avec quelques NaNs il
ensuite utiliser
X1=X(trouver(~isnan(Y)));
Y1=Y(trouver(~isnan(Y)));
Maintenant interpoler sur X1 et Y1 pour calculer toutes les valeurs à tous les X.
OriginalL'auteur Jagte