Hallo zusammen,
Ich versuche, einen Simulator zu erstellen, der eine definierte Anzahl von Wiederholungen (sagen wir 1000) von Zufallsdaten aus einer Referenz- und einer Teststichprobe generiert, dann einen Äquivalenztest für jede Simulation durchführt und die Häufigkeit von Fehlern 1. Art (fälschlicher Nachweis von Äquivalenz) bei gegebener Äquivalenzmarge meldet.
Mithilfe von KI und etwas Recherche habe ich den untenstehenden Code entwickelt, kann ihn aber nicht zum Laufen bringen. Ich bin noch relativ unerfahren im Scripting, daher bin ich mir sicher, dass die Lösungen recht einfach sind … nur eben nicht für mich!
Wir wären für jede Hilfe dankbar.
Danke!
// Parameter
numSimulations = 1000;
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)) || "%")
);