Wie skripte ich eine for-Schleife, um eine ANOVA in einer Richtung über alle Y-Spalten in einer Datentabelle auszuführen?Ich habe eine große Datentabelle mit 10.000 verschiedenen Spaltennamen und einer kleinen Anzahl von Zeilen, die Replikate aus 5 verschiedenen Probengruppen enthalten, einschließlich einer Kontrollgruppe mit der Bezeichnung "HN30".Ich habe ein Skript, das einen Einweg-ANOVA- und Dunnett-Post-hoc-Mittelwertvergleichstest (dh Mittelwertvergleich) mit der Kontrollgruppe (HN30) ausführt, wenn ich jede Y-Variable einzeln angebe. Ich möchte jedoch nicht alle 10.000 verschiedenen Spaltennamen eingeben oder aufgefordert werden, einen Dunnett-Test durchzuführen oder den Kontrollnamen für jede Spaltenanalyse einzugeben.Kann mir jemand helfen, eine for-Schleife zu schreiben, die die Befehle nacheinander durch alle Spalten iteriert. Sobald ich die Ausgabe erhalte, weiß ich, wie ich den Befehl „Tabellen kombinieren“ verwende, um alle Ausgabe-P-Werte zusammenzuführen.Unten ist, was ich habe, das für zwei angegebene Spalten namens "SPP1" und "ABCC2" funktioniert, in denen Kontrollgruppenzeilen mit "HN30" gekennzeichnet sind.Sie müssen nur über alle Spalten iterieren. Vielen Dank !
Fit Group(
Oneway(
Y( :SPP1 ),
X( :Cell lline ),
With Control( 1, {"HN30"} ),
Comparison Circles( 1 ),
SendToReport(
Dispatch(
{"Means Comparisons",
"Comparisons with a control using Dunnett's Method",
"LSD Threshold Matrix"},
"p-Value",
NumberColBox,
{Set Format( "Fixed Dec", 15, 15 )}
)
)
),
Oneway(
Y( :ABCC2 ),
X( :Cell lline ),
With Control( 1, {"HN30"} ),
Comparison Circles( 1 ),
SendToReport(
Dispatch(
{"Means Comparisons",
"Comparisons with a control using Dunnett's Method",
"LSD Threshold Matrix"},
"p-Value",
NumberColBox,
{Set Format( "Fixed Dec", 15, 15 )}
)
)
),
<<{Arrange in Rows( 1 )}
);SkripterstellungBetreff: Wie schreibe ich eine for-Schleife, um eine ANOVA in einer Richtung über alle Y-Spalten in einer Datentabelle auszuführenVielen Dank für all Ihre Zeit.Ihre Lösung funktioniert und ist fast perfekt.Ich schätze all die Zeit, die Sie damit verbracht haben, zu helfen.Ich frage mich nur, ob es eine Befehls- oder Syntaxänderung gibt, die alle Ausgaben der Schleife dazu zwingen würde, in nur einem Fenster zu bleiben.Im Moment erstellt jede Schleife ihr eigenes Fenster, sodass Tausende von Fenstern geöffnet werden.Außerdem kann ich den Befehl „Datentabelle kombinieren“ nicht verwenden, um ähnliche Analysen zusammenzustellen, da sich jedes Ergebnis in einem separaten Fenster befindet.Unten ist mein Code mit Ihrem letzten Vorschlag. Offensichtlich habe ich selbst keine Ahnung, wie man codiert.Irgendwelche Ideen, um sie alle in dasselbe Fenster auszugeben?
Names Default To Here( 1 );
cdt = Open( "F:/Stats/DTest.jmp" );
ow_expr = Expr(
Oneway(
Y( Column( all_ys[i] ) ),
X( :Cell lline ),
/* 3rd site is control */
With Control( 1, {"HN30"} ),
Comparison Circles( 1 ),
SendToReport(
Dispatch(
{"Means Comparisons", "Comparisons with a control using Dunnett's Method", "LSD Threshold Matrix"},
"p-Value",
NumberColBox,
{Set Format( "Fixed Dec", 15, 15 )}
)
)
)
);
all_ys = cdt << get column names( Continuous, String );
//For( i = 1, i <= n items(all_ys), i++,
For( i = 1, i <= n items(all_ys), i++,
Eval( Substitute( ow_expr, Expr( i ), i ) );
// Eval( Substitute( Expr( oneway( X( :Cell lline ), Y( Column( all_ys[i] ) ) ) ), Expr( i ), i ) )
// Eval( Parse( Eval Insert( "oneway( X( :Cell lline ), Y( :^all_ys[i]^ ) )" ) ) )
);Betreff: Wie schreibe ich eine for-Schleife, um eine ANOVA in einer Richtung über alle Y-Spalten in einer Datentabelle auszuführenSie können dies versuchen:
Names Default To Here( 1 );
cdt = Open( "$SAMPLE_DATA/Semiconductor Capability.jmp" );
ow_expr = Expr(
Oneway(
Y( Column( all_ys[i] ) ),
X( :SITE ),
/* 3rd site is control */
With Control( 1, {3} ),
Comparison Circles( 1 ),
SendToReport(
Dispatch(
{"Means Comparisons", "Comparisons with a control using Dunnett's Method", "LSD Threshold Matrix"},
"p-Value",
NumberColBox,
{Set Format( "Fixed Dec", 15, 15 )}
)
)
)
);
all_ys = cdt << get column names( Continuous, String );
//For( i = 1, i <= n items(all_ys), i++,
For( i = 1, i <= 3, i++,
Eval( Substitute( ow_expr, Expr( i ), i ) );
// Eval( Substitute( Expr( oneway( X( :SITE ), Y( Column( all_ys[i] ) ) ) ), Expr( i ), i ) )
// Eval( Parse( Eval Insert( "oneway( X( :SITE ), Y( :^all_ys[i]^ ) )" ) ) )
);Betreff: Wie schreibe ich eine for-Schleife, um eine ANOVA in einer Richtung über alle Y-Spalten in einer Datentabelle auszuführenDanke Georg,
Ich habe Ihr Beispiel an meine spezifische Tabelle angepasst und lasse jetzt alle Einweg-ANOVAs für jede Spalte laufen, damit dieser Teil funktioniert.Ich kann jedoch immer noch nicht herausfinden, wie ich im Dunnett-Test arbeiten soll, um jeder ANOVA zu folgen.Ich bin mir nicht sicher, wie ich diesen Unterbefehl mit der for-Schleife strukturieren soll.Hier ist, was ich bisher habe, aber ich kann die spezifischen Dunnett-Tests, die ich unten zeige, nicht in der for-Schleife ausführen.Irgendwelche Ideen?Danke noch einmal
Names Default To Here( 1 );
cdt = Open( "F:/Stats/DTest.jmp" );
all_ys = cdt << get column names( Continuous, String );
For( i = 1, i <= n items(all_ys), i++,
Eval( Parse( Eval Insert( "oneway( X( :Cell lLine ), Y( :^all_ys[i]^ ) )" ) ) )
);
Fit Group(
Oneway(
Y( :SPP1 ),
X( :Cell lline ),
With Control( 1, {"HN30"} ),
Comparison Circles( 1 ),
SendToReport(
Dispatch(
{"Means Comparisons",
"Comparisons with a control using Dunnett's Method",
"LSD Threshold Matrix"},
"p-Value",
NumberColBox,
{Set Format( "Fixed Dec", 15, 15 )}
)
)
),
Oneway(
Y( :ABCC2 ),
X( :Cell lline ),
With Control( 1, {"HN30"} ),
Comparison Circles( 1 ),
SendToReport(
Dispatch(
{"Means Comparisons",
"Comparisons with a control using Dunnett's Method",
"LSD Threshold Matrix"},
"p-Value",
NumberColBox,
{Set Format( "Fixed Dec", 15, 15 )}
)
)
),
<<{Arrange in Rows( 1 )}
);Betreff: Wie schreibe ich eine for-Schleife, um eine ANOVA in einer Richtung über alle Y-Spalten in einer Datentabelle auszuführenHier ist ein Beispiel für eine Schleife. Wahrscheinlich können Sie sich an Ihre Bedürfnisse anpassen.
Beispiele für die verwendeten Befehle finden Sie bei Bedarf im Scripting-Index oder in der Scripting-Referenz.
Names Default To Here( 1 );
cdt = Open( "$SAMPLE_DATA/Semiconductor Capability.jmp" );
all_ys = cdt << get column names( Continuous, String );
For( i = 1, i <= n items(all_ys), i++,
Eval( Parse( Eval Insert( "oneway( X( :SITE ), Y( :^all_ys[i]^ ) )" ) ) )
);