Salut,
J'essaie d'écrire un script qui calculera la fréquence prévue des erreurs de type 1 dans un test d'équivalence (étant donné les marges d'équivalence connues).
Je souhaite que le script exécute un certain nombre de simulations à partir de données aléatoires (normales) (n=3) issues d'un échantillon de référence et d'un échantillon de test, puis qu'il effectue un test d'équivalence sur cet ensemble de données et indique si l'équivalence a été démontrée ou non. Pour x répétitions, je souhaite ensuite obtenir la fréquence des erreurs de type I.
Grâce à l'IA et à quelques recherches, j'ai trouvé le code suivant, mais il ne fonctionne manifestement pas. Je peux commenter certaines sections et exécuter le TOST sans problème… mais je suis bloqué à cette étape.
J'utilise JMP19.
Merci pour votre aide!
Code ci-dessous, fichier joint.
// 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)) || "%")
);