Salut tout le monde,
Je cherche à écrire un script qui simule 100 jeux de données (3 mesures de données de référence et de données de test dans chacun) et qui, pour chaque réplication, exécute un test d'équivalence. Je souhaite obtenir un rapport indiquant la fréquence d'apparition de l'équivalence (je souhaite utiliser ce rapport pour prédire la probabilité d'une erreur de type I étant donné une marge d'équivalence définie).
Après quelques recherches et l'utilisation de l'IA, j'ai réussi à obtenir le code suivant, mais il ne fonctionne pas. Je pense que je complique inutilement les choses… Toute aide ou suggestion de la communauté serait la bienvenue.
Merci!
Chris
// Paramètres
numSimulations = 10 ;
nParGroupe = 3 ;
refMean = 99,1 ;
testMoyenne = 98,8 ;
écart-type = 0,1 ;
équivMargin = 0,3 ;
type1Erreurs = 0 ;
// Valeur critique de t pour un intervalle de confiance à 90 % avec ddl = 2n - 2
df = 2 * nParGroupe - 2 ;
tCrit = StudentTQuantile(0.950, df);
// Créer un tableau récapitulatif
summaryTable = Nouvelle Table("Résumé de la simulation",
Nouvelle colonne("Simulation", Numérique),
Nouvelle colonne("CI_Lower", Numérique),
Nouvelle colonne("CI_Upper", Numérique),
Nouvelle colonne("Équivalence_conclue", Caractère),
Nouvelle colonne("Différence_moyenne", Numérique)
);
// Boucle sur les simulations
Pour(sim = 1, sim <= numSimulations, sim++,
// Créer une nouvelle table de données
dt = Nouvelle Table("Sim" || Char(sim),
Ajouter des lignes(nParGroupe * 2),
Nouvelle colonne("Groupe", Caractère),
Nouvelle colonne("Valeur", Numérique)
);
// Simuler le groupe de référence
Pour (i = 1, i <= nParGroupe, i++,
dt:Groupe[i] = "Référence";
dt:Valeur[i] = Normale aléatoire(refMean, sd);
);
// Simuler le groupe de test
Pour(i = nPerGroup + 1, i <= nPerGroup * 2, i++,
dt:Groupe[i] = "Test";
dt:Valeur[i] = Normale aléatoire(moyenne_test, écart_type);
);
// Extraire les valeurs
refVals = dt << Get As Matrix( :Value )[1::nPerGroup];
testVals = dt << Get As Matrix( :Value )[nPerGroup+1::nPerGroup*2];
moyenneDiff = Moyenne(valeurstest) - Moyenne(valeursref);
// Variances de l'échantillon
varRef = Variance(refVals);
varTest = Variance(testVals);
// Variance combinée
pooledVar = ((nPerGroup - 1) * varRef + (nPerGroup - 1) * varTest) / df;
pooledSD = Sqrt(pooledVar);
// Erreur type de la différence
seDiff = pooledSD * Sqrt(2 / nPerGroup);
// IC à 90 %
ciLower = meanDiff - tCrit * seDiff;
ciUpper = meanDiff + tCrit * seDiff;
// Vérifier l'équivalence
eqResult = "Non";
Si(ciLower > -equivMargin & ciUpper < equivMargin,
type1Erreurs++;
eqResult = "Oui";
);
// Enregistrer les résultats
summaryTable << Ajouter des lignes(1);
Tableau récapitulatif : Simulation[sim] = sim ;
Tableau récapitulatif : CI_Lower[sim] = ciLower ;
Tableau récapitulatif : CI_Upper[sim] = ciUpper ;
summaryTable:Equivalence_Concluded[sim] = eqResult;
Tableau récapitulatif :Diff_moyenne[sim] = diff_moyenne ;
Fermez la table pour éviter l'encombrement.
dt << Fermer la fenêtre ;
);
// Afficher les résultats
Nouvelle fenêtre("Résumé des erreurs de type I",
Zone de texte("Nombre total de simulations : " || Char(numSimulations)),
Zone de texte("Erreurs de type I : " || Char(type1Errors)),
Zone de texte("Taux d'erreur de type I estimé : " || Char(Round(type1Errors / numSimulations * 100, 2)) || "%")
);