Factores en el simulador mediante el uso de variables para la simulación de Monte CarloHola,
Me pregunto cómo hacer una simulación de monte carlo usando las múltiples dimensiones enumeradas en la tabla de datos (dt0), las N filas de dt0 son dinámicas según las entradas y los requisitos del usuario.
Mi pregunta es ¿cómo usar la rutina adecuada para agregar esas dimensiones en los Factores del Simulador?
Traté de usar la función 'Sustituir, Analizar' para que funcione. Pero solo funciona cuando todas esas dimensiones se enumeran en Factores ().
Aquí están mis guiones:
Eval(
Substitute(
Expr(
myanalysis = dt << Profiler(
Y( :Name( "TA Target" ) ),
Profiler(
1,
Simulator(
1,
Factors( Dim A, Dim B, Dim C, Dim D, Dim E, Dim F, ),
Responses( Name( "TA Target" ) << No Noise ),
Resimulate
)
),
)
),
Expr( Dim A ), Parse( "Dim A<< Random( Normal( 1, 0.01 ) )" ),
Expr( Dim B ), Parse( "Dim B<< Random( Normal( 1, 0.01 ) )" ),
Expr( Dim C ), Parse( "Dim C<< Random( Normal( 1, 0.01 ) )" ),
Expr( Dim D ), Parse( "Dim D<< Random( Normal( 1, 0.01 ) )" ),
Expr( Dim E ), Parse( "Dim E<< Random( Normal( 1, 0.01 ) )" ),
Expr( Dim F ), Parse( "Dim F<< Random( Normal( 1, 0.01 ) )" ),
)
);Re: Factores en el Simulador usando Variables para la Simulación Monte Carlo¡Gracias, Ian!
Tal vez este sea el método más prometedor y factible al agregar muchas variables en la lista de funciones para obtener la simulación de Monte Carlo mediante scripts basados en la versión actual de JMP.
Re: Factores en el Simulador usando Variables para la Simulación Monte CarloSí, mostrar el informe dos veces fue solo para ilustrar que la función funciona.
Simplemente puede construir sobre el patrón de codificación anterior ('SubstituteInto()' puede hacer cualquier cantidad de reemplazos). El análisis generado no es significativo, pero el siguiente código es un ejemplo. JMP creó la 'expresión de plantilla' (con algunas ediciones posteriores):
NamesDefaultToHere(1);
dt = Open("$SAMPLE_DATA/Semiconductor Capability.jmp");
// Define a JSL function
doSimulator =
function({x1Var, x2Var, yVar}, {Default Local},
// Template expression
myFit = Expr(
fm = dt << Fit Model(
Y( yTBD ),
Effects( x1TBD, x2TBD ),
Personality( "Standard Least Squares" ),
Emphasis( "Effect Leverage" ),
Run(
Profiler(
1,
Simulator(
1,
Factors(
x1TBD << Random( Normal( 290, 50 ) ),
x2TBD << Random( Normal( 460, 50 ) )
),
Responses( yTBD << No Noise ),
Resimulate
)
)
)
)
);
// Bake in the variablee passed to the function
SubstituteInto(myFit,
Expr(x1TBD), NameExpr(x1Var),
Expr(x2TBD), NameExpr(x2Var),
Expr(yTBD), NameExpr(yVar)
);
// Do the fit
myFit;
// Return the reference to the fit Model object
fm;
);
// Try out the function . . .
f = doSimulator(Column(dt, "PNP1"), Column(dt, "PNP2"), Column(dt, "NPN1"));Re: Factores en el Simulador usando Variables para la Simulación Monte Carlo¡Muchas gracias, Ian!
Parece que la función funciona. Sin embargo, con los scripts siguiendo sus consejos, se generarán múltiples generadores de perfiles con solo un factor que se muestra en cada generador de perfiles. Me pregunto cómo mostrar todos los factores en un informe de Profiler. ¿Tienes algún comentario? Lo aprecio.
Aquí están mis guiones revisados:
doSimulator=Function(
{xVar, MeanVar, SigmaVar}, {Default Local},
myFP=Expr(
myProfiler=dt<<PROFILER></PROFILER>Re: Factores en el Simulador usando Variables para la Simulación Monte CarloTal vez este código pueda indicarle la dirección correcta:
NamesDefaultToHere(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
// Define a JSL function
doSimulator =
function({xVar, yVar}, {Default Local},
// Template expression
myFit = Expr(
fm = dt << Fit Model(
Y( yTBD ),
Effects( xTBD ),
Personality( "Standard Least Squares" ),
Emphasis( "Effect Leverage" ),
Run(
Profiler(
1,
Simulator(
1,
Factors( xTBD << Random( Normal( 80, 10 ) ) ),
Responses( yTBD << No Noise ),
Resimulate
)
)
)
)
);
// Bake in the variablee passed to the function
SubstituteInto(myFit, Expr(xTBD), NameExpr(xVar), Expr(yTBD), NameExpr(yVar));
// Do the fit
myFit;
// Return the reference to the fit Model object
fm;
);
// Try out the function . . .
fhw = doSimulator(Column(dt, "height"), Column(dt, "weight"));
fwh = doSimulator(Column(dt, "weight"), Column(dt, "height"));