Sono stato interessato a lavorare con gli inlier poiché lo vedo sempre più un problema con molti dei dati che guardo. Ti chiedi se qualcuno ha avuto clienti che lo mettono in evidenza come punto di riferimento? Questi inlier non sono qualcosa che lo strumento di esplorazione degli outlier gestirà bene in molti casi. Quindi finisco per fare una combinazione di una o più di queste tecniche. Apri suggerimenti su altre tattiche qui.
Ho avuto un esempio dei conteggi degli utenti dei dati dei nostri clienti. Gran parte dei dati erano realistici in termini di # utenti, ma c'erano questi blocchi di conteggi degli utenti e 100, 200, 500, 2500 ecc. Questi sono solo alcuni degli utenti con un numero massimo di contatti, ma non un conteggio accurato di utenti in un sito. Sono invertiti e dovrebbero davvero mancare o essere trattati in un altro modo. Se conosci questi valori, che sono inlier (facili da individuare in Graph Builder o distirbution) puoi fare qualcosa del genere:
For Each Row(
:Name( "Potassium (mg)" ) = Match( :Name( "Potassium (mg)" ),
200, .,
:Name( "Potassium (mg)" )
)
);
Ciò eliminerà questi valori errati dalla riga in modo distruttivo (puoi anche passare a mancanti, utilizzare codici di valore mancanti o qualcosa del genere).
Uso anche ampiamente la proprietà della colonna di controllo dell'intervallo per cancellare i valori che dovrebbero essere omessi dall'analisi:
dt:Name( "Resting Calories (kcal)" ) << set property ("Range Check", LTLT( 1400, 2500 ) );
Questo, ad esempio, eliminerà i valori anomali nella parte alta e anche i giorni incompleti nella parte bassa.
Ma la codifica automatica dei valori che si verificano troppo frequentemente è ciò che mi interessa esplorare. In realtà penso che la ricodifica sia un buon strumento qui, inoltre genera lo script per cambiarli in mancanti ecc.
La ricodifica di una colonna numerica e l'ordinamento per conteggio forniscono un'istantanea di valori che potrebbero verificarsi troppo frequentemente o un pezzo di equipaggiamento che sta semplicemente sputando un valore predefinito. Nell'esempio sopra, il 1822 potrebbe essere sospetto e giustificare ulteriori indagini.
Immagino che il mio punto sia considerare alcuni degli altri strumenti come rilevatori anomali e anomali off-label, che possono essere molto utili.
Vale anche la pena notare che è possibile puntare e fare clic su questo da una ricerca nel menu principale + sostituire, se:
- Cerca su 0
- Sostituirlo con .
- Seleziona la casella "Abbina valore intero cella"
- Seleziona la casella "Cerca dati".
Questo è fantastico perché è semplice, ma un avvertimento (forse ... non sono sicuro che ciò accada molto nei set di dati "reali") è che non controlla il carattere / numerico ... quindi tutte le celle nelle colonne di caratteri contenenti solo "0", diventano "."
// get the continuous columns as a list of strings
dtcollist = dt << get column names( continuous, string );
// when doing lots of updates to the data table, use this to
// prevent the window being updated for each change
dt << Start Data Update();
For Each Row(
// Loop over each column within each row
// probably the same performance whichever way you do it
For( c = 1, c <= N Items( dtcollist ), c++,
AsColumn( dt, dtcollist[c] ) = Match( AsColumn( dt, dtcollist[c] ),
0, .,
AsColumn( dt, dtcollist[c] )
)
)
);
// Tell JMP it's okay to update the data in the window now
dt << End Data Update();
Questo è un frammento di codice davvero utile, specialmente per il set di dati che sto esaminando ora. Purtroppo la tabella dei dati ha 0s, il che significa che manca davvero. Questo script esaminerà tutte le colonne continue numeriche e cambierà tutti gli zeri in mancanti. Grazie Justin per aver contribuito a ottimizzare questo.
Anch'io uso Recode in questa tecnica che chiamerò "prescrizione off label" per correggere gli inlier.