Hallo,
Ich versuche, ein Skript zu schreiben, das die vorhergesagte Häufigkeit von Fehlern 1. Art in einem Äquivalenztest berechnet (bei bekannten Äquivalenzmargen).
Ich möchte, dass das Skript eine bestimmte Anzahl von Simulationen mit zufälligen (normalverteilten) Daten (n=3) aus einer Referenz- und einer Teststichprobe durchführt, anschließend einen Äquivalenztest an diesem Datensatz durchführt und ausgibt, ob Äquivalenz nachgewiesen wurde oder nicht. Für x Wiederholungen möchte ich dann die Häufigkeit von Fehlern 1. Art ermitteln.
Mithilfe von KI und etwas Recherche bin ich auf folgenden Code gestoßen, der aber offensichtlich nicht funktioniert. Ich kann bestimmte Abschnitte auskommentieren und den TOST erfolgreich ausführen, komme aber nicht weiter.
Ich verwende JMP19.
Vielen Dank für Ihre Hilfe!
Der Code ist unten aufgeführt, die Datei ist im Anhang.
// Parameter
numSimulations = 10;
nPerGroup = 3;
Referenzmittelwert = 99,1;
Testmittelwert = 98,8;
sd = 0,1;
Äquivalenzmarge = 0,3;
type1Errors = 0;
// Kritischer t-Wert für ein 90%-Konfidenzintervall mit df = 2n - 2
df = 2 * nPerGroup - 2;
tCrit = StudentTQuantile(0.950, df);
// Zusammenfassungstabelle erstellen
summaryTable = New Table("Simulation Summary",
Neue Spalte("Simulation", Numerisch),
Neue Spalte("CI_Lower", Numerisch),
Neue Spalte("CI_Upper", Numerisch),
Neue Spalte("Equivalence_Concluded", Zeichenkette),
Neue Spalte("Mittelwert_Differenz", Numerisch)
);
// Simulationen durchlaufen
Für(sim = 1, sim <= numSimulations, sim++,
// Neue Datentabelle erstellen
dt = New Table("Sim" || Char(sim),
Add Rows(nPerGroup * 2),
Neue Spalte("Gruppe", Zeichen),
Neue Spalte("Wert", Numerisch)
);
// Referenzgruppe simulieren
Für(i = 1, i <= nPerGroup, i++,
dt:Group[i] = "Referenz";
dt:Value[i] = Random Normal(refMean, sd);
);
// Testgruppe simulieren
Für(i = nPerGroup + 1, i <= nPerGroup * 2, i++,
dt:Group[i] = "Test";
dt:Value[i] = Random Normal(testMean, sd);
);
// Werte extrahieren
refVals = dt << Get As Matrix( :Value )[1::nPerGroup];
testVals = dt << Get As Matrix( :Value )[nPerGroup+1::nPerGroup*2];
meanDiff = Mittelwert(Testwerte) - Mittelwert(Referenzwerte);
// Stichprobenvarianzen
varRef = Variance(refVals);
varTest = Varianz(testVals);
// Gepoolte Varianz
pooledVar = ((nPerGroup - 1) * varRef + (nPerGroup - 1) * varTest) / df;
pooledSD = Sqrt(pooledVar);
// Standardfehler der Differenz
seDiff = pooledSD * Sqrt(2 / nPerGroup);
// 90%-Konfidenzintervall
ciLower = meanDiff - tCrit * seDiff;
ciUpper = meanDiff + tCrit * seDiff;
// Äquivalenz prüfen
eqResult = "Nein";
Wenn(ciLower > -equivMargin & ciUpper < equivMargin,
type1Errors++;
eqResult = "Ja";
);
// Ergebnisse protokollieren
summaryTable << Add Rows(1);
summaryTable:Simulation[sim] = sim;
Zusammenfassungstabelle: CI_Lower[sim] = ciLower;
summaryTable:CI_Upper[sim] = ciUpper;
summaryTable:Equivalence_Concluded[sim] = eqResult;
Zusammenfassungstabelle: Mittlere_Differenz[sim] = mittlereDifferenz;
// Schließen Sie die Tabelle, um Unordnung zu vermeiden
dt << Fenster schließen;
);
// Ergebnisse anzeigen
Neues Fenster("Zusammenfassung von Fehlern vom Typ I",
Text Box("Gesamtzahl der Simulationen: " || Char(numSimulationen)),
Text Box("Fehler vom Typ I: " || Char(type1Errors)),
Textfeld("Geschätzte Fehlerrate vom Typ I: " || Char(Round(type1Errors / numSimulations * 100, 2)) || "%")
);