Existe-t-il un moyen d'automatiser/de scripter le processus Winsor de filtrage des valeurs aberrantes ?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />| Existe-t-il un moyen d'automatiser/de scripter le processus Winsor de filtrage des valeurs aberrantes ? J'ai trouvé les deux compléments de Brady, mais ceux-ci n'excluent pas les lignes aberrantes, ils ne concernent que l'amélioration de la fonction Résumé. |
Complément d'imputation
Complément de résumé étendu
Re : Existe-t-il un moyen d'automatiser/de scripter le processus Winsor de filtrage des valeurs aberrantes ?Merci, c'est très logique. Je suppose que j'ai mal compris la partie du dossier AMC faisant référence à Huber... Je pensais qu'ils voulaient dire Huber M-estimation, mais je suis d'accord qu'il s'agit simplement de windsorizing de manière itérative.
Merci pour ce lien. C'est utile.
Re : Existe-t-il un moyen d'automatiser/de scripter le processus Winsor de filtrage des valeurs aberrantes ?Cela vaudrait probablement la peine de lire quelques articles du wiki.La winsorisation n'est qu'un processus, similaire au rognage.
Wikipédia:
Winsorising ou Winsorisation est la transformation des statistiques en limitant les valeurs extrêmes dans les données statistiques pour réduire l'effet des valeurs aberrantes éventuellement fausses.
Nous n'avons besoin que d'un centile, ici nous avons utilisé 1,5 sigma.
Dans l'article référencé, ils utilisent la médiane pour winsoriser, puis utilisent les données winsorisées pour mieux prédire le centre et la propagation.Ils winsorisent ensuite à nouveau pour encore mieux prédire le centre et la propagation.Ici, nous winsorisons pour obtenir une moyenne précise robuste / écart type.
La constante d'accord est utilisée dans les estimations M de Huber.Ce processus est le contraire, à la place, vous utilisez des estimations M pour obtenir une moyenne précise et un écart type robustes pour ensuite winsoriser les données.Lorsque K tend vers l'infini, la moyenne de l'estimation M = moyenne.Lorsque K s'approche de 0, la moyenne de l'estimation M = médiane.
Vous pouvez voir la page 16 de cette présentation http://www.bauer.uh.edu/rsusmel/phd/ec1-25.pdf
Donc, pour répondre à votre question, la constante de réglage K n'est pas utilisée car nous n'avons pas utilisé les estimations M de Huber.
Re : Existe-t-il un moyen d'automatiser/de scripter le processus Winsor de filtrage des valeurs aberrantes ?Pour l'exemple du dossier technique AMC sur lequel le code de ce fil est basé, quelle est la constante de réglage k ?J'ai vu les équations théoriques liées à la constante d'accord, mais je n'ai rien vu qui décrit la windsorisation +/- n*sigma, et sigma_new = x * stddev(data), où (je suppose que) n et x sont liés à la constante d'accord.
Merci,
Mike
Re : Existe-t-il un moyen d'automatiser/de scripter le processus Winsor de filtrage des valeurs aberrantes ?Essentiellement, ce que nous faisons, c'est tenir compte des surestimations de la médiane/MAD.Dans notre exemple d'ensemble de données, l'utilisation de la médiane/MAD dans le processus de winzorisation ajuste trop le point aberrant.
x_orig = [ 4.5 , 4.9 , 5.6 , 4.2 , 6.2 , 5.2 , 9.9 ] ;
estimations médianes et folles :
moyenne = 5,2 ; et sigma = 1,05 ;
l'utilisation de ces estimations modifie les données :
x_firstpass = [ 4.5 , 4.9 , 5.6 , 4.2 , 6.2 , 5.2 , 6.775 ] ;
Ces données nous donnent une meilleure approximation de notre moyenne et de notre sigma :
moyenne ajustée = 5,34 ; sigma = 1,04 ;
Si nous utilisons les meilleures estimations pour winzoriser l'ensemble de données, cela conduirait à :
x_secondpass = [ 4.5 , 4.9 , 5.6 , 4.2 , 6.2 , 5.2 , 6.905 ] ;
Cependant, si nous utilisons x au lieu de x_orig, le code ne trouvera pas le point aberrant 9,9 pour l'ajuster en conséquence, b/c 6,775 n'est pas aberrant lorsque la moyenne = 5,34 et sigma = 1,04.
ainsi:
x_secondpass = [ 4.5 , 4.9 , 5.6 , 4.2 , 6.2 , 5.2 , 6.775 ] ;
la moyenne et le sigma seront les mêmes :
moyenne ajustée = 5,34 ; sigma = 1,04 ;
sigma - sigma_ancien = 0
et notre convergence croira qu'elle est terminée.
tl:dr - Si vous essayez de trouver le point zéro optimal, votre code doit être suffisamment robuste pour fonctionner dans les deux sens.
Re : Existe-t-il un moyen d'automatiser/de scripter le processus Winsor de filtrage des valeurs aberrantes ?Je ne comprends pas exactement le x=x_orig.
Il semble que cela créerait une boucle infinie ; mais cela fonctionne donc je ne peux pas discuter avec cela.
merci!
Re : Existe-t-il un moyen d'automatiser/de scripter le processus Winsor de filtrage des valeurs aberrantes ?Ce code l'a fait pour moi !!Merci!!!
Re : Existe-t-il un moyen d'automatiser/de scripter le processus Winsor de filtrage des valeurs aberrantes ?Merci!
Re : Existe-t-il un moyen d'automatiser/de scripter le processus Winsor de filtrage des valeurs aberrantes ?Oui oui.Nous voudrions exécuter le processus de winsorisation sur l'ensemble de données d'origine avec la moyenne ajustée et le sigma changeant.L'ajout de x=xorig est correct.Comme je l'ai dit, je l'ai codé rapidement.
Quant à faire correspondre le papier:
Étant donné que l'ensemble de données n'a qu'un seul degré de liberté (quelle valeur approcher de la valeur aberrante), le sigma et la moyenne sont fixés en fonction de la winsorisation.Compte tenu de ce fait, il n'y a aucun moyen d'obtenir une moyenne de 5,36 ET un sigma de 1,15. 5,386 et 1,145 arrondis au deuxième chiffre donneraient 5,39 et 1,15. Ainsi, m La meilleure hypothèse est qu'il s'agit d'une simple faute de frappe, et non d'une mathématique erreur.Étant donné l'exactitude de l'article jusqu'à ce point, et qu'il provient du comité des méthodes analytiques de la Royal Society of Chemistry, je leur accorderai le bénéfice du doute.
Re : Existe-t-il un moyen d'automatiser/de scripter le processus Winsor de filtrage des valeurs aberrantes ?C'est essentiellement ce que j'avais, même si j'avais tout au format tableau pour pouvoir inspecter les données à chaque itération. Le vôtre est plus propre, alors j'espère que cela ne vous dérange pas que je l'ai un peu modifié. J'ai remplacé la boucle for() par la fonction Loc car elle pourrait être plus efficace au cas où quelqu'un d'autre l'utiliserait pour de grands ensembles de données. (Avertissement, je n'ai utilisé cette fonction qu'une ou deux fois... j'espère que c'est le bon choix.)
Lorsque j'ai exécuté votre fonction et la mienne, j'ai constaté qu'elle convergeait en 1 itération avec une moyenne de 5,339 et un sigma de 1,044. Le document semble indiquer qu'il faudrait plusieurs itérations. Je pensais qu'ils voulaient dire même pour cet ensemble de données, mais peut-être qu'ils généralisaient. Ils poursuivent en disant que la moyenne estimée par Huber est de 5,36 et que le sigma est de 1,15. Je n'ai pas été en mesure de reproduire cette moyenne estimée, mais lorsque j'ai remplacé les données 'x' par x_orig (données d'origine) à chaque itération, j'ai obtenu une moyenne de 5,386 et un sigma de 1,1459. Vous pouvez voir la ligne dans le code ci-dessous pour activer/désactiver cela. Cela ne semble pas vraiment être la bonne façon d'itérer quelque chose, mais je ne sais pas vraiment où je me suis trompé pour pouvoir calculer cela. Pardonnez les erreurs de chiffres sig mais je voulais en montrer plus sur le contenu des variables ici.
Du papier:

les noms par défaut ici ( 1 ) ;
effacer le journal () ;
//Ensemble de données sur papier
x_orig = [ 4.5 , 4.9 , 5.6 , 4.2 , 6.2 , 5.2 , 9.9 ] ;
X = [ 4.5 , 4.9 , 5.6 , 4.2 , 6.2 , 5.2 , 9.9 ] ;
//Déterminer la médiane et le sigma robuste (MAD)
moyenne = quantile ( .5 , X ) ;
y = Abdos ( X - moyenne ) ;
FOU = quantile ( .5 , y ) ;
sigma = FOU * 1.5 ;
sigmaold = 0 ;
//Converger
Alors que ( Abdos ( sigma - sigmaold ) > 2e-16 ,
//x = x_origine ; // essayez d'activer/désactiver ceci
X [ Loc ( X > ( moyenne + 1.5 * sigma ))] = moyenne + 1.5 * sigma ;
X [ Loc ( X < ( moyenne - 1.5 * sigma ))] = moyenne - 1.5 * sigma ;
méchant vieux = moyenne ;
sigmaold = sigma ;
moyenne = Moyenne ( X ) ;
sigma = 1.134 * Dév Std ( X ) ;
montrer ( moyenne , sigma ) ;
) ;
Merci,
Mike
Re : Existe-t-il un moyen d'automatiser/de scripter le processus Winsor de filtrage des valeurs aberrantes ?Champs CH : pour répondre à votre question initiale : Oui, il existe un moyen d'automatiser le filtrage des valeurs aberrantes.En fait, il existe un nombre très important (voire infini) de voies.
Le msharp script (moyenne des données originales de 5,785 avec JMP Robust Mean/Huber Center de 5,735) donne une moyenne winsorisée de 5,339. Si vous voulez vraiment descendre dans le terrier du lapin, un 12A One-Step Hampel W-Estimator (une moyenne robuste recommandée par Andrews, DF, et. al (1972); Estimations robustes de l'emplacement : enquête et avancées ; Princeton University Press) donne 5,256 sur les mêmes données.
Est-ce préoccupant que toutes ces mesures de localisation soient si différentes sur les mêmes données ?Pas vraiment.Comme l'a dit saint Grégoire le faiseur de miracles, "Ce qui est différent n'est pas le même."Les chercheurs réfléchis n'utiliseront pas la moyenne sans au moins une certaine forme de procédure de rejet raisonnable.Ce serait formidable si cette procédure raisonnable était facilement implémentée dans une fonction JMP qui pourrait être appelée à partir d'un script, mais sans que ce soit une option, le script Winsorizing de msharp serait une excellente alternative, tant que vous identifiez la méthode utilisée et que vous tenez également compte des avertissements antérieurs de "mauvais goût et mauvaise pratique".
Bonne journée !
Re : Existe-t-il un moyen d'automatiser/de scripter le processus Winsor de filtrage des valeurs aberrantes ?Voici mon code rapide suivant le papier exact:
//Ensemble de données sur papier
x = [4.5,4.9,5.6,4.2,6.2,5.2,9.9] ;
// Déterminer la médiane et le sigma robuste (MAD)
moyenne = quantile(.5,x);
y = abs(x - moyenne);
MAD = quantile(.5,y);
sigma = MAD*1,5 ;
sigmaold = 0 ;
//Converger
tandis que(abs(sigma - sigmaold) > 2e-16,
pour(i=1,i<=nlignes(x),i++,
si(x
X = moyenne-1,5*sigma
);
si(x >moyenne+1,5*sigma,
X = moyenne+1,5*sigma
);
);
moyen vieux = moyen ;
sigmaancien = sigma ;
moyenne = moyenne(x);
sigma = 1,134*écart type(x);
);
//Évaluer
imprimer(x);
Re : Existe-t-il un moyen d'automatiser/de scripter le processus Winsor de filtrage des valeurs aberrantes ?J'ai suivi la méthode Huber décrite dans l'article AMC auquel msharp renvoie.Le script n'était pas trop mal, le plus dur est de savoir si j'ai bien interprété l'algorithme.Il semblerait que lorsque j'itère (disons N fois) et que je mette à jour le tableau de données avec une nouvelle valeur de chapeau moyen +/- 1,5 x sigma-hat, que pour la ième itération, j'utiliserais le tableau de données de i-1 mais cela ne fonctionne pas pour moi. J'obtiens de meilleurs résultats en mettant toujours à jour les données d'origine (i = 0) tout en utilisant le chapeau moyen et le chapeau sigma mis à jour.Meilleurs résultats mais semble faux. Quelqu'un a-t-il de l'expérience dans la mise en œuvre de cet algorithme ?
D'ailleurs, selon cette page ( Le rapport de distribution ), la moyenne robuste / l'écart type de JMP dans la plate-forme de distribution utilise l'estimation Huber M, mais je ne sais pas comment ils sont windsorizing. Mon script produit des résultats similaires dans certains cas, et pas si similaires dans d'autres. Mais comme je l'ai dit plus haut, je ne sais pas si je le fais correctement.
Merci,
Mike
Re : Existe-t-il un moyen d'automatiser/de scripter le processus Winsor de filtrage des valeurs aberrantes ?Il existe de nombreuses façons de calculer la moyenne robuste et l'écart type robuste.L'article que je référence montre comment calculer la médiane (par définition est une moyenne robuste) et MAD (écart type robuste).Ce sont les plus basiques.Cependant, toute mesure qui calcule le centre et la propagation et qui résiste au changement en raison de données aberrantes peut être considérée comme une moyenne robuste ou une évolution type robuste et il existe certainement des algorithmes plus complexes que l'approche médiane/MAD.
La raison pour laquelle j'ai choisi de partager cet article est qu'il montre les bases du processus de Winsorizing en utilisant la médiane/MAD facile à comprendre.Si je devais programmer le processus à partir de zéro, je commencerais ici.
Je ne suis pas un programmeur JMP, donc je ne connais pas la méthode réelle qu'ils utilisent. mais je doute qu'ils utilisent la méthode décrite dans cet article.Ce document est vraiment utile pour comprendre les bases.Le document lui-même énonce la plupart des défauts, celui qui ressort le plus pour un programmeur est la lenteur de la convergence.
Re : Existe-t-il un moyen d'automatiser/de scripter le processus Winsor de filtrage des valeurs aberrantes ?Pour Champs CH : Je comprends mieux maintenant.Ce n'est pas la SEULE procédure robuste qui n'est pas facilement scriptable !Les moyennes robustes et l'écart type robuste de la plate-forme de distribution ne sont pas non plus des fonctions disponibles pour JSL.Veuillez consulter la liste de Noël de l'année dernière pour le Père Noël...
Pour msharp : Lorsque j'ai demandé à JMP une référence pour la moyenne robuste et l'écart type robuste, le développeur m'a dirigé vers Huber, PJ (1973) ; « Régression robuste : asymptotiques, conjectures et Monte Carlo » ; The Annals of Statistics, Vol 1, No. 5, pp799-821, qui détaillent des procédures substantiellement différentes de la référence que vous avez citée.Peter Huber est un titan des statistiques robustes, et ses livres plus modernes sur le sujet (Robust Statistics 2004) chantent les louanges des estimations M (que le document Annals a également détaillé), donc je ne sais pas si JMP fait vraiment le Winsorizing vous faites référence.Est ce que c'est vraiment?
Les estimations de Huber M ne semblent pas trop amusantes à écrire à partir de zéro.D'où la demande de liste de Noël.
Re : Existe-t-il un moyen d'automatiser/de scripter le processus Winsor de filtrage des valeurs aberrantes ?En général, il est considéré comme un mauvais goût et une mauvaise pratique de filtrer les valeurs aberrantes sans en connaître la cause.Même lorsqu'une cause est connue, l'utilisation d'un critère de filtrage qui ne s'applique pas à votre ensemble de données introduira encore plus d'erreurs que de simplement laisser les valeurs aberrantes dans l'ensemble de données.Des questions importantes doivent être posées, les données sont-elles symétriques ? biaisé ? normal? y a-t-il un masquage ?Votre ensemble de données est-il vraiment composé de deux distributions différentes ?Serait-il préférable de les diviser?Il est impossible de vraiment connaître vos données sans les consulter.L'automatisation du filtrage des valeurs aberrantes conduira à de fausses conclusions.Une pratique aussi mauvaise que le "p-hacking".
Bien sûr, cela ne signifie pas qu'il n'y a pas de raisons d'automatiser un processus.Par exemple, utiliser un critère de filtrage des valeurs aberrantes pour automatiser la mise à jour des limites de contrôle sur une carte de contrôle où les données sont visualisées/surveillées au fil du temps.
Si vous souhaitez l'automatiser, vous devrez écrire le script.Tu peux voir http://www.rsc.org/images/robust-statistics-technical-brief-6_tcm18-214850.pdf pour plus d'informations sur ce que fait réellement la méthode Huber.J'espère que cela t'aides.
Re : Existe-t-il un moyen d'automatiser/de scripter le processus Winsor de filtrage des valeurs aberrantes ?La plupart des actions dans JMP peuvent être scriptées en allant dans le triangle rouge et en allant dans script > COPY SCRIPT
De cette façon, vous pouvez coller ces morceaux de scripts dans un programme automatisé plus grand.
Cela est vrai pour chaque action/fonction JMP, etc., à l'EXCEPTION de la fonction Robust Outlier Filter sous :
COL > UTILITAIRES DE MODÉLISATION > EXPLORER LES OUTLIERS
Je souhaite automatiser le filtre Huber avec K = 3 sur un ensemble de paramètres donné.Je vais le faire encore et encore.
Je veux l'automatiser pour alléger ma charge de travail.
Re : Existe-t-il un moyen d'automatiser/de scripter le processus Winsor de filtrage des valeurs aberrantes ?Votre question me laisse perplexe.La winsorisation des valeurs aberrantes est généralement définie comme la définition des valeurs extrêmes à un centile spécifié, sans les exclure.C'est analogue à l'écrêtage dans le traitement du signal.L'exclusion des lignes aberrantes n'est généralement pas Winsorising.
Cela dit, toute approche algorithmique que votre cœur désire peut être scénarisée.Si vous écrivez un script pour le faire, utilisez des matrices.Ils s'exécutent beaucoup plus rapidement, en particulier avec de grands ensembles de données.