[JSL] Skript für einen zweiseitigen T-Test für eine große Anzahl von MetrikenHallo zusammen,
Ich möchte ein JSL-Skript schreiben, um einen TOST (Two-One Side T-Test) für eine große Anzahl von Metriken (über 500) zu automatisieren.
TOST arbeitet mit „Ebenen“-Paaren. Daher ist das Arbeiten mit 2 Ebenen einfach, da nur 1 Zeile pro „Paar“ erforderlich ist.
Ich habe bereits ein Skript geschrieben, das für 2x-Ebenen gut funktioniert, indem es eine „Kombinierte Datentabelle“ generiert und weitere Spalten mit Formeln hinzufügt, die zu den Ergebnissen „Äquivalent“ oder „Nicht Äquivalent“ führen.
Das Problem wird noch größer, wenn ich mit mehr als 2x Ebenen arbeiten möchte. Dazu müsste ich alle möglichen eindeutigen Paare von „Ebenen“ finden und dann die TOST-Mathematik für jede Kombination aus Metrik + Ebenenpaaren ausführen.
Ich habe (in diesem Forum) eine Möglichkeit gefunden, alle möglichen eindeutigen Paare aus einer Liste zu finden und sie in eine Tabelle oder eine verschachtelte Liste (NchooseKmatrix()) zu setzen.
Aber da stecke ich fest. Was ich brauche ist:
1- um eine neue Tabelle mit allen möglichen Kombinationen von Metriken (Spalte1) und allen Paaren möglicher Ebenen (Spalte2 und Spalte3) zu füllen.
2- Fügen Sie dann die Statistiken für jedes Levelpaar in jeder Zeile hinzu
Von diesem Punkt aus werde ich in der Lage sein, die Berechnung durchzuführen, um den TOST abzuschließen.
Ich habe ein Skript angehängt, das eine Dummy-Tabelle generiert, dann eine kombinierte Datentabelle aus der Einweganalyse, dann meinen erfolglosen Versuch, eine dritte Tabelle mit allen Kombinationen von Metriken + eindeutigen Ebenenpaaren zu erstellen
Vielen Dank im Voraus für Ihre Hilfe
Names Default To Here( 1 );
clear symbols();
Deletesymbols();
//Create table with random distribution (table 1)
dt = New Table( "tabletest",
Add Rows( 500 ),
New Column( "Product", Character, "Nominal", formula("Product " ||char( Random Integer( 1, 4 )))),
New Column( "Metric1", Numeric, "Continuous", formula( Random Normal( 10, 1 ) ) ),
New Column( "Metric2", Numeric, "Continuous", formula( Random Gamma( 10, 1 ) ) ),
New Column( "Metric3", Numeric, "Continuous", formula( Random Gamma( 10, 2 ) ) )
);
Column( dt, "Metric1" ) << set property( "spec limits", {LSL( 5 ), USL( 25 ), Show Limits( 0 )} );
Column( dt, "Metric2" ) << set property( "spec limits", {LSL( 0 ), USL( 40 ), Show Limits( 0 )} );
Column( dt, "Metric3" ) << set property( "spec limits", {LSL( 5 ), USL( 40 ), Show Limits( 0 )} );
dt << save( "$Desktop\tabletest.jmp" );
//Get a list from all unique Product
SplitBy = "Product";
summarize(ColumnSplitBy=by(Column (SplitBy)));
show(ColumnSplitBy);
For( i = N Items( ColumnSplitBy ), i > 0, i--,
If( ColumnSplitBy[i] == "",
Remove From( ColumnSplitBy, i, 1 );
)
);
//Get Column name
MetricCols = dt << Get Column Names( numeric, continuous, "string" );
//Get all unique combo of 2 Products
ColumnSplitByCombo = aslist( nchoosekMatrix(nitems(ColumnSplitBy), 2));
show (ColumnSplitByCombo);
//Create a combinaed datatable with stats (Table 2)
ow = dt << Oneway(
Y(Eval(MetricCols)),
X(Eval(SplitBy)),
Means and Std Dev(1),
SendToReport(
Dispatch(
{"Means and Std Deviations"},
"Std Dev Lower 95%",
NumberColBox,
{Visibility("Visible")}
),
Dispatch(
{"Means and Std Deviations"},
"Std Dev Upper 95%",
NumberColBox,
{Visibility("Visible")}
)
),
Invisible
);
tb = Report(ow[1])[Outline Box("Means and Std Deviations"), Table Box(1)];
dt2 = tb << Make Combined Data Table;
tb << close window;
//Create new table for the result, each row has a unique pair of Levels
dt3 = astable( nchoosekMatrix(nitems(ColumnSplitBy), 2), << column names({"x", "y"}) );
dt3 << new column ("first", character, << set values ( ColumnSplitBy[dt3:x << get values]));
dt3 << new column ("second", character, << set values ( ColumnSplitBy[dt3:y << get values]));
dt3 << delete columns (1::2);
//Create a nested list with each pair of levels
Listdt3 = aslist( nchoosekMatrix(nitems(ColumnSplitBy), 2));
show (Listdt3);
// I tried to use associate array() to match the level and name but couldn't make it work- Prediger
Automatisierung und SkriptingBetreff: [JSL] Skript für einen zweiseitigen T-Test für eine große Anzahl von MetrikenIch habe ein Dokument „Untitled.png“ mit Screenshots angehängt, um mein Anliegen (hoffentlich) besser zu erklären.
Danke!
Betreff: [JSL] Skript für einen zweiseitigen T-Test für eine große Anzahl von MetrikenSie könnten beispielsweise zuerst Ihre Gruppenspalte stapeln, sie mit den Ergebnissen aktualisieren und sie erneut aufteilen.
Dieses Beispiel berücksichtigt nicht, dass es mehrere Metriken geben kann
// Loop over Metrics and perform these for each of them
// Concatenate results into single table
dt3 = As Table(NChooseK Matrix(N Items(ColumnSplitBy), 2), <<COLUMN names=""></COLUMN>// Metrics should be taken into account here OR stacked table should contain them
dt4 << Update(
With(dt2),
Match Columns(:Data = :Level)
);
oder hat nicht die endgültige Aufteilung, die höchstwahrscheinlich ungefähr so aussieht

Betreff: [JSL] Skript für einen zweiseitigen T-Test für eine große Anzahl von MetrikenHallo @Voizingu : Der TOST prüft lediglich, ob das 100(1-2alpha)%-Konfidenzintervall vollständig innerhalb bestimmter Äquivalenzgrenzen liegt. Eine geeignete Problemumgehung wäre also vielleicht, das Verfahren „Y mal X anpassen“ für Mehrfachvergleiche zu verwenden, um alle Kombinationen für Sie durchzuführen?
Betreff: [JSL] Skript für einen zweiseitigen T-Test für eine große Anzahl von MetrikenGibt es einen Grund, warum Sie den integrierten Äquivalenztest in der Oneway-Plattform nicht verwenden können?
Betreff: [JSL] Skript für einen zweiseitigen T-Test für eine große Anzahl von MetrikenHallo Jarmo,
Stapel > Aktualisieren > Teilen ist eine großartige Idee!!!
Ich konnte es erfolgreich implementieren, aber mein Code ist etwas schmutzig (viele For()-Schleifen, Zwischenschritte, ...).
Anstatt:
- Tabelle mehrfach verketten
- Anschließend wird eine Spalte aus einer Liste wiederholter Metriken gefüllt.
Ich möchte meinen Code besser optimieren.
Gibt es eine Möglichkeit, dt5 sauberer/optimierter zu füllen? (Vielleicht native JMP-Befehle verwenden?)
Ich würde mich über Ihre Vorschläge hierzu freuen
Aber trotzdem vielen Dank für deine Hilfe 
- Prediger
Names Default To Here( 1 );
clear symbols();
Deletesymbols();
//Create table with random distribution (table 1)
dt = New Table( "tabletest",
Add Rows( 5000 ),
New Column( "Product", Character, "Nominal", formula("Product " ||char( Random Integer( 1, 4 )))),
New Column( "Metric1", Numeric, "Continuous", formula( Random Normal( 10, 1 ) ) ),
New Column( "Metric2", Numeric, "Continuous", formula( Random Gamma( 10, 1 ) ) ),
New Column( "Metric3", Numeric, "Continuous", formula( Random Gamma( 10, 2 ) ) ),
);
Column( dt, "Metric1" ) << set property( "spec limits", {LSL( 5 ), USL( 25 ), Show Limits( 0 )} );
Column( dt, "Metric2" ) << set property( "spec limits", {LSL( 0 ), USL( 40 ), Show Limits( 0 )} );
Column( dt, "Metric3" ) << set property( "spec limits", {LSL( 5 ), USL( 40 ), Show Limits( 0 )} );
dt << save( "$Desktop\tabletest.jmp" );
//Get a list from all unique Product
SplitBy = "Product";
summarize(ColumnSplitBy=by(Column (SplitBy)));
show(ColumnSplitBy);
For( i = N Items( ColumnSplitBy ), i > 0, i--,
If( ColumnSplitBy[i] == "",
Remove From( ColumnSplitBy, i, 1 );
)
);
//Get Column name
MetricCols = dt << Get Column Names( numeric, continuous, "string" );
show(MetricCols);
//Get all unique combo of 2 Products
ColumnSplitByCombo = aslist( nchoosekMatrix(nitems(ColumnSplitBy), 2));
show (ColumnSplitByCombo);
//Create a combinaed datatable with stats (Table 2)
ow = dt << Oneway(
Y(Eval(MetricCols)),
X(Eval(SplitBy)),
Means and Std Dev(1),
SendToReport(
Dispatch(
{"Means and Std Deviations"},
"Std Dev Lower 95%",
NumberColBox,
{Visibility("Visible")}
),
Dispatch(
{"Means and Std Deviations"},
"Std Dev Upper 95%",
NumberColBox,
{Visibility("Visible")}
)
),
Invisible
);
tb = Report(ow[1])[Outline Box("Means and Std Deviations"), Table Box(1)];
dt2 = tb << Make Combined Data Table;
tb << close window;
//Create new table for the result, each row has a unique pair of Levels
dt3 = astable( nchoosekMatrix(nitems(ColumnSplitBy), 2), << column names({"x", "y"}) );
dt3 << new column ("first", character, << set values ( ColumnSplitBy[dt3:x << get values]));
dt3 << new column ("second", character, << set values ( ColumnSplitBy[dt3:y << get values]));
dt3 << delete columns (1::2);
//Create a nested list with each pair of levels
Listdt3 = aslist( nchoosekMatrix(nitems(ColumnSplitBy), 2));
show (Listdt3);
// I tried to use associate array() to match the level and name but couldn't make it work
// Loop over Metrics and perform these for each of them
// Concatenate results into single table
dt3 = As Table(NChooseK Matrix(N Items(ColumnSplitBy), 2), <<COLUMN names=""></COLUMN>Betreff: [JSL] Skript für einen zweiseitigen T-Test für eine große Anzahl von MetrikenHallo MRB3855,
Sie haben völlig recht, ich wollte in meiner ersten Nachricht nicht zu viele Informationen preisgeben, um mich auf mein Skriptproblem zu konzentrieren, aber in meinem ursprünglichen Code (der für 2 Ebenen funktioniert) habe ich die Äquivalenzgrenzen auf 5 % des Bereichs [LSL;USL] festgelegt.
Dies ist natürlich ein beliebiger Wert, den ich bei Bedarf ändern kann.
Es ermöglicht mir, mehr als Hunderte von Metriken zu durchforsten und die „nicht gleichwertigen“ Metriken anhand dieses Kriteriums zu markieren, was normalerweise ein Dutzend sind.
Anhand dieser Liste kann ich dann eine gründliche Analyse durchführen:
- Varianzanalyse
- TOST mit einer angemessenen Reichweite
- usw...
Zu Ihrem zweiten Punkt: Wenn ich das richtig verstehe, schlagen Sie vor, die TOST-Plattform für jede Metrik auszuführen, die Daten auszuwählen und sie über Display Box() in eine Tabelle einzufügen? Wenn ja, ist das tatsächlich eine mögliche Lösung, aber ich würde die Berechnung lieber selbst durchführen, um das TOST-Prinzip zu verstehen und auch etwas Verarbeitungszeit zu sparen.
Hoffe, es macht Sinn:)
Danke fürs Helfen
- Prediger
Betreff: [JSL] Skript für einen zweiseitigen T-Test für eine große Anzahl von MetrikenHallo Mark,
Ja, zuerst dachte ich daran, die TOST-Plattform zu verwenden und die Statistiken mit Display Box() auszuwählen, aber ich bevorzugte den anderen Ansatz, bei dem jeder Parameter einzeln berechnet wird, um dieselben Ergebnisse zu erzielen, die die Plattform liefert.
Im Nachhinein wäre das vielleicht schneller gegangen, als das Rad neu zu erfinden, aber ich habe jetzt so viel Zeit investiert und bin so nah dran, es zu erreichen, dass ich genauso gut beenden kann, was ich (auf die harte Tour) begonnen habe, haha!
Ein Vorteil davon ist, dass ich jetzt jeden Schritt der TOST-Methode verstehe.
Danke
- Prediger
Betreff: [JSL] Skript für einen zweiseitigen T-Test für eine große Anzahl von MetrikenIch selbst würde höchstwahrscheinlich Schleifen verwenden, aber Sie können dies mit einigen Matrixoperationen tun. Dieses Skript müsste meiner Meinung nach neu geschrieben werden, um es lesbarer zu machen (besser benannte Variablen, Verwendung des Ausgabetabellennamens, Schließen unnötiger Tabellen und allgemeine Bereinigung).
Mehr anzeigen...
Names Default To Here(1);
//Create table with random distribution (table 1)
dt = New Table("tabletest",
Add Rows(5000),
New Column("Product",
Character,
"Nominal",
formula("Product " || Char(Random Integer(1, 4)))
),
New Column("Metric1", Numeric, "Continuous", formula(Random Normal(10, 1))),
New Column("Metric2", Numeric, "Continuous", formula(Random Gamma(10, 1))),
New Column("Metric3", Numeric, "Continuous", formula(Random Gamma(10, 2))),
);
Column(dt, "Metric1") << set property("spec limits", {LSL(5), USL(25), Show Limits(0)});
Column(dt, "Metric2") << set property("spec limits", {LSL(0), USL(40), Show Limits(0)});
Column(dt, "Metric3") << set property("spec limits", {LSL(5), USL(40), Show Limits(0)});
SplitBy = "Product";
Summarize(ColumnSplitBy = by(Column(SplitBy)));
MetricCols = dt << Get Column Names(numeric, continuous, "string");
ColumnSplitByCombo = As List(NChooseK Matrix(N Items(ColumnSplitBy), 2));
//Create a combinaed datatable with stats (Table 2)
ow = dt << Oneway(
Y(Eval(MetricCols)),
X(Eval(SplitBy)),
Means and Std Dev(1),
SendToReport(
Dispatch({"Means and Std Deviations"}, "Std Dev Lower 95%", NumberColBox,
{Visibility("Visible")}
),
Dispatch({"Means and Std Deviations"}, "Std Dev Upper 95%", NumberColBox,
{Visibility("Visible")}
)
),
Invisible
);
tb = Report(ow[1])[Outline Box("Means and Std Deviations"), Table Box(1)];
dt2 = tb << Make Combined Data Table;
tb << close window;
//Create a nested list with each pair of levels
Listdt3 = As List(NChooseK Matrix(N Items(ColumnSplitBy), 2));
mcols = N Items(MetricCols);
l = Repeat(Listdt3, mcols);
m = J(N Items(l) / mcols, mcols) :*</img> (1::mcols);
mfinal = Sort Ascending(Shape(m, 1, N Items(l)));
dt3 = As Table(Matrix(l), <<COLUMN names=""></COLUMN>
</CODE><NOSCRIPT><CODE class=" language-jsl"><DIV class="lia-spoiler-noscript-container"><DIV class="lia-spoiler-noscript-content">Namen werden hier standardmäßig verwendet (1); //Tabelle mit zufälliger Verteilung erstellen (Tabelle 1) dt = Neue Tabelle("tabletest", Zeilen hinzufügen (5000), Neue Spalte("Produkt", Zeichen, "Nominal", Formel("Produkt " || Zeichen(Zufällige Ganzzahl(1, 4))) ), Neue Spalte("Metrik1", Numerisch, "Kontinuierlich", Formel(Zufällige Normalzahl(10, 1))), Neue Spalte("Metrik2", Numerisch, "Kontinuierlich", Formel(Zufällige Gammazahl(10, 1))), Neue Spalte("Metrik3", Numerisch, "Kontinuierlich", Formel(Zufällige Gammazahl(10, 2))), ); Spalte(dt, "Metrik1") << Eigenschaft festlegen("Spezifikationsgrenzen", {LSL(5), USL(25), Grenzen anzeigen(0)}); Column(dt, "Metric2") << Eigenschaft festlegen("Spezifikationsgrenzen", {LSL(0), USL(40), Grenzen anzeigen(0)}); Column(dt, "Metric3") << Eigenschaft festlegen("Spezifikationsgrenzen", {LSL(5), USL(40), Grenzen anzeigen(0)}); SplitBy = "Produkt"; Summarize(ColumnSplitBy = nach(Column(SplitBy))); MetricCols = dt << Spaltennamen abrufen(numerisch, fortlaufend, "Zeichenfolge"); ColumnSplitByCombo = Als Liste(NChooseK Matrix(N Elemente(ColumnSplitBy), 2)); //Erstellen Sie eine kombinierte Datentabelle mit Statistiken (Tabelle 2) ow = dt << Oneway( Y(Eval(MetricCols)), X(Eval(SplitBy)), Mittelwerte und Standardabweichungen(1), SendToReport( Dispatch({"Mittelwerte und Standardabweichungen"}, "Standardabweichung untere 95 %", NumberColBox, {Visibility("Sichtbar")} ), Dispatch({"Mittelwerte und Standardabweichungen"}, "Standardabweichung obere 95 %", NumberColBox, {Visibility("Sichtbar")} ) ), Unsichtbar ); tb = Report(ow[1])[Outline Box("Mittelwerte und Standardabweichungen"), Table Box(1)]; dt2 = tb << Kombinierte Datentabelle erstellen; tb << Fenster schließen; //Erstellen Sie eine verschachtelte Liste mit jedem Ebenenpaar. Listdt3 = As List(NChooseK Matrix(N Items(ColumnSplitBy), 2)); mcols = N Items(MetricCols); l = Repeat(Listdt3, mcols); m = J(N Items(l) / mcols, mcols) (1::mcols); mfinal = Sort Ascending(Shape(m, 1, N Items(l))); dt3 = As Table(Matrix(l), < <COLUMN names=""></COLUMN></DIV></DIV>
<P><SPAN class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="jthi_1-1724774273332.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_1-1724774273332.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_1-1724774273332.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_1-1724774273332.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_1-1724774273332.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_1-1724774273332.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_1-1724774273332.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_1-1724774273332.png" style="width: 400px;"><span class="lia-inline-image-display-wrapper" image-alt="jthi_1-1724774273332.png" style="width: 400px;"><img src="https://us.v-cdn.net/6038925/uploads/images/67576i7A33F8F17FEAD03D/jthi_1-1724774273332.png" role="button" title="jthi_1-1724774273332.png" alt="jthi_1-1724774273332.png" /></span></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></P>
<P><SPAN class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="jthi_2-1724774284315.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_2-1724774284315.png" style="width: 304px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_2-1724774284315.png" style="width: 304px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_2-1724774284315.png" style="width: 304px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_2-1724774284315.png" style="width: 304px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_2-1724774284315.png" style="width: 304px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_2-1724774284315.png" style="width: 304px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_2-1724774284315.png" style="width: 304px;"><span class="lia-inline-image-display-wrapper" image-alt="jthi_2-1724774284315.png" style="width: 304px;"><img src="https://us.v-cdn.net/6038925/uploads/images/67577i906F6E675ADD899F/jthi_2-1724774284315.png" role="button" title="jthi_2-1724774284315.png" alt="jthi_2-1724774284315.png" /></span></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></P>
<P><SPAN class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="jthi_0-1724774190734.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_0-1724774190734.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_0-1724774190734.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_0-1724774190734.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_0-1724774190734.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_0-1724774190734.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_0-1724774190734.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_0-1724774190734.png" style="width: 400px;"><span class="lia-inline-image-display-wrapper" image-alt="jthi_0-1724774190734.png" style="width: 400px;"><img src="https://us.v-cdn.net/6038925/uploads/images/67575i9361F045B1E7C693/jthi_0-1724774190734.png" role="button" title="jthi_0-1724774190734.png" alt="jthi_0-1724774190734.png" /></span></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></P>
<P> </P> Betreff: [JSL] Skript für einen zweiseitigen T-Test für eine große Anzahl von MetrikenHallo Jarmo,
Vielen Dank für Ihre schnelle Antwort.
Diese Linie schlägt fehl
m = J(N Items(l) / mcols, mcols) (1::mcols);
Können Sie erklären, was damit erreicht werden soll?
Normalerweise verwende ich keine Matrizen. Ich habe versucht, das Debuggen selbst durchzuführen, konnte es aber nicht ...
Vielen Dank für Ihre Hilfe
Betreff: [JSL] Skript für einen zweiseitigen T-Test für eine große Anzahl von MetrikenAus irgendeinem Grund fehlt es:*
m = J(N Items(l) / mcols, mcols) :*</img> (1 :: mcols);
Ziel ist die Erstellung einer Matrix wie dieser

die Sie dann konvertieren in

mit Shape.
Probieren Sie auch die Schleifen aus, sie sind im Allgemeinen viel einfacher zu lesen und zu verstehen als seltsame Matrix-„Tricks“.
Betreff: [JSL] Skript für einen zweiseitigen T-Test für eine große Anzahl von MetrikenHallo Jarmo,
Ich habe mehrere Versionen dieser Zeile getestet und Sonderzeichen hinzugefügt, die bei der Übersetzung verloren gehen könnten, aber nein ...
Diese Zeile funktioniert bei mir nicht (ich verwende JMP Pro 17)

Das ist in Ordnung, diese Optimierung mit Matrix ist wirklich nett. Wie Sie sagten, funktioniert auch die Verwendung von Schleifen, also werde ich damit weitermachen:)
Nochmals vielen Dank, dass Sie sich (noch einmal) die Zeit genommen haben, mir zu helfen!

- Prediger
Betreff: [JSL] Skript für einen zweiseitigen T-Test für eine große Anzahl von MetrikenIch habe den Teil des Codes, der in der Community abbricht, als Screenshot angehängt

Es handelt sich um eine elementweise Multiplikation von Matrizen E Mult()
@Ryan_Gilmore Die JMP-Community isst:* (: * hier Leerzeichen hinzugefügt)
JSL-Codeblock:
m = J(N Items(l) / mcols, mcols) :*</img> (1::mcols);
Text:
m = J(N Elemente(l) / mSpalten, mSpalten):* (1::mcols);
Screenshot während der Bearbeitung

Screenshot aus der Vorschau

Betreff: [JSL] Skript für einen zweiseitigen T-Test für eine große Anzahl von MetrikenHallo @Voizingu. Alles in allem scheint es, als hätten Sie eine Lösung, die für Sie funktioniert. Ausgezeichnet! Damit es jedoch nicht verloren geht, sollte das Konfidenzintervall ein Intervall von 100 (1-2alpha) % sein. Wenn Sie also möchten, dass Ihre Fehlerrate 1. Art 5 % beträgt, sollte das Intervall zur Beurteilung der Äquivalenz ein Konfidenzintervall von 90 % (nicht 95 %) sein. Es handelt sich um einen zweiseitigen Test … jede Seite wird bei Alpha = 0,05 getestet. Siehe Anhang,