Ausreißer automatisch auswählenIch habe 7000 Zeilen, die aus mehreren Stapeln bestehen.Ich mache eine stapelweise Verteilung und verwende den Ausreißer-Boxplot, um nach Ausreißern zu suchen.Aber ich habe mehr als 100 Stapel. Gibt es eine Möglichkeit, JMP automatisch auswählen zu lassen, welche Zeilen Ausreißer sind?
Betreff: Ausreißer automatisch auswählenIst das was du brauchst?
Names Default To Here( 1 );
// make a sample data table
dt = New Table( "Data",
add rows( 10000 ),
New Column( "it", Numeric, Ordinal, Format( "Best", 8 ), Formula( Row() ) ),
New Column( "Batch", Numeric, Ordinal, Format( "Best", 8 ), formula( Random Integer( 110 ) ) ),
New Column( "y1", Numeric, Continues, Format( "Best", 8 ), formula( Random Lognormal( :Batch / 10, 5 ) ) ),
New Column( "y2", Numeric, Continues, Format( "Best", 8 ), formula( Random Lognormal( :Batch / 10, 5 ) ) ),
New Column( "Out",
Numeric,
Ordinal,
Format( "Best", 8 ),
Set Property( "Value Colors", {0 = -13977687, 1 = -4222943} ),
Color Cell by Value,
formula( 0 )
),
New Column( "Outy1",
Numeric,
Ordinal,
Format( "Best", 8 ),
Set Property( "Value Colors", {0 = -13977687, 1 = -4222943} ),
Color Cell by Value,
formula( 0 )
),
New Column( "Outy2",
Numeric,
Ordinal,
Format( "Best", 8 ),
Set Property( "Value Colors", {0 = -13977687, 1 = -4222943} ),
Color Cell by Value,
formula( 0 )
),
);
dt << run formulas;
Column( dt, "it" ) << delete formula;
Column( dt, "Batch" ) << delete formula;
Column( dt, "y1" ) << delete formula;
Column( dt, "y2" ) << delete formula;
Column( dt, "Out" ) << delete formula;
Column( dt, "Outy1" ) << delete formula;
Column( dt, "Outy2" ) << delete formula;
// now we get to work
// make a list of batches
byvarlist = Associative Array( dt:Batch ) << get keys;
// make a list of columns
cols = dt << get column names( Continuous ); //List all Numeric columns
// loop through the batches
For( i = 1, i <= N Items( byvarlist ), i++,
// select each batch
dt << select where( dt:Batch == byvarlist[i] );
// subset each batch
subdt = dt << Subset( Selected Rows( 1 ) );
// clear selection for smoth workflow
dt << clear select;
// finde outliers in each variable within each batch
For( ii = 1, ii <= N Items( cols ), ii++,
out = Eval(
Parse(
"subdt << get rows where(
subdt:" || Char( cols[ii] ) || " > Col Quantile( subdt:" || Char( cols[ii] ) ||
", 0.75 ) + 1.5 * (Col Quantile( subdt:" || Char( cols[ii] ) || ", 0.75 ) - Col Quantile( subdt:" || Char( cols[ii] ) ||
", 0.25 )) | subdt:" || Char( cols[ii] ) || " <
Col Quantile( subdt:" || Char( cols[ii] ) ||
", 0.25 ) - 1.5 * (Col Quantile( subdt:" || Char( cols[ii] ) || ", 0.75 ) - Col Quantile( subdt:" || Char( cols[ii] ) ||
", 0.25 )));"
)
)`;
Eval( Parse( "column (subdt, \!"Out" || Char( cols[ii] || "\!" )[" || Char( out ) || "] = 1;" ) ) );
// also indicate the global outlier
Column( subdt, "Out" )[out] = 1;
//wait (0.00001);
);
// update original data table with new information for the batch
subdt << delete columns( "Batch" );
subdt << delete columns( cols );
dt << Update( With( subdt ), Match Columns( :it = :it ) );
Close( subdt, No Save );
//Wait( 0.00001 );
);
dt << color by column( :Out );
Betreff: Ausreißer automatisch auswählenNur noch eine kurze Frage. Ich habe etwa 90 Spalten gelöscht. Kann das funktionieren?
mit n Spalten oder müssen es immer 3 Spalten sein?
Betreff: Ausreißer automatisch auswählenScheint zu funktionieren.Danke.
Betreff: Ausreißer automatisch auswählenSehen Sie jetzt, ob es für Sie funktioniert ...
Das von Ihnen gesendete Skript war überhaupt nicht an Ihre Daten angepasst...
Betreff: Ausreißer automatisch auswählenIm Anhang finden Sie ein Beispiel meiner Daten, mit denen ich dies verwenden wollte.Idealerweise würde dies für jedes Y geschehen.
Betreff: Ausreißer automatisch auswählenMeine Formel reagiert nicht auf die Chargengröße. Darüber hinaus funktioniert es auch dann, wenn die Batch-Spalte aus Zeichen (und nicht numerisch) besteht.
Können Sie ein Muster posten, auch wenn es nur zwei oder drei verschiedene Chargen sind?Betreff: Ausreißer automatisch auswählenWenn ich es ausführe, erhalte ich eine Tabelle, und hier ist ein Schnappschuss davon, dieser Wille
funktioniert, da ich Zeilen auswählen kann, bei denen Out = 1 ist, wenn ich alle auswählen möchte
Ausreißer.
[Bild: image.png]
Betreff: Ausreißer automatisch auswählenWenn Sie das gesamte Skript ausführen, können Sie sehen, dass Sie das bekommen, was Sie wollten (nur nicht bei Ihren Daten)?Betreff: Ausreißer automatisch auswählenIch kopiere alles von // jetzt machen wir uns an die Arbeit. Wenn ich das einführe
meine eigene Tabelle, es wird nur eine Tabelle mit nur einem Stapel erstellt. Ich muss sagen
Eine Sache ist, dass die Anzahl der Punkte pro Charge nicht konsistent ist. Ich tue
Ich weiß nicht, ob das wichtig ist.
Betreff: Ausreißer automatisch auswählenDas hat bei mir funktioniert.
Am Ende sollten Sie 3 Tische haben. Original mit allen Zeilen, eine mit nur Ausreißern und die letzte ohne Ausreißer. Lass mich wissen ob es funktioniert.
Names Default To Here( 1 );<BR /><BR />// make a sample data table<BR />dt = New Table( "Data",<BR /> add rows( 10000 ),<BR /> New Column( "it", Numeric, Continues, Format( "Best", 8 ), Formula( Row() ) ),<BR /> New Column( "Batch", Numeric, Ordinal, Format( "Best", 8 ), formula( Random Integer( 110 ) ) ),<BR /> New Column( "y", Numeric, Continues, Format( "Best", 8 ), formula( Random Lognormal( :Batch / 10, 5 ) ) ),<BR /> New Column( "Out", Numeric, Ordinal, Format( "Best", 8 ), formula( 0 ) ), <BR /><BR />);<BR /><BR />dt << run formulas;<BR />Column( dt, "it" ) << delete formula;<BR />Column( dt, "Batch" ) << delete formula;<BR />Column( dt, "y" ) << delete formula;<BR />Column( dt, "Out" ) << delete formula;<BR /><BR />// now we get to work<BR />dt = Current Data Table();<BR />byvarlist = Associative Array( dt:Batch ) << get keys;<BR />For( i = 1, i <= N Items( byvarlist ), i++,<BR /> dt << select where( dt:Batch == byvarlist[i] );<BR /> subdt = dt << Subset( Selected Rows( 1 ) );<BR /> dt << clear select;<BR /> subdt:Out << set formula(<BR /> If(<BR /> :y > Col Quantile( :y, 0.75 ) + (Col Quantile( :y, 0.75 ) - Col Quantile( :y, 0.25 )) * 1.5, 1,<BR /> :y < Col Quantile( :y, 0.25 ) - (Col Quantile( :y, 0.75 ) - Col Quantile( :y, 0.25 )) * 1.5, 1,<BR /> 0<BR /> )<BR /> );<BR /> subdt << run formulas;<BR /> Column( subdt, "Out" ) << delete formula;<BR /> keep = {"it", "Out"};<BR /> todelete = subdt << get column names( "string" );<BR /> For( icol = 1, icol <= N Items( keep ), icol++,<BR /> Remove From( todelete, Contains( todelete, Keep[icol] ), 1 )<BR /> );<BR /> subdt << delete columns( todelete );<BR /> dt << Update( With( subdt ), Match Columns( :it = :it ) );<BR /> Close( subdt, No Save );<BR /> Wait( 0.00001 );<BR />);<BR />selected = dt << select where( :Out == 1 );<BR />selected << Markers( 11 );<BR />selected << Marker Size( 8 );<BR />selected << Row Colors( red );<BR />dt << clear select;<BR /><BR />dt << select where( dt:Out == 1 );<BR />Outdt = dt << Subset( Selected Rows( 1 ) );<BR />dt << clear select;<BR /> <BR />Wait( 0.00001 );<BR /> <BR />dt << select where( dt:Out == 0 );<BR />indt = dt << Subset( Selected Rows( 1 ) );<BR />dt << clear select;<BR /><BR />
Betreff: Ausreißer automatisch auswählenIch bin mir nicht sicher, ob Sie meine letzte Nachricht erhalten haben, die ich gerade gesendet habe. Ich habe eine seltsame Nachricht erhalten
automatische E-Mail-Rücksendung. Ich habe das zweite Problem behoben und es funktioniert immer noch
gleiche Sache.
Betreff: Ausreißer automatisch auswählenIn der for-Schleife ist dies nicht der FallBetreff: Ausreißer automatisch auswählenMeine Batch-Spalte ist in Großbuchstaben geschrieben:
[Bild: image.png]
Betreff: Ausreißer automatisch auswählenBeim Spaltennamen muss die Groß-/Kleinschreibung beachtet werden. Seien Sie konsistent, wenn Sie :Batch oder :batch verwendenBetreff: Ausreißer automatisch auswählenAls ich dies ausführte, wurde nur mit dem ersten Stapel eine Teilmengentabelle erstellt. ICH
habe dies geändert, um meine offene Tabelle zu erstellen:
dt = currentdatatable();
byvarlist = Associative Array( dt:Batch ) << get keys;
For( i = 1, i <= N Items( byvarlist ), i++,
dt << select where( dt:batch == byvarlist[i] );
subdt = dt << Subset( Selected Rows( 1 ) );
dt << clear select;
subdt:Out << set formula(
If(
:y > Col Quantile( :y, 0.75 ) + (Col Quantile( :y, 0.75 )
-Col Quantile( :y, 0.25 )) * 1.5, 1,
:y < Col Quantile( :y, 0.25 ) - (Col Quantile( :y, 0.75 )
-Col Quantile( :y, 0.25 )) * 1.5, 1,
0
)
);
subdt << run formulas;
Column( subdt, "Out" ) << delete formula;
keep = {"it", "Out"};
todelete = subdt << get column names( "string" );
For( icol = 1, icol <= N Items( keep ), icol++,
Remove From( todelete, Contains( todelete, Keep[icol] ), 1 )
);
subdt << delete columns( todelete );
dt << Update( With( subdt ), Match Columns( :it = :it ) );
Close( subdt, No Save );
);
selected = dt << select where( :Out == 1 );
selected << Markers( 11 );
selected << Marker Size( 8 );
selected << Row Colors( red );
dt << clear select;Betreff: Ausreißer automatisch auswählenLass mich es nochmal versuchen
Es ist keine elegante Lösung, aber die Schritte sind klar und leicht zu ändern
Names Default To Here( 1 );
// make a sample data table
dt = New Table( "Data",
add rows( 10000 ),
New Column( "it", Numeric, Continues, Format( "Best", 8 ), Formula( Row() ) ),
New Column( "Batch" ,Numeric, Ordinal, Format( "Best", 8 ), formula( random integer (110) )),
New Column( "y" ,Numeric, Continues, Format( "Best", 8 ), formula( random log normal (:Batch / 10, 5) )),
New Column( "Out" ,Numeric, Ordinal, Format( "Best", 8 ), formula (0)),
);
dt << run formulas;
column (dt, "it") << delete formula;
column (dt, "Batch") << delete formula;
column (dt, "y") << delete formula;
column (dt, "Out") << delete formula;
// now we get to work
// extract the list of the by variable levels
byvarlist = Associative Array( dt:Batch ) << get keys;
// run across each group and locate the outliers
For( i = 1, i <= N Items( byvarlist ), i++,
// produce a subset data table for each group using selection method
dt << select where (dt:batch == byvarlist[i]);
subdt = dt << Subset(
Selected Rows( 1 ),
);
dt << clear select;
// indicate outliers within the group
subdt:Out << set formula(
If(
:y > Col Quantile( :y, 0.75 ) + (Col Quantile( :y, 0.75 ) -
Col Quantile( :y, 0.25 )) * 1.5, 1,
:y < Col Quantile( :y, 0.25 ) - (Col Quantile( :y, 0.75 ) -
Col Quantile( :y, 0.25 )) * 1.5, 1,
0
)
);
subdt << run formulas;
// prepare table for updating original by removing formulas and columns that are not needed
column (subdt, "Out") << delete formula;
keep = {"it", "Out"};
todelete = subdt << get column names( "string" );
For( icol = 1, icol <= N Items( keep ), icol++,
Remove From( todelete, Contains( todelete, Keep[icol] ), 1 )
);
subdt << delete columns( todelete );
// update
dt << Update(
With( subdt ),
Match Columns( :it = :it )
);
Close( subdt, No Save );
);
// now the original data has all the outliers indicated in a column
selected = dt << select where (:Out == 1);
selected << Markers( 11 );
selected << Marker size ( 8 );// not working???
selected << Row Colors( red );// not working???
dt << clear select;
Betreff: Ausreißer automatisch auswählenVersuchen Sie, die Tabelle nach Stapel aufzuteilen und nach eindeutigem Wert zu gruppieren (damit keine Zeilen verloren gehen), und führen Sie dann mein Skript aus.
Ansonsten benötigen Sie eine andere Strategie als die, die ich anbiete.
macht das Sinn?Betreff: Ausreißer automatisch auswählenIch kann das mit meinen Daten nicht zum Laufen bringen. Ich habe die Höhe und Gewichtung meiner Spalten geändert und die beiden Zeilen entfernt, in denen die Tabelle geöffnet wurde, und sie in meine Tabelle eingebettet, aber es heißt, dass die Auswertungen durchgeführt wurden, aber nichts bewirken.
Ich brauche auch etwas, das das by und dies für jede Charge einzeln verwendet.
Betreff: Ausreißer automatisch auswählenHallo,
vielleicht gibt es hier eine Lösung:
https://community.jmp.com/t5/Discussions/How-to-extract-month-in-words-from-a-date-value-how-to-change/mp/19362/highlight/true#M17650
Ron
Betreff: Ausreißer automatisch auswählenIch habe das Grubb-Skript ausprobiert.Dies zeigt nur die Ausreißer und hebt die Zeilen nicht hervor, oder?Ich brauche etwas, das die Zeilen hervorhebt.
Betreff: Ausreißer automatisch auswählenDas Screening von Ausreißern funktioniert nicht, wenn ich eine Variable im by benötige.Was ich tun möchte, ist, dass mein Y in einer Spalte steht.Eine weitere Spalte trägt die Bezeichnung „Batch“.Ich gebe Batch ein und nehme die Anzahl der Verteilungen vor, während ich Batches durchführe.Sagen wir also 100 Ausschüttungen.Ich möchte, dass ein Skript alle Ausreißer in allen 100 Distributionen hervorhebt.Im Idealfall werden nur die Zeilen hervorgehoben, sodass ich meine eigene Farbe auswählen kann, da ich Farben für verschiedene Dinge verwende.Macht das jetzt mehr Sinn?
Betreff: Ausreißer automatisch auswählenWenn Sie das gesucht hätten Dateiaustausch Teil der JMP-Community für ' Ausreißer ,‘ hätten Sie diese beiden Hilfsskripte gefunden:
Natürlich muss die statistische Grundlage für jeden dieser Tests zu Ihrer Situation und Ihrem Kriterium passen.
Betreff: Ausreißer automatisch auswählenIch weiß nicht genau, wonach Sie suchen.Wenn Sie beim Anzeigen der Ausgabe die Zeilen für eine bestimmte Verteilung auswählen möchten, können Sie einfach über die angezeigten Ausreißer-Datenpunkte im Ausreißer-Boxplot ziehen, um die Ausreißer-Datenpunkte auszuwählen.

Wenn Sie jedoch von Spalte zu Spalte gehen und Ausreißerzeilen auswählen möchten, könnte dies mit einem einfachen Skript erledigt werden. Beachten Sie jedoch, dass die Zeilenauswahl alle Spalten umfasst und Sie am Ende ausgewählte Zeilen erhalten, in denen eine der Spalten ausgewählt ist .
Was Sie vielleicht wirklich wollen, ist ein einfaches Skript, das alle einzelnen Zellen, die Ausreißer sind, einfärbt.Vielleicht rot, wenn sie zu weit über dem Mittelwert liegen, und orange, wenn sie Ausreißer unter dem Mittelwert sind.
Können Sie uns bitte genau erklären, wonach Sie suchen?
Eine bessere Antwort finden Sie in Dans Antwort.
Betreff: Ausreißer automatisch auswählenVielleicht möchten Sie unter Analysieren > Screening > Ausreißer untersuchen nachsehen.