Fattori nel simulatore utilizzando le variabili per la simulazione Monte CarloCiao,
Mi chiedo di effettuare la simulazione di monte carlo utilizzando le dimensioni multiple elencate nella tabella dei dati (dt0), le N righe di dt0 sono dinamiche in base agli input e ai requisiti dell'utente.
La mia domanda è come utilizzare la routine appropriata per aggiungere quelle dimensioni nei fattori del simulatore?
Ho provato a utilizzare la funzione "Sostituisci, analizza" per farlo funzionare. Ma funziona solo quando tutte quelle dimensioni sono elencate in Factors().
Ecco i miei script:
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 ) )" ),
)
);Ri: Fattori nel simulatore utilizzando le variabili per la simulazione Monte CarloGrazie, Ian!
Forse questo è il metodo più promettente e fattibile aggiungendo molte variabili nell'elenco delle funzioni per ottenere la simulazione Monte Carlo tramite script basati sulla versione corrente di JMP.
Ri: Fattori nel simulatore utilizzando le variabili per la simulazione Monte CarloSì, mostrare il rapporto due volte era solo per dimostrare che la funzione funziona.
Puoi semplicemente basarti sul modello di codifica sopra ('SubstituteInto()' può fare qualsiasi numero di sostituzioni). L'analisi generata non è significativa, ma il codice seguente è un esempio. L'"espressione modello" è stata creata da JMP (con alcune modifiche successive):
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"));Ri: Fattori nel simulatore utilizzando le variabili per la simulazione Monte CarloGrazie mille, Ian!
Sembra che la funzione funzioni. Tuttavia, con gli script seguendo i tuoi consigli, verranno generati più profiler con un solo fattore visualizzato in ciascun profiler. Mi chiedo come visualizzare tutti i fattori in un report di Profiler. Hai qualche commento? Apprezzalo.
Ecco i miei script rivisti:
doSimulator=Function(
{xVar, MeanVar, SigmaVar}, {Default Local},
myFP=Expr(
myProfiler=dt<<PROFILER></PROFILER>Ri: Fattori nel simulatore utilizzando le variabili per la simulazione Monte CarloForse questo codice potrebbe indirizzarti nella giusta direzione:
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"));