Hola a todos,
Estoy tratando de crear un simulador que genere una cantidad definida de repeticiones (digamos, 1000) de datos aleatorios a partir de una muestra de referencia y de prueba, luego ejecute una prueba de equivalencia en cada simulación e informe sobre la frecuencia de errores de tipo 1 (que demuestran falsamente la equivalencia) dado un margen de equivalencia definido.
Usando IA y algo de investigación, creé el código a continuación, pero no consigo que funcione. Soy relativamente nuevo en scripting, así que estoy seguro de que las respuestas son bastante sencillas... ¡pero no para mí!
Cualquier ayuda que puedan brindarnos seria apreciada.
¡Gracias!
// Parámetros
numSimulaciones = 1000;
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)) || "%")
);