So schreiben Sie ein Skript für den Wilcoxon-Rangsummentest für Tausende Funktionen

Hallo alle Experten, ich bin ein Benutzer von JMP. Ich schreibe, um zu lernen, wie man ein Skript schreibt, um Wilcoxon-Rangsummentestergebnisse für Tausende von Funktionen zu berechnen. Die Tabellen der Gruppierung und Features (von feature_1 bis feature_n) sind wie in der Abbildung oben beigefügt. Folgendes werde ich tun:
1) Wilcoson-Rangsummentest für „ Behandlung A vs. keine Behandlung“ für Feature_1 bis Feature_2000. Ich verstehe, dass ich die Funktion „Y an X anpassen“ verwenden muss. Das X sollte die Gruppierung (Behandlung) sein; und das Y sollte der Wert sein, der feature_1, 2...n entspricht.
2) Ich verstehe ganz genau, wie es geht. Der Code für jede Funktion sieht ungefähr so aus:
Fit-Gruppe(
Oneway( Y( :Feature_1 ), X( :Treatment ), Wilcoxon Test( 1 ) ),
Allerdings weiß ich nicht, wie ich ein Skript schreiben soll, damit es nur die Spaltenelemente „Keine Behandlung“ und „Behandlung A“ aufnimmt. und wie man es als Schleife laufen lässt, um Feature 1 und dann Feature 2 und bis Feature 2000 zu beenden.
Ich habe mein Bestes gegeben, um die Skript-Anleitung zu lesen. Allerdings kann ich nur das Grundkonzept verstehen und es nicht wirklich lösen. Ich wäre wirklich dankbar, wenn hier jemand zumindest mithelfen könnte.
Vielen Dank..
Am besten,
Windermere
Betreff: Wie schreibe ich ein Skript für den Wilcoxon-Rangsummentest für Tausende Funktionen?Ja...du hast recht. Ich sollte das $ nicht verwenden.
Danke
Ich glaube, dass sowohl Ihre als auch die von Jim jetzt funktionieren
Betreff: Wie schreibe ich ein Skript für den Wilcoxon-Rangsummentest für Tausende Funktionen?Endlich funktioniert es...
Das ist eine gute Lernerfahrung.
Danke
Windermere
Betreff: Wie schreibe ich ein Skript für den Wilcoxon-Rangsummentest für Tausende Funktionen?Denken Sie, Sie brauchen nur „C“ (nicht „$C“) am Anfang des Dateinamens der Datei, die Sie öffnen möchten.
Betreff: Wie schreibe ich ein Skript für den Wilcoxon-Rangsummentest für Tausende Funktionen?Hallo Jim, wenn ich versuche, einen Datensatz zu öffnen, der sich nicht in SAMPLE_DATA, sondern irgendwo unter den Fenstern befindet, zum Beispiel so: „C:\Benutzer\yuanyli4\Desktop\JMP TEST\Sheet1.jmp“
Soll ich es so schreiben?
dt= Open("$C:\Users\yuanyli4\Desktop\JMP TEST\Sheet1.jmp");
Danke
Betreff: Wie schreibe ich ein Skript für den Wilcoxon-Rangsummentest für Tausende Funktionen?dt = Open( "$C:\Users\yuanyli4\Desktop\JMP TEST\Sheet1.jmp" );
colList = dt << Get Column Names( Continuous );
dt2 = dt << Stack(
columns( colList ),
source Label Column( "Feature" ),
Stacked Data Column( "Data" ),
Output Table( (dt << getName) || "Stacked" )
);
Close( dt, NoSave );
ow = dt2 << Oneway(
Y( :Data ),
X( :Treatment ),
wilcoxon Test( 1 ),
By( :Feature )
);
firstOwRep = Report( ow[1] );
dt3 = firstOwRep[Table Box( 3 )] << makeCombinedDataTable;
dt3 << setName( "One Way Chisquare Results By Feature" );
Dies sind die Dinge, die ich auf der Grundlage der aktuellsten Vorschläge geschrieben habe.
Es funktioniert immer noch nicht... 
Wenn ich versuche, es auszuführen. Überhaupt keine Reaktion...
Betreff: Wie schreibe ich ein Skript für den Wilcoxon-Rangsummentest für Tausende Funktionen?Hier ist ein Beispiel dafür, wie Sie tun, was Sie wollen.Ich verwende eine Beispieldatentabelle, die viele kontinuierliche Variablen enthält.Ich ändere den Namen einer der fortlaufenden Spalten in „Feature_1“, um den Namen der Spalte nachzuahmen, auf die Sie abzielen.Anschließend lösche ich alle fortlaufenden Spalten aus der colList, die vor der Spalte „Feature_1“ erscheinen, und führe dann die Analyse für alle verbleibenden Spalten durch.
Names Default To Here( 1 );
/* Open a sample data table */
dt = Open( "$SAMPLE_DATA\semiconductor capability.jmp" );
// For illustration, change the name of one of the columns to "Feature_1"
Column( dt, 10 ) << set name( "Feature_1" );
/* Obtain a list of numeric/continuous column names */
colList = dt << Get Column Names( Continuous );
// Remove from the list of columns, all columns before the column called
// "Feature_1"
If( Contains( colList, Parse( "Feature_1" ) ) > 1,
colList = Remove( colList, 1, Contains( colList, Parse( "Feature_1" ) ) - 1 )
);
// Run the analysis
Fit Group(
Oneway( Y( Eval( colList ) ), X( :Wafer ), Wilcoxon Test( 1 ) ),
// If you want all of the outputs in a single row and you don't
// know how many there will be, a simple way to handle this is
// to just specify a large number
<<{Arrange in Rows( 200 )}
);
Bitte nehmen Sie sich die Zeit, den Scripting-Leitfaden durchzulesen, um zu erfahren, worum es beim Scripting geht
Hilfe==>Bücher==>Skripthandbuch
Betreff: Wie schreibe ich ein Skript für den Wilcoxon-Rangsummentest für Tausende Funktionen?Es tut mir leid. Es funktioniert immer noch nicht.
Ich frage mich, ob jemand in diesem speziellen Fall helfen kann. Es tut mir leid, dass ich nicht weiß, wie ich die Schleife von der Spalte mit dem Namen Feature_1 bis zum Ende schreiben soll. Ich hoffe wirklich, dass jemand erklären kann, wie man das Drehbuch dazu schreibt.
Danke
Betreff: Wie schreibe ich ein Skript für den Wilcoxon-Rangsummentest für Tausende Funktionen?Eine weitere zu berücksichtigende Option ist die JMP-Antwort-Screening-Funktion. Es wird kein Rangsummentest durchgeführt, sondern ein T-Test oder ein robuster Test (um Ausreißer abzuschwächen). Es läuft schnell, bietet eine Tabelle mit p-Werten, Diagramme für Signifikanz vs. Effektgrößen und verfügt vor allem über die Option „Ausgewählte anpassen“, sodass Sie ganz einfach Y x X der für Sie und dann Sie interessantesten Merkmale anpassen können könnte den Wilcoxon-Test für eine Teilmenge der 2000 Funktionen ausführen.
https://www.jmp.com/support/help/14/response-screening.shtml
Betreff: Wie schreibe ich ein Skript für den Wilcoxon-Rangsummentest für Tausende Funktionen?Jim hat Ihnen bereits großartige Hilfe und Anleitung gegeben.
Wenn ich das richtig verstanden habe, verfügen Sie möglicherweise über mehr als 2.000 Funktionen, daher ist es möglicherweise geringfügig effizienter, eine Schleife über diese zu vermeiden. Außerdem ist es nicht so toll, sich 2.000 Berichte anzusehen, daher müssen Sie die Ergebnisse wahrscheinlich auf irgendeine Weise zusammenfassen.
In diesem Fall können Sie die Schleife tatsächlich vermeiden, daher möchten Sie vielleicht verstehen, wie der folgende Code funktioniert, um Sie bei der Weiterentwicklung von JSL zu unterstützen. Im Allgemeinen ist das Stapeln der Daten und die Verwendung einer „By“-Variablen ein gutes Codierungsmuster, das Sie beachten sollten. Natürlich gibt es im Beispiel nur zwei „Merkmale“ (Höhe und Gewicht).
// Open a sample data table
dt = Open( "$SAMPLE_DATA\big class.jmp" );
// Obtain a list of column names containing the 'features'
colList = dt << Get Column Names( Continuous );
// Stack the data
dt2 = dt << Stack(
columns( colList ),
Source Label Column( "Feature" ),
Stacked Data Column( "Data" ),
Output Table( (dt << getName)||" Stacked" )
);
Close(dt, NoSave);
// Do the Wilcoxon tests all at the same time (this will be a list, due to the use of the 'By' variable)
ow = dt2 << Oneway( Y( :Data ), X( :sex ), Wilcoxon Test( 1 ), By(:Feature) );
// Get a link to the first report
firstOwRep = Report(ow[1]);
// Get the one way ChiSq results from ALL reports (features) into a single table
dt3 = firstOwRep[TableBox(3)] << makeCombinedDataTable;
dt3 << setName("One Way ChiSquare Results By Feature");
Wenn Sie einen statistischen Test tausendfach anwenden, müssen Sie natürlich berücksichtigen, dass die Fehlalarmrate zwangsläufig hoch sein wird.
Betreff: Wie schreibe ich ein Skript für den Wilcoxon-Rangsummentest für Tausende Funktionen?Vielen Dank und Sie haben absolut Recht, dass ich keine Ausbildung und Erfahrung im Schreiben von Drehbüchern habe.
Ich werde es noch einmal versuchen, muss auch lesen. Ich hoffe, es macht Ihnen nichts aus, wenn ich hier etwas poste, wenn ich es nicht verstehe ...
Nochmals vielen Dank für Ihre Geduld.
Am besten,
Windermere
Betreff: Wie schreibe ich ein Skript für den Wilcoxon-Rangsummentest für Tausende Funktionen?Unten finden Sie ein kommentiertes Skript, das Ihnen das geben sollte, was Sie wollen.
/* Open a sample data table */
dt = Open( "$SAMPLE_DATA\big class.jmp" );
/* Obtain a list of numeric/continuous column names */
colList = dt << Get Column Names( Continuous );
// If you run a Oneway analysis, and specify to Arrange in Rows
// and then save the script, it generates
/*
Fit Group(
Oneway( Y( :height ), X( :sex ) ),
Oneway( Y( :weight ), X( :sex ) ),
<<{Arrange in Rows( 200 )}
)
*/
// A little modification to include all of the columns that
// were extracted using the << Get Columns Names message, and
// the script below will give you what you want
Fit Group(
Oneway( Y( Eval( colList ) ), X( :sex ) ),
// If you want all of the outputs in a single row and you don't
// know how many there will be, a simple way to handle this is
// to just specify a large number
<<{Arrange in Rows( 200 )}
);
Alle Funktionen und Meldungen im obigen Skript sind mit Beispielen im Skriptindex dokumentiert
Hilfe==>Skriptindex
Die JSL-Strukturen und -Methoden sind im Scripting Guide dokumentiert
Hilfe==>Bücher==>Skripthandbuch
Es scheint jedoch, dass Ihre Programmierkenntnisse und -erfahrung derzeit begrenzt sind.Ich empfehle Ihnen dringend, sich eines der vielen Bücher zum Thema „Einführung in die Programmierung“ zu besorgen.Sie werden zwar kein Buch zum Thema „Einführung in die Programmierung für die JMP-Skriptsprache“ finden, aber was wirklich benötigt wird, ist das Erlernen der Programmierkonzepte.Sobald dies verstanden ist, wird der Wechsel zwischen den Sprachen in der Programmierwelt zu einer einfachen Angelegenheit des Erlernens der neuen Syntax der neuen Sprache.
Betreff: Wie schreibe ich ein Skript für den Wilcoxon-Rangsummentest für Tausende Funktionen?
/* Open a sample data table */
dt = Open( "$Sheet1.jmp" );
/* Obtain a list of numeric/continuous column names as strings */
colList = dt << Feature_1( Continuous, String );
For( i = 2, i <= N Items( colList ), i++, );
Oneway(
Y( :colList ),
X( :Treatment ),
Wilcoxon Test( 1 )
);
<<{Arrange in Rows( 1 )};
Dies ist das Skript, das ich verwendet habe.
Bedauerlicherweise,
Es funktioniert überhaupt nicht..
Keine Antwort.
Weiß jemand warum?
Danke
Betreff: Wie schreibe ich ein Skript für den Wilcoxon-Rangsummentest für Tausende Funktionen?Hallo Txnelson,
Ich danke Ihnen für Ihre Hilfe. Ich möchte nur sicherstellen, dass ich die folgenden Dinge richtig verstehe.
1.
<SPAN class="token comment">/* Obtain a list of numeric/continuous column names as strings */</SPAN>
colList <SPAN class="token operator">=</SPAN> dt <SPAN class="token operator"><</SPAN><SPAN class="token operator"><</SPAN><SPAN class="token messages"> Get Column Names</SPAN><SPAN class="token punctuation">(</SPAN> Continuous<SPAN class="token punctuation">,</SPAN> String <SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">;</SPAN>
Für meine Tabelle sollte ich es als schreiben
colList <SPAN class="token operator">=</SPAN> dt <SPAN class="token operator"><</SPAN><SPAN class="token operator"><</SPAN><SPAN class="token messages"> "Feature_1"</SPAN><SPAN class="token punctuation">(</SPAN> Continuous<SPAN class="token punctuation">,</SPAN> String <SPAN class="token punctuation">); <BR /></SPAN>
Ist es richtig?
2.
<SPAN class="token function">For</SPAN><SPAN class="token punctuation">(</SPAN> i <SPAN class="token operator">=</SPAN> <SPAN class="token number">2</SPAN><SPAN class="token punctuation">,</SPAN> i <SPAN class="token operator"><=</SPAN> <SPAN class="token function">Nitems</SPAN><SPAN class="token punctuation">(</SPAN> colList <SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">,</SPAN> i<SPAN class="token operator">++</SPAN><SPAN class="token punctuation">,</SPAN>
In meinem Fall sollte es geschrieben werden als
<SPAN class="token function">For</SPAN><SPAN class="token punctuation">(</SPAN> i <SPAN class="token operator">=</SPAN> <SPAN class="token number">0</SPAN><SPAN class="token punctuation">,</SPAN> i <SPAN class="token operator"><=</SPAN> feature_2000<SPAN class="token punctuation">(</SPAN> colList <SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">,</SPAN> i<SPAN class="token operator">++</SPAN><SPAN class="token punctuation">,)</SPAN>
Ist das korrekt?
Ich verstehe also nicht wirklich, was i=0, i=1, i=2 bedeutet? Könnten Sie bitte erklären?
„Nitems“ sollte in den Spaltennamen der letzten Spalte (feature_2000) geändert werden. Ist mein Verständnis richtig?
Brauchen wir außerdem ein „)“, um diese Schleife zu stoppen? Die unten gezeigte Vorlage hatte nicht das „)“.
Danke schön.
Ich werde das Skript morgen ausprobieren und Ihnen ein Feedback geben.
Windermere
Betreff: Wie schreibe ich ein Skript für den Wilcoxon-Rangsummentest für Tausende Funktionen?Das Durchlaufen von Spalten und das Ausführen einer der Plattformen ist einer der am häufigsten behandelten Punkte im Diskussionsforum.Die Suche nach „Looping“ führt zu mehreren Auswahlmöglichkeiten.Nachfolgend finden Sie ein Beispiel für eine Schleife anhand eines Beispiels für die Schleife über Spalten und die Ausführung einer Graph Builder-Plattform.Der Looping für eine Oneway-Plattform wird sehr ähnlich sein.
/* Open a sample data table */
dt = Open( "$SAMPLE_DATA\Fitness.jmp" );
/* Obtain a list of numeric/continuous column names as strings */
colList = dt << Get Column Names( Continuous, String );
/* Loop through the list to generate the desired Graph Builder
and save the report as a JPEG file */
For( i = 2, i <= Nitems( colList ), i++,
gb = dt << Graph Builder(
Size( 534, 454 ),
Show Control Panel( 0 ),
Variables(
X( :Age ),
Y( Column( dt, colList[i] ) ),
Color( :Age )
),
Elements(
Points(
X,
Y,
Legend( 3 ),
Summary Statistic( "Mean" ),
Error Bars( "Confidence Interval" )
)
),
SendToReport(
Dispatch(
{},
"Graph Builder",
FrameBox,
{Marker Size( 5 )}
)
),
Invisible
);
gb << Save Picture( "E:\Trash\Graph Builder_" || colList[i] ||".jpg", JPEG );
);
/* Close table and all invisible reports */
Close( dt, No Save );Betreff: Wie schreibe ich ein Skript für den Wilcoxon-Rangsummentest für Tausende Funktionen?Hallo,
Vielen Dank für Ihre Lösung zur Auswahl der Gruppeninformationen.
Aber wie führt man den Test für Feature_1 bis Feature_2000 als Schleife durch? Könnten Sie bitte auch eine Lösung dafür anbieten?
Danke
Windermere
Betreff: Wie schreibe ich ein Skript für den Wilcoxon-Rangsummentest für Tausende Funktionen?Die beiden Lösungen, die ich schnell erkennen kann, bestehen darin, entweder den Zeilenstatus für alle Zeilen, die nicht über „Keine Behandlung“ oder „Behandlung A“ verfügen, auf „Ausblenden und Ausschließen“ zu setzen und dann Ihre Y-nach-X-Anpassungsanalysen auszuführen
names default to here(1);
dt=current data table();
dt << select where(:treatment !="No Treatment" & :treatment !="Treatment A");
<BR />dt << Hide and Exclude;
dt << Fit Group(
Oneway(………………………..));
Oder fügen Sie die Daten in eine neue Tabelle ein, die nur die Zeilen „Keine Behandlung“ und „Behandlung A“ enthält, und führen Sie dann die Analyse durch
names default to here(1);
dt=current data table();
dt << select where(:treatment =="No Treatment" | :treatment !=="Treatment A");
dt2=dt<<SUBSET></SUBSET>