J'ai un ensemble de données avec l'hypothèse que les voisins les plus proches sont les meilleurs prédicteurs. Juste un exemple parfait de gradient bidirectionnel visualisé-
Supposons que nous ayons un cas où peu de valeurs manquent, nous pouvons facilement prédire en fonction des voisins et de la tendance.
Matrice de données correspondante dans R (exemple factice pour l'entraînement):
miss.mat <- matrix (c(5:11, 6:10, NA,12, 7:13, 8:14, 9:12, NA, 14:15, 10:16),ncol=7, byrow = TRUE)
miss.mat
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,] 5 6 7 8 9 10 11
[2,] 6 7 8 9 10 NA 12
[3,] 7 8 9 10 11 12 13
[4,] 8 9 10 11 12 13 14
[5,] 9 10 11 12 NA 14 15
[6,] 10 11 12 13 14 15 16
Remarques: (1) La propriété des valeurs manquantes est supposée être aléatoire , elle peut se produire n'importe où.
(2) Tous les points de données proviennent d'une seule variable, mais leur valeur est supposée être influencée par la neighbors
ligne et la colonne adjacentes. La position dans la matrice est donc importante et peut être considérée comme une autre variable.
Mon espoir dans certaines situations, je peux prédire des valeurs hors-prix (peut-être des erreurs) et corriger le biais (juste un exemple, permet de générer une telle erreur dans les données fictives):
> mat2 <- matrix (c(4:10, 5, 16, 7, 11, 9:11, 6:12, 7:13, 8:14, 9:13, 4,15, 10:11, 2, 13:16),ncol=7, byrow = TRUE)
> mat2
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,] 4 5 6 7 8 9 10
[2,] 5 16 7 11 9 10 11
[3,] 6 7 8 9 10 11 12
[4,] 7 8 9 10 11 12 13
[5,] 8 9 10 11 12 13 14
[6,] 9 10 11 12 13 4 15
[7,] 10 11 2 13 14 15 16
Les exemples ci-dessus ne sont qu'une illustration (on peut y répondre visuellement) mais le véritable exemple peut être plus déroutant. Je cherche s'il existe une méthode robuste pour effectuer une telle analyse. Je pense que cela devrait être possible. Quelle serait la méthode appropriée pour effectuer ce type d'analyse? des suggestions de programme / package R pour effectuer ce type d'analyse?
Réponses:
La question demande des moyens d'utiliser les voisins les plus proches de manière robuste pour identifier et corriger les valeurs aberrantes localisées. Pourquoi ne pas faire exactement ça?
La procédure consiste à calculer un lissage local robuste, à évaluer les résidus et à éliminer ceux qui sont trop grands. Cela répond directement à toutes les exigences et est suffisamment flexible pour s'adapter à différentes applications, car on peut faire varier la taille du voisinage local et le seuil d'identification des valeurs aberrantes.
(Pourquoi la flexibilité est-elle si importante? Parce qu'une telle procédure a de bonnes chances d'identifier certains comportements localisés comme étant "éloignés". En tant que telles, toutes ces procédures peuvent être considérées comme plus lisses . Elles élimineront certains détails ainsi que les valeurs aberrantes apparentes. L'analyste a besoin d'un certain contrôle sur le compromis entre conserver les détails et ne pas détecter les valeurs aberrantes locales.)
Un autre avantage de cette procédure est qu'elle ne nécessite pas de matrice rectangulaire de valeurs. En fait, il peut même être appliqué à des données irrégulières en utilisant un lisseur local adapté à ces données.
R
, ainsi que la plupart des progiciels de statistiques complets, disposent de plusieurs lisseurs locaux robustes, tels queloess
. L'exemple suivant a été traité à l'aide de celui-ci. La matrice a lignes etNotez que (selon les
R
conventions) les lignes de la matrice sont dessinées sous forme de bandes verticales. Toutes les images, à l'exception des résidus, sont ombrées pour aider à afficher de petites variations dans leurs valeurs. Sans cela, presque toutes les valeurs aberrantes locales seraient invisibles!En comparant les images "imputées" (fixées) aux images "réelles" (originales non contaminées), il est évident que la suppression des valeurs aberrantes a lissé une partie, mais pas la totalité, du pli (qui va de vers le bas à ( 49 , 30 ) ; il apparaît comme une bande angulaire cyan clair dans le graphique "Résidus").(0,79) (49,30)
Les taches dans l'intrigue "Résiduels" montrent les valeurs aberrantes locales isolées évidentes. Ce graphique affiche également d'autres structures (telles que la bande diagonale) attribuables aux données sous-jacentes. On pourrait améliorer cette procédure en utilisant un modèle spatial des données ( via des méthodes géostatistiques), mais le décrire et l'illustrer nous mènerait trop loin ici.
BTW, ce code a signalé avoir trouvé seulement des 200102 200 valeurs aberrantes qui ont été introduites. Ce n'est pas un échec de la procédure. Parce que les valeurs aberrantes étaient normalement distribuées, environ la moitié d'entre elles étaient si proches de zéro - ou moins en taille, par rapport aux valeurs sous-jacentes ayant une plage de plus de 600 - qu'elles n'ont fait aucun changement détectable dans la surface. 3 600
la source
Je vous conseille de consulter cet article [0]. Le problème qu'il prétend résoudre semble plutôt bien correspondre à votre description, sauf que la méthode proposée par l'auteur est légèrement plus raffinée que la saisie NN (bien qu'elle utilise quelque chose de similaire comme point de départ).
La première étape de chaque itération est l'étape d'imputation des données. Cela se fait comme dans l'algorithme EM: les cellules manquantes sont remplies par la valeur qu'elles devraient avoir (c'est l'étape E).
Dans la deuxième partie de la procédure itérative en deux étapes, on adapte un PCA (robuste) aux données augmentées obtenues à l'étape précédente. Il en résulte une décomposition spectrale deXX tt∈Rp p k LL k k DD k≤p
Pour résumer l'article, voici l'algorithme général qu'ils proposent:
Ensuite, faites jusqu'à convergence:
une. faire PCA robuste surWWl (ttl,LLl,DDl)
c. utilisationYYl=LLl−1(WWl−1−ttl−1)(LLl−1)′
Je ne connais pas d'implémentation R prête à l'emploi pour cette approche, mais une peut être facilement produite à partir des sous-composants (principalement un algorithme PCA robuste), et ceux-ci sont bien implémentés dans R, voir le rrcov package (le document est calme informatif à ce sujet).
la source