Faktoren im Simulator durch Verwendung von Variablen für die Monte-Carlo-SimulationHallo,
Ich frage mich, ob ich eine Monte-Carlo-Simulation durchführen möchte, indem ich die mehreren Dimensionen verwende, die in der Datentabelle (dt0) aufgeführt sind. Die N Zeilen von dt0 sind dynamisch nach den Eingaben und Anforderungen des Benutzers.
Meine Frage ist, wie man eine geeignete Routine verwendet, um diese Dimensionen in den Factors of Simulator hinzuzufügen.
Ich habe versucht, die Funktion "Substitute, Parse" zu verwenden, damit es funktioniert. Aber es funktioniert nur, wenn alle diese Dimensionen in Factors() aufgelistet sind.
Hier sind meine Skripte:
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 ) )" ),
)
);Betreff: Faktoren im Simulator durch Verwendung von Variablen für die Monte-Carlo-SimulationDanke, Jan!
Vielleicht ist dies die vielversprechendste und praktikabelste Methode, indem viele Variablen in die Funktionsliste aufgenommen werden, um die Monte-Carlo-Simulation durch Skripte zu erhalten, die auf der aktuellen Version von JMP basieren.
Betreff: Faktoren im Simulator durch Verwendung von Variablen für die Monte-Carlo-SimulationJa, das zweimalige Zeigen des Berichts diente nur der Veranschaulichung, dass die Funktion funktioniert.
Sie können einfach auf dem obigen Codierungsmuster aufbauen ("SubstituteInto()" kann eine beliebige Anzahl von Ersetzungen vornehmen). Die generierte Analyse ist nicht aussagekräftig, aber der folgende Code ist ein Beispiel. Der „Vorlagenausdruck“ wurde von JMP erstellt (mit einigen nachträglichen Änderungen):
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"));Betreff: Faktoren im Simulator durch Verwendung von Variablen für die Monte-Carlo-SimulationVielen Dank, Jan!
Die Funktion scheint zu funktionieren. Mit den Skripten, die Ihrem Rat folgen, werden jedoch mehrere Profiler generiert, wobei in jedem Profiler nur ein Faktor angezeigt wird. Ich frage mich, wie ich alle Faktoren in einem Profiler-Bericht anzeigen kann. Haben Sie einen Kommentar? Bin dankbar.
Hier ist mein überarbeitetes Skript:
doSimulator=Function(
{xVar, MeanVar, SigmaVar}, {Default Local},
myFP=Expr(
myProfiler=dt<<PROFILER></PROFILER>Betreff: Faktoren im Simulator durch Verwendung von Variablen für die Monte-Carlo-SimulationVielleicht weist Sie dieser Code in die richtige Richtung:
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"));