JSL を使用して、予測プロファイラーで他の変数を修正することで仕様制限を満たす X 変数の範囲を見つける方法を教えてください。JSLの専門家の皆さん、こんにちは。
以下のような予測プロファイラーを備えた DoE OLS または REML モデルがあります。他の変数を修正することで、JSL を使用して LSL と USL を満たすすべての X 変数範囲を自動的に見つけるにはどうすればよいでしょうか。たとえば、仕様を満たすには X1 が 34.6 未満である必要があります。ご協力ありがとうございます。

データの探索と視覚化Re: Prediction Profiler で他の変数を修正することにより、JSL を使用して X 変数の範囲を見つけて仕様制限を満たすにはどうすればよいですか?JMP 17 で導入された設計空間プロファイラーこの種の状況で動作範囲を決定するため。 まだ 17 に更新していない場合は、17 に更新する十分な理由があります。
あなたが説明した特定の JSL ソリューションが本当に必要な場合は、うまくいけば、私よりも優れた JSL スキルを持つ誰かが参加できます。
Re: Prediction Profiler で他の変数を修正することにより、JSL を使用して X 変数の範囲を見つけて仕様制限を満たすにはどうすればよいですか?ありがとう@Ross_Metusalem 、現在JMP 16を使用しています。 うまくいけば、すぐに 17 にアップグレードできます。
Re: Prediction Profiler で他の変数を修正することにより、JSL を使用して X 変数の範囲を見つけて仕様制限を満たすにはどうすればよいですか?それまでの間、あなたは予測プロファイラーのシミュレーション機能この目的のために。
Re: Prediction Profiler で他の変数を修正することにより、JSL を使用して X 変数の範囲を見つけて仕様制限を満たすにはどうすればよいですか?@マークベイリー予測プロファイラーでシミュレーションを使用して範囲を取得する方法のヒントを教えてください。 どうもありがとう。
Re: Prediction Profiler で他の変数を修正することにより、JSL を使用して X 変数の範囲を見つけて仕様制限を満たすにはどうすればよいですか?私が引用したヘルプセクションを読みましたか?
因子範囲の適合性を評価するための望ましさ関数を決定するには、最初に応答限界を指定する必要があります。
予測プロファイラーでシミュレーターを開きます。 すべての因子レベルは最初に固定されています。 プロセス制御下で予想されるように、X1 がランダムに変化するように変更します。 応答のランダムな変化も指定します。 シミュレーションはヒストグラムを表示して、X1 から応答への誤差の伝達の適合性を示します。 シミュレーション テーブルは、詳細な情報を提供します。
Re: Prediction Profiler で他の変数を修正することにより、JSL を使用して X 変数の範囲を見つけて仕様制限を満たすにはどうすればよいですか?やあ@マークベイリー、あなたが共有したリンクをたどりました。手動で X 変数ごとに 5% 未満の欠陥率を見つけることができます。 非常に多くのモデルと変数があるため、このプロセスを 1 つずつ行うのではなく、自動化する方法を見つけたいと考えています。 とても時間がかかります。 JSLでそれを行うことは可能ですか?
Re: Prediction Profiler で他の変数を修正することにより、JSL を使用して X 変数の範囲を見つけて仕様制限を満たすにはどうすればよいですか?はい、プロファイラーとそれが提供するシミュレーターをスクリプト化できます。 [ヘルプ] > [スクリプト インデックス] > [オブジェクト] > [プロファイラーとシミュレーター] を参照してください。

Re: Prediction Profiler で他の変数を修正することにより、JSL を使用して X 変数の範囲を見つけて仕様制限を満たすにはどうすればよいですか?@マークベイリーパラメータのシミュレーションを終了し、すでにすべてのシミュレーション結果を収集しています。 超かっこいい!!!手伝ってくれてどうもありがとう。
私にとっての唯一の課題は、モデル スクリプトから項の値を取得することです。 私が使用したのは、「{Profiler(」、次に「用語値」を検索してすべての用語をリストに入れ、シミュレートすることです。 値という用語には数値と文字があり、"xxxx"n を含むものとそうでないものがあります。さまざまなケースすべてに対応するコードを作成するのは非常に困難です。 DoE モデルから Term 値を取得する簡単な方法はありますか?
Re: Prediction Profiler で他の変数を修正することにより、JSL を使用して X 変数の範囲を見つけて仕様制限を満たすにはどうすればよいですか?に "モデル スクリプトから項の値を取得します」というのは、モデル テーブル スクリプトのパラメータ推定値のことですか? モデルのテーブル スクリプトを保存しましたか?
名前には文字列を使用できます。 一部の文字は名前に使用できません。 不適切な名前を使用する場合は、回避策が必要です。
Re: Prediction Profiler で他の変数を修正することにより、JSL を使用して X 変数の範囲を見つけて仕様制限を満たすにはどうすればよいですか?@マークベイリー以下は私の例の1つです。 Fit group モデルからスクリプトを読み取り、Term Value を因子リストに取得する汎用コードが必要です。 リストを取得したら、データ テーブルの列名と比較して、シミュレーション コードを作成できるように、それらが数値か文字かを判断します。最後の部分は私のコードですが、プロファイラーに複数の 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: Prediction Profiler で他の変数を修正することにより、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: Prediction Profiler で他の変数を修正することにより、JSL を使用して X 変数の範囲を見つけて仕様制限を満たすにはどうすればよいですか?変数の目的の値として最後に表示するもの力はいいえ文字列。
どのように使用しますか力あなたのスクリプトで? 関数への引数になりますか?
Re: Prediction Profiler で他の変数を修正することにより、JSL を使用して X 変数の範囲を見つけて仕様制限を満たすにはどうすればよいですか?@マークベイリーstr は単なる変数名です。以下のコードでは実際に random_sim と response_sim を使用しました。この 2 つの変数を for ループで変更することにより、一度にすべての要素をシミュレートできます。 Y と Term Value を抽出するために以前に使用したコードでは、文字列に "\! が含まれていますが、引数を抽出する方法には "\! が含まれていません。これが唯一の違いです。
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: Prediction Profiler で他の変数を修正することにより、JSL を使用して X 変数の範囲を見つけて仕様制限を満たすにはどうすればよいですか?@マークベイリーあなたのソリューションは素晴らしく、私のソリューションよりもはるかに簡単です。 手伝ってくれてどうもありがとう。
しかし、この方法には別の問題がありました。 あなたは私を助けることができます?
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),"