Hola,
Estoy intentando escribir un script que calcule la frecuencia prevista de errores tipo 1 en una prueba de equivalencia (dados los márgenes de equivalencia conocidos).
Me gustaría que el script ejecutara un número determinado de simulaciones con datos aleatorios (normales) (n=3) de una muestra de referencia y una de prueba, y que luego ejecutara una prueba de equivalencia en ese conjunto de datos e informara si se demostró o no la equivalencia. Para x repeticiones, me gustaría conocer la frecuencia de errores de tipo 1.
Usando IA y algo de investigación, he encontrado el siguiente código, pero claramente no funciona. Puedo comentar ciertas secciones y ejecutar correctamente el TOST... pero no puedo avanzar más allá.
Estoy usando JMP19.
¡Gracias por tu ayuda!
Código a continuación, archivo adjunto.
// Parámetros
numSimulaciones = 10;
nPorGrupo = 3;
refMedia = 99,1;
pruebaMedia = 98,8;
de = 0,1;
margenEquivalente = 0.3;
tipo1Errors = 0;
// Valor t crítico para IC del 90% con gl = 2n - 2
df = 2 * nPorGrupo - 2;
tCrit = StudentTQuantile(0.950, gl);
// Crear tabla de resumen
summaryTable = New Table("Resumen de simulación",
Nueva columna ("Simulación", numérica),
Nueva columna ("CI_Lower", numérico),
Nueva columna ("CI_Upper", numérica),
Nueva columna("Equivalencia_Concluida", Carácter),
Nueva columna ("Dif_media", numérica)
);
// Recorrer simulaciones
Para(sim = 1, sim <= numSimulaciones, sim++,
// Crear nueva tabla de datos
dt = Nueva Tabla("Sim" || Char(sim),
Agregar filas (nPorGrupo * 2),
Nueva columna ("Grupo", Carácter),
Nueva columna ("Valor", numérico)
);
// Simular grupo de referencia
Para (i = 1, i <= nPorGrupo, i++,
dt:Group[i] = "Referencia";
dt:Valor[i] = Normal aleatorio(refMedia, sd);
);
// Simular grupo de prueba
Para(i = nPorGrupo + 1, i <= nPorGrupo * 2, i++,
dt:Group[i] = "Prueba";
dt:Valor[i] = Normal aleatorio(pruebaMedia, sd);
);
// Extraer valores
refVals = dt << Obtener como matriz (: Valor )[1::nPerGroup];
testVals = dt << Obtener como matriz (: Valor)[nPerGroup+1::nPerGroup*2];
mediaDiff = Media(valoresprueba) - Media(valoresref);
// Varianzas de muestra
varRef = Varianza(refVals);
varTest = Varianza(testVals);
// Varianza agrupada
pooledVar = ((nPerGroup - 1) * varRef + (nPerGroup - 1) * varTest) / df;
pooledSD = Sqrt(pooledVar);
// Error estándar de diferencia
seDiff = pooledSD * Sqrt(2 / nPerGroup);
// IC del 90%
ciLower = diferenciaMedia - tCrit * diferenciaSe;
ciUpper = diferenciaMedia + tCrit * diferenciaSe;
// Verificar equivalencia
eqResult = "No";
Si (ciLower > -equivMargin & ciUpper < equivMargin,
tipo1Errors++;
eqResult = "Sí";
);
// Registrar resultados
tablaResumen << Agregar filas(1);
TablaResumen:Simulación[sim] = sim;
Tabla de resumen:CI_Lower[sim] = ciLower;
TablaResumen:CI_Upper[sim] = ciUpper;
TablaResumen:Equivalencia_Concluida[sim] = eqResult;
TablaResumen:Mean_Diff[sim] = meanDiff;
//Cierra la tabla para evitar el desorden.
dt << Cerrar ventana;
);
// Mostrar resultados
Nueva ventana("Resumen de error tipo I",
Cuadro de texto("Simulaciones totales: " || Char(numSimulations)),
Cuadro de texto("Errores tipo I: " || Char(type1Errors)),
Cuadro de texto ("Tasa estimada de error tipo I: " || Char(Round(type1Errors / numSimulations * 100, 2)) || "%")
);