Bonjour à tous,
J'essaie de créer un simulateur qui générera un nombre défini de répétitions (disons 1000) de données aléatoires à partir d'un échantillon de référence et d'un échantillon de test, puis exécutera un test d'équivalence sur chaque simulation et rendra compte de la fréquence des erreurs de type 1 (démontrant faussement l'équivalence) étant donné une marge d'équivalence définie.
Grâce à l'IA et à quelques recherches, j'ai obtenu le code ci-dessous, mais je n'arrive pas à le faire fonctionner. Je suis relativement novice en programmation, donc je suis certain que la solution est assez simple… mais pas pour moi !
Toute aide que vous pourrez m'apporter sera appréciée.
Merci!
// Paramètres
numSimulations = 1000 ;
nParGroupe = 3 ;
refMean = 99,1 ;
testMean = 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)) || "%")
);