Hallo zusammen,
Ich versuche, ein Skript zu schreiben, das 100 Datensätze simuliert (jeweils 3 Messungen von Referenz- und Testdaten) und für jede Replikation einen Äquivalenztest durchführt. Als Ausgabe soll ein Bericht die Häufigkeit der nachgewiesenen Äquivalenz enthalten (Hinweis: Ich möchte dies nutzen, um die Wahrscheinlichkeit eines Fehlers 1. Art bei einer festgelegten Äquivalenzmarge vorherzusagen).
Mithilfe von KI und etwas Recherche habe ich folgenden Code entwickelt, aber er funktioniert nicht. Ich glaube, ich verkompliziere die Situation unnötig… Ich wäre für jede Hilfe oder Unterstützung aus der Community dankbar.
Danke!
Chris
// 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)) || "%")
);