Prediction Profiler에서 다른 변수를 수정하여 사양 한도를 충족하는 X 변수 범위를 찾는 데 JSL을 사용하는 방법은 무엇입니까?안녕하세요 JSL 전문가 여러분,
아래와 같은 예측 프로파일러가 있는 DoE OLS 또는 REML 모델이 있습니다. 다른 변수를 수정하여 JSL로 LSL 및 USL을 자동으로 충족하는 모든 X 변수 범위를 어떻게 찾을 수 있습니까? 예를 들어, X1은 사양을 충족하려면 34.6보다 낮아야 합니다. 도와주셔서 정말 감사합니다.

데이터 탐색 및 시각화Re: JSL을 사용하여 예측 프로파일러에서 다른 변수를 수정하여 사양 제한을 충족하는 X 변수 범위를 찾는 방법은 무엇입니까?JMP 17은 다음을 도입했습니다. 디자인 공간 프로파일러 이런 종류의 상황에서 작동 범위를 결정하기 위한 것입니다. 아직 업데이트하지 않은 경우 17로 업데이트해야 하는 좋은 이유입니다.
당신이 설명한 특정 JSL 솔루션이 진정으로 필요한 경우 나보다 더 나은 JSL 기술을 가진 사람이 차임할 수 있기를 바랍니다.
Re: JSL을 사용하여 예측 프로파일러에서 다른 변수를 수정하여 사양 제한을 충족하는 X 변수 범위를 찾는 방법은 무엇입니까?감사합니다 @Ross_Metusalem , 현재 JMP 16을 사용하고 있습니다. 곧 17로 업그레이드할 수 있기를 바랍니다.
Re: JSL을 사용하여 예측 프로파일러에서 다른 변수를 수정하여 사양 제한을 충족하는 X 변수 범위를 찾는 방법은 무엇입니까?그동안 다음을 사용할 수 있습니다. Prediction Profiler의 시뮬레이션 기능 이 목적을 위해.
Re: JSL을 사용하여 예측 프로파일러에서 다른 변수를 수정하여 사양 제한을 충족하는 X 변수 범위를 찾는 방법은 무엇입니까?@Mark_Bailey 예측 프로파일러에서 시뮬레이션을 사용하여 범위를 얻는 방법에 대한 힌트를 줄 수 있습니까? 매우 감사합니다.
Re: JSL을 사용하여 예측 프로파일러에서 다른 변수를 수정하여 사양 제한을 충족하는 X 변수 범위를 찾는 방법은 무엇입니까?내가 인용한 도움말 섹션을 공부했습니까?
요인 범위의 적합성을 평가하기 위한 만족도 함수를 결정하려면 먼저 반응 한계를 지정해야 합니다.
예측 프로파일러에서 시뮬레이터를 엽니다. 모든 요인 수준은 처음에 고정됩니다. 프로세스 제어에서 예상한 대로 X1을 임의로 변경하도록 변경합니다. 응답의 임의 변형도 지정합니다. 시뮬레이션은 X1에서 응답으로의 오류 전송의 적합성에 대한 아이디어를 제공하는 히스토그램을 표시합니다. 시뮬레이션 테이블은 자세한 정보를 제공합니다.
Re: JSL을 사용하여 예측 프로파일러에서 다른 변수를 수정하여 사양 제한을 충족하는 X 변수 범위를 찾는 방법은 무엇입니까?안녕 @Mark_Bailey , 나는 당신이 공유한 링크를 따라갔고, 각 X 변수에 대해 5% 미만의 불량률을 수동으로 찾을 수 있습니다. 너무 많은 모델과 변수가 있기 때문에 이 프로세스를 하나씩 수행하지 않고 자동화하는 방법을 찾고 싶습니다. 너무 많은 시간이 걸릴 것입니다. JSL에서 할 수 있습니까?
Re: JSL을 사용하여 예측 프로파일러에서 다른 변수를 수정하여 사양 제한을 충족하는 X 변수 범위를 찾는 방법은 무엇입니까?예, 제공하는 프로파일러와 시뮬레이터를 스크립팅할 수 있습니다. 도움말 > 스크립팅 인덱스 > 객체 > 프로파일러 및 시뮬레이터를 참조하십시오.

Re: JSL을 사용하여 예측 프로파일러에서 다른 변수를 수정하여 사양 제한을 충족하는 X 변수 범위를 찾는 방법은 무엇입니까?@Mark_Bailey 매개변수에 대한 시뮬레이션을 마쳤고 이미 모든 시뮬레이션 결과를 수집했습니다. 슈퍼 쿨!!!도와 주셔서 정말 감사합니다.
나에게 유일한 도전은 모델 스크립트에서 용어 값을 얻는 것입니다. 내가 사용한 것은 "{Profiler(")를 검색한 다음 "Term Value"를 검색하여 모든 용어를 목록으로 가져온 다음 시뮬레이션하는 것입니다. 값이라는 용어에는 숫자와 문자가 있고 일부는 "xxxx"n이 있고 일부는 그렇지 않습니다. 모든 다른 경우에 대한 코드를 만드는 것은 매우 어렵습니다. DoE 모델에서 용어 값을 쉽게 얻을 수 있는 방법이 있습니까?
Re: JSL을 사용하여 예측 프로파일러에서 다른 변수를 수정하여 사양 제한을 충족하는 X 변수 범위를 찾는 방법은 무엇입니까?에 의해 " 모델 스크립트에서 용어 값을 가져옵니다." 모델 테이블 스크립트의 매개변수 추정치를 의미합니까? 모델에 대한 테이블 스크립트를 저장했습니까?
이름에 문자열을 사용할 수 있습니다. 일부 문자는 이름에 사용할 수 없습니다. 부적절한 이름을 사용하려면 해결 방법이 필요합니다.
Re: JSL을 사용하여 예측 프로파일러에서 다른 변수를 수정하여 사양 제한을 충족하는 X 변수 범위를 찾는 방법은 무엇입니까?@Mark_Bailey 아래는 제 예시 중 하나입니다. Fit 그룹 모델에서 스크립트를 읽어야 하는 일반 코드가 필요하고 용어 값을 요소 목록으로 가져와야 합니다. 목록이 있으면 데이터 테이블의 열 이름과 비교하여 시뮬레이션 코드를 만들 수 있도록 숫자 또는 문자인지 확인합니다.마지막 부분은 제 코드인데 너무 복잡하고 프로파일러에 Term Value가 여러 개 있으면 작동하지 않습니다. 따라서 Profiler만 켜두는 것이 좋습니다.같은 작업을 더 쉽게 완료할 수 있는 방법이 있는지 궁금합니다. 도와 주셔서 정말 감사합니다.
factors = {"ELONG", "HARDNESS(+/-0.2)", "ABRASION For example (%)", "MODULUS"}다음은 예제 모델의 스크립트입니다.
Fit Group(
Fit Model(
Y( :"SILICA (%)"n ),
Effects( :ELONG, :"HARDNESS(+/-0.2)"n ),
Personality( "Standard Least Squares" ),
Emphasis( "Minimal Report" ),
Run(
Profiler(
1,
Confidence Intervals( 1 ),
Term Value(
ELONG( 417.5, Lock( 0 ), Show( 1 ) ),
"HARDNESS(+/-0.2)"n( 69.775, Lock( 0 ), Show( 1 ) )
)
),
:"SILICA (%)"n << {Summary of Fit( 1 ), Analysis of Variance( 1 ),
Parameter Estimates( 1 ), Effect Tests( 0 ), Effect Details( 0 ),
Lack of Fit( 0 ), Scaled Estimates( 0 ), Plot Actual by Predicted( 1 ),
Plot Regression( 0 ), Plot Residual by Predicted( 0 ),
Plot Studentized Residuals( 1 ), Plot Effect Leverage( 0 ),
Plot Residual by Normal Quantiles( 1 ), Box Cox Y Transformation( 0 ),
Press( 1 )}
)
),
Fit Model(
Y( :SILANE Value ),
Effects(
:"ABRASION For example (%)"n, :MODULUS, :ELONG, :"HARDNESS(+/-0.2)"n,
:MODULUS * :ELONG
),
Personality( "Standard Least Squares" ),
Emphasis( "Minimal Report" ),
Run(
Profiler(
1,
Confidence Intervals( 1 ),
Term Value(
"ABRASION For example (%)"n( 133.1, Lock( 0 ), Show( 1 ) ),
MODULUS( 1255, Lock( 0 ), Show( 1 ) ),
ELONG( 417.5, Lock( 0 ), Show( 1 ) ),
"HARDNESS(+/-0.2)"n( 69.775, Lock( 0 ), Show( 1 ) )
)
),
:SILANE Value << {Summary of Fit( 1 ), Analysis of Variance( 1 ),
Parameter Estimates( 1 ), Effect Tests( 0 ), Effect Details( 0 ),
Lack of Fit( 0 ), Scaled Estimates( 0 ), Plot Actual by Predicted( 1 ),
Plot Regression( 0 ), Plot Residual by Predicted( 0 ),
Plot Studentized Residuals( 1 ), Plot Effect Leverage( 0 ),
Plot Residual by Normal Quantiles( 1 ), Box Cox Y Transformation( 0 ),
Press( 1 )}
)
),
Fit Model(
Y( :SULFUR ),
Effects( :ELONG ),
Personality( "Standard Least Squares" ),
Emphasis( "Minimal Report" ),
Run(
Profiler(
1,
Confidence Intervals( 1 ),
Term Value( ELONG( 417.5, Lock( 0 ), Show( 1 ) ) )
),
:SULFUR << {Summary of Fit( 1 ), Analysis of Variance( 1 ),
Parameter Estimates( 1 ), Effect Tests( 0 ), Effect Details( 0 ),
Lack of Fit( 0 ), Scaled Estimates( 0 ), Plot Actual by Predicted( 1 ),
Plot Regression( 0 ), Plot Residual by Predicted( 0 ),
Plot Studentized Residuals( 1 ), Plot Effect Leverage( 0 ),
Plot Residual by Normal Quantiles( 1 ), Box Cox Y Transformation( 0 ),
Press( 1 )}
)
),
<<{Profiler(
1,
Confidence Intervals( 1 ),
Term Value(
<FONT color="#0000FF"> ELONG( 417.5, Lock( 0 ), Show( 1 ) ),
"HARDNESS(+/-0.2)"n( 69.775, Lock( 0 ), Show( 1 ) ),
"ABRASION For example (%)"n( 133.1, Lock( 0 ), Show( 1 ) ),
MODULUS( 1255, Lock( 0 ), Show( 1 ) )</FONT>
)
)}
);이것은 요인 목록을 만드는 코드입니다.
Names Default To Here( 1 );
dt = Current Data Table();
curep = Current Report();
dtname = dt << Get Name;
//Check how many prediction profiles, if >1 it's fit group, =1 it's fit model
pred_objs = curep << XPath( "//OutlineBox[ contains( text(), 'Prediction Profile' ) ]" );
num_objs = N Items( pred_objs );
If( num_objs < 1,
Throw( "No prediction profile is found!" )
);
If( num_objs == 1,
textind = "Profiler(",
textind = "{Profiler("
);
//Read the Model Term list
modelobj = curep[Outline Box( 1 )] << get scriptable object;
modeltext = Char( modelobj << get script );
//Show( modeltext );
posA = Contains( modeltext, textind );
termstext = Right( modeltext, Length( modeltext ) - posA + 1 );
/*Show( termstext );*/
posB = Contains( termstext, "Term Value" );
posC = Contains( termstext, "Show(1))", -1 );
termvalue = Left( termstext, posC + 7 ) || ","; //Make sure all terms end with )),
termvalue = Right( termvalue, Length( termvalue ) - posB - 10 );
/*Show( termvalue );
Show( posB );
Show( posC );
Show( posD );*/
//Check how many factors or main effects in the final model
words = Words( termvalue, "," );
termnum = 0;
For( i = 1, i <= N Items( words ), i++,
If( Contains( words[i], "Show" ),
termnum = termnum + 1
)
);
//Get the term with default value
term list = {};
For( k = 1, k <= termnum, k++,
//show(firstpos);
pos1 = Contains( termvalue, "))," ) + 3;
term1 = Left( termvalue, pos1 );
//show(term1);
termvalue = Right( termvalue, Length( termvalue ) - pos1 );
//show(termvalue);
Insert Into( term list, term1 );
);
Show( term list );
//get term name without default value
factors = {};
For( k = 1, k <= N Items( term list ), k++,
termK = term list[k];
firstchar = Left( termK, 1 );
If( firstchar == "\!"",
pos2 = Contains( termK, "\!"", -1 );
term2 = Left( termK, pos2 + 1 );
,
pos2 = Contains( termK, "(" ); //Categorical terms cannot have "()" in the column name
term2 = Left( termK, pos2 - 1 );
);
Insert Into( factors, char(parse(term2)) );
);
Show( factors );
Re: JSL을 사용하여 예측 프로파일러에서 다른 변수를 수정하여 사양 제한을 충족하는 X 변수 범위를 찾는 방법은 무엇입니까?더 우아하고 강력한 접근 방식이 있다고 생각합니다. 내가 생각하고 있는 접근법에 대해서는 이 예제의 끝 부분을 참조하십시오.
Names Default to Here( 1 );
// JMP Pro 16.2
// start with example of a model script
model = Expr(
Fit Group(
Fit Model(
Y( :"SILICA (%)"n ),
Effects( :ELONG, :"HARDNESS(+/-0.2)"n ),
Personality( "Standard Least Squares" ),
Emphasis( "Minimal Report" ),
Run(
Profiler(
1,
Confidence Intervals( 1 ),
Term Value(
ELONG( 417.5, Lock( 0 ), Show( 1 ) ),
"HARDNESS(+/-0.2)"n( 69.775, Lock( 0 ), Show( 1 ) )
)
),
:"SILICA (%)"n << {Summary of Fit( 1 ), Analysis of Variance( 1 ),
Parameter Estimates( 1 ), Effect Tests( 0 ), Effect Details( 0 ),
Lack of Fit( 0 ), Scaled Estimates( 0 ), Plot Actual by Predicted( 1 ),
Plot Regression( 0 ), Plot Residual by Predicted( 0 ),
Plot Studentized Residuals( 1 ), Plot Effect Leverage( 0 ),
Plot Residual by Normal Quantiles( 1 ), Box Cox Y Transformation( 0 ),
Press( 1 )}
)
),
Fit Model(
Y( :SILANE Value ),
Effects(
:"ABRASION For example (%)"n, :MODULUS, :ELONG, :"HARDNESS(+/-0.2)"n,
:MODULUS * :ELONG
),
Personality( "Standard Least Squares" ),
Emphasis( "Minimal Report" ),
Run(
Profiler(
1,
Confidence Intervals( 1 ),
Term Value(
"ABRASION For example (%)"n( 133.1, Lock( 0 ), Show( 1 ) ),
MODULUS( 1255, Lock( 0 ), Show( 1 ) ),
ELONG( 417.5, Lock( 0 ), Show( 1 ) ),
"HARDNESS(+/-0.2)"n( 69.775, Lock( 0 ), Show( 1 ) )
)
),
:SILANE Value << {Summary of Fit( 1 ), Analysis of Variance( 1 ),
Parameter Estimates( 1 ), Effect Tests( 0 ), Effect Details( 0 ),
Lack of Fit( 0 ), Scaled Estimates( 0 ), Plot Actual by Predicted( 1 ),
Plot Regression( 0 ), Plot Residual by Predicted( 0 ),
Plot Studentized Residuals( 1 ), Plot Effect Leverage( 0 ),
Plot Residual by Normal Quantiles( 1 ), Box Cox Y Transformation( 0 ),
Press( 1 )}
)
),
Fit Model(
Y( :SULFUR ),
Effects( :ELONG ),
Personality( "Standard Least Squares" ),
Emphasis( "Minimal Report" ),
Run(
Profiler(
1,
Confidence Intervals( 1 ),
Term Value( ELONG( 417.5, Lock( 0 ), Show( 1 ) ) )
),
:SULFUR << {Summary of Fit( 1 ), Analysis of Variance( 1 ),
Parameter Estimates( 1 ), Effect Tests( 0 ), Effect Details( 0 ),
Lack of Fit( 0 ), Scaled Estimates( 0 ), Plot Actual by Predicted( 1 ),
Plot Regression( 0 ), Plot Residual by Predicted( 0 ),
Plot Studentized Residuals( 1 ), Plot Effect Leverage( 0 ),
Plot Residual by Normal Quantiles( 1 ), Box Cox Y Transformation( 0 ),
Press( 1 )}
)
),
<<{Profiler(
1,
Confidence Intervals( 1 ),
Term Value(
ELONG( 417.5, Lock( 0 ), Show( 1 ) ),
"HARDNESS(+/-0.2)"n( 69.775, Lock( 0 ), Show( 1 ) ),
"ABRASION For example (%)"n( 133.1, Lock( 0 ), Show( 1 ) ),
MODULUS( 1255, Lock( 0 ), Show( 1 ) )
)
)}
);
);
// last argument is in-line message send for Profiler
last = N Arg( model );
profilerExpr = Arg( model, last );
// unwrap Send() and its list argument
profilerExpr = Arg( profilerExpr, 1 )[1];
// find term values
termVals = Associative Array();
termExpr = Arg( profilerExpr, 3 );
nArgs = N Arg( termExpr );
For( i = 1, i <= nArgs, i++,
Insert Into( termVals,
Char( Head( Arg( termExpr, i ) ) ),
Arg( Arg( termExpr, i ), 1 )
)
);
// use resulting dictionary for term values
Show( termVals );Re: JSL을 사용하여 예측 프로파일러에서 다른 변수를 수정하여 사양 제한을 충족하는 X 변수 범위를 찾는 방법은 무엇입니까?마지막에 원하는 변수 값으로 표시하는 것 str ~이다 ~ 아니다 문자열.
어떻게 사용할 것인가 str 당신의 스크립트에서? 함수에 대한 인수가 될까요?
Re: JSL을 사용하여 예측 프로파일러에서 다른 변수를 수정하여 사양 제한을 충족하는 X 변수 범위를 찾는 방법은 무엇입니까?@Mark_Bailey str은 단지 변수 이름입니다. 아래 코드에서 실제로 random_sim과 responds_sim을 사용했습니다. for 루프에서 이 두 변수를 변경하여 한 번에 모든 요소를 시뮬레이션할 수 있습니다. 이전에 Y 및 용어 값을 추출하기 위해 사용한 코드에는 문자열에 "\!가 있지만 인수를 추출하는 방법에는 "\!가 없습니다. 이것이 유일한 차이점입니다.
simu model script = Parse(
Eval Insert(
"\[
simobj << Simulator(
1,
Factors( ^random_sim^),
Responses( ^responses_sim^ ),
Resimulate
);
]\"
)
);
Show( simu model script );
Eval( simu model script );Re: JSL을 사용하여 예측 프로파일러에서 다른 변수를 수정하여 사양 제한을 충족하는 X 변수 범위를 찾는 방법은 무엇입니까?@Mark_Bailey 귀하의 솔루션은 훌륭하고 내 것보다 훨씬 쉽습니다. 도와 주셔서 정말 감사합니다.
하지만 이 방법에는 또 다른 문제가 있습니다. 저를 도와주실 수 있나요?
factors = {"Kilometer (kg)"n, "Temperature (ºC)"n};
responses_sim = "";
values = {1.23,2.34};
for (i=1, i<=N Items(factors), i++,
responses_sim = responses_sim || factors[i] || "<< Add Random Noise(" || char(values[i]) || "),"
);
show(responses_sim);
responses_sim = "Kilometer (kg)<< Add Random Noise(1.23),Temperature (ºC)<< Add Random Noise(2.34),";
<BR /><FONT face="arial black,avant garde" size="5"><STRONG>I want to get this result below, how to do it?</STRONG></FONT>
responses_sim = "Kilometer (kg)"n << Add Random Noise(1.23), "Temperature (ºC)"n << Add Random Noise(2.34),"