몬테 카를로 시뮬레이션을위한 변수 사용을 통한 시뮬레이터 요소여보세요,
데이터 테이블 (dt0)에 나열된 여러 차원을 사용하여 몬테카를로 시뮬레이션을 작성하면 dt0의 N 행은 사용자 입력 및 요구 사항에 따라 동적입니다.
내 질문은 해당 루틴을 사용하여 시뮬레이터 요인에서 차원을 추가하는 방법입니다.
나는 '대체, 구문 분석'기능을 사용하여 작동되도록 노력했습니다. 그러나 모든 차원이 Factors ()에 나열 될 때만 작동합니다.
다음은 내 스크립트입니다.
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 ) )" ),
)
);시뮬레이션 : 몬테 카를로 시뮬레이션에 변수를 사용하여 시뮬레이터 요소아마도이 코드는 올바른 방향으로 당신을 가리킬 수 있습니다 :
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"));시뮬레이션 : 몬테 카를로 시뮬레이션에 변수를 사용하여 시뮬레이터 요소고마워, 이안!
함수가 작동하는 것처럼 보입니다. 그러나 조언에 따라 스크립트를 사용하면 각 프로파일 러에 하나의 Factor 만 표시되는 다중 프로파일 러가 생성됩니다. 하나의 프로파일 러 보고서에 모든 요인을 표시하는 방법을 알고 싶습니다. 의견이 있으십니까? 고맙습니다.
다음은 수정 된 스크립트입니다.
doSimulator=Function(
{xVar, MeanVar, SigmaVar}, {Default Local},
myFP=Expr(
myProfiler=dt<<PROFILER></PROFILER>시뮬레이션 : 몬테 카를로 시뮬레이션에 변수를 사용하여 시뮬레이터 요소네, 보고서를 두 번 보여 주면 기능이 제대로 작동하는지 알 수 있습니다.
위의 코딩 패턴을 기반으로 구축 할 수 있습니다 ( 'SubstituteInto ()'는 여러 번 대체 할 수 있음). 생성 된 분석은 의미가 없지만 아래 코드는 예제입니다. '템플릿 표현식'은 JMP에 의해 작성되었으며 (이후의 몇 가지 수정 사항이 포함되어 있습니다) :
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"));시뮬레이션 : 몬테 카를로 시뮬레이션에 변수를 사용하여 시뮬레이터 요소고마워, 이안!
아마도 이것은 JMP의 현재 버전을 기반으로 한 스크립트에 의해 Monte Carlo 시뮬레이션을 얻기 위해 함수 목록에 많은 변수를 추가함으로써 가장 유망하고 실현 가능한 방법 일 것입니다.