構成列を使用して管理図にルールを選択的に適用するこんにちは、
JSL を使用して、適切なトレンド ルール、つまり「テスト」を管理チャートに適用する際に問題が発生しています。私のデータは、過去 1 年間の特定の製品のすべてのメジャー ロットの多重分析の結果で構成されています。作業しているデータは積み重ね形式であり、テーブルには、管理限界と仕様限界を含む列と、8 つのテストすべてに対応する 8 つの列があります。テスト列では、各行に 1 または 0 のいずれかが含まれ、ルールが適用されるかどうかを示します。参考のために、同様の形式のサンプル テーブルを以下に用意しました。
| ロットID | 分析 | 結果 | LCL | ロンドン大学クリケット・グラウンド | ルール1 | ルール3 | ルール5 |
| A | X | 12 | 10 | 18 | 1 | 0 | 0 |
| A | Y | 204 | 200 | 215 | 1 | 0 | 1 |
| A | Z | 0.8 | 0.5 | 1 | 1 | 1 | 1 |
| B | X | 13 | 10 | 18 | 1 | 0 | 0 |
| B | Y | 209 | 200 | 215 | 1 | 0 | 1 |
| B | Z | 0.7 | 0.5 | 1 | 1 | 1 | 1 |
| C | X | 15 | 10 | 18 | 1 | 0 | 0 |
| C | Y | 205 | 200 | 215 | 1 | 0 | 1 |
| C | Z | 0.8 | 0.5 | 1 | 1 | 1 | 1 |
この例では、3 つの固有のロットに対して 3 つの固有の分析があります。結果列は各ロットの各分析に対して固有ですが、管理限界と傾向ルールは一致する分析に対して一致するため、分析 X にはルール 1 のみが適用されますが、分析 Z には 3 つのルールすべてが適用されます。以下のコードを使用して管理図をプロットしていますが、例として列名を少し変更しています。
dt << Control Chart(
Sample Label( :Lot ),
Group Size( 1 ),
KSigma( 3 ),
By( :Analysis ),
Chart Col( :Result, Levey Jennings( Show Zones( 1 ), Shade Zones( 1 ), Test 1( :Rule1[1] ), Test 3( :Rule3[1] ), Test 5( :Rule5[1] ) ) ),
SendToReport(
Dispatch(
{},
"Levey Jennings of Result",
OutlineBox,
{Set Title("Parameter: "||char(:Analysis))}
),残りのコードは、参照線の追加、フレーム サイズの調整などを行う Dispatch コマンドです。これらのコード セクションには問題がないため、簡潔にするために省略しました。上記のように、Levey Jennings コマンドに「Test 1」、「Test 3」、「Test 5」の行を追加するときに、それぞれの構成列から最初の行の値を参照しようとしました。このように、スクリプトが分析ごとにチャートをプロットすると、最初の行にプロットされている現在の分析のトレンド ルール構成が含まれます。ただし、スクリプトを実行すると、その特定のパラメーターに適用するかどうかに関係なく、3 つのルールがすべて適用されます。JMP でそれぞれの構成列の値を解析し、分析ごとに特定のルールを各チャートに適用するかどうかを判断できるようにする方法を説明してくれる人はいますか?
以前、分割テーブルでこれを実行したことがありますが、その場合、for ループを使用して文字列を作成し、その文字列に値を連結してから、Parse コマンドと Eval コマンドを使用して実行しました。できれば、ここでは for ループを使用しないようにしたいと思います。これは、そもそもスタック形式でデータを取得している理由だからです。
自動化とスクリプトデータの探索と視覚化Re: 構成列を使用して管理図にルールを選択的に適用する2つの変更を加えたJSLを実行しました
- Lotという列を指定しましたが、実際の名前はLot IDです
- 「レポートに送信」セクションを削除しました
Names Default To Here( 1 );
dt = Current Data Table();
dt << Control Chart(
Sample Label( :Lot ID ),
Group Size( 1 ),
KSigma( 3 ),
By( :Analysis ),
Chart Col(
:Result,
Levey Jennings(
Show Zones( 1 ),
Shade Zones( 1 ),
Test 1( :Rule1[1] ),
Test 3( :Rule3[1] ),
Test 5( :Rule5[1] )
)
);
コードが実行され、次の出力が生成されました。

指定されたテストが適切に処理されたことを確認するために、管理図の出力からスクリプトを保存しました。
Control Chart(
SendToByGroup( {:Analysis == "X"} ),
Sample Label( :Lot ID ),
KSigma( 3 ),
SendToByGroup(
{:Analysis == "X"},
Chart Col(
:Result,
Levey Jennings( Show Zones( 1 ), Shade Zones( 1 ), Test 1( 1 ) )
)
),
SendToByGroup(
{:Analysis == "Y"},
Chart Col(
:Result,
Levey Jennings(
Show Zones( 1 ),
Shade Zones( 1 ),
Test 1( 1 ),
Test 5( 1 )
)
)
),
SendToByGroup(
{:Analysis == "Z"},
Chart Col(
:Result,
Levey Jennings(
Show Zones( 1 ),
Shade Zones( 1 ),
Test 1( 1 ),
Test 3( 1 ),
Test 5( 1 )
)
)
),
By( :Analysis )
);
生成されたスクリプトからわかるように、管理図は各分析に対してどのテストを実行するかに関する情報を受け取りました。
私はJMP 18.1.0を使ってWindows 11でコードを実行しました
問題はないと思う
Re: 構成列を使用して管理図にルールを選択的に適用するさて、あなたが説明したとおりに再現してみました。これが私が実行したスクリプトです。
Names Default to Here( 1 );
dt = Current Data Table();
dt << Control Chart(
Sample Label( :Lot ID ),
Group Size( 1 ),
KSigma( 3 ),
By( :Analysis ),
Chart Col(
:Result,
Levey Jennings(
Show Zones( 1 ),
Shade Zones( 1 ),
Test 1( :Rule1[1] ),
Test 3( :Rule3[1] ),
Test 5( :Rule5[1] )
)
)
);
しかし、私の出力では、デフォルトで各分析に対して 3 つのルールすべてがアクティブになっています。以下は、構成列に基づいてテスト 1 のみを適用する X 分析のスクリプトです。
Control Chart(
Sample Label( :Lot ID ),
KSigma( 3 ),
Chart Col(
:Result,
Levey Jennings(
Show Zones( 1 ),
Shade Zones( 1 ),
Test 1( 1 ),
Test 3( 1 ),
Test 5( 1 )
)
),
Where( :Analysis == "X" )
);
私は Windows 11 で JMP 17.0.0 を実行しているので、これはバージョン間の更新の 1 つで対処された問題かもしれません。他のトラブルシューティングを行う前に、IT 部門を通じて更新について確認します。コードをテストしていただきありがとうございます。コードが原則的に機能することを確認し、嬉しく思います。
Re: 構成列を使用して管理図にルールを選択的に適用するJMP 17であなたの発見を再現しました。以下は、各分析レベルを1つずつ実行して、必要な結果を得る1つの方法です。
Names Default To Here( 1 );
dt = Current Data Table();
Summarize( dt, byGroup = By( :Analysis ) );
For Each( {level}, byGroup,
dt << select where( :Analysis == level );
dtTemp = dt << Subset( selected columns( 0 ), selected rows( 1 ) );
Eval(
Eval Expr(
dtTemp << Control Chart(
Sample Label( :Lot ID ),
Group Size( 1 ),
KSigma( 3 ),
//By( :Analysis ),
Chart Col(
:Result,
Levey Jennings(
Show Zones( 1 ),
Shade Zones( 1 ),
Test 1( Expr( dtTemp:Rule1[1] ) ),
Test 3( Expr( dtTemp:Rule3[1] ) ),
Test 5( Expr( dtTemp:Rule5[1] ) )
)
)
)
)
);
);Re: 構成列を使用して管理図にルールを選択的に適用するこれは、分割テーブルで作業しているときに列番号でループし、最終的に JSL に解析されて評価される式を作成する方法と似ています。積み上げテーブルで作業し、By 関数と Where 関数を使用して分析によって分離するときに For ステートメントの使用を避けたいと思っていました。結局のところ、この JMP17 コードは、分割テーブル用に開発したコードよりもはるかにシンプルです。ご意見をありがとうございました。JMP18 にアップグレードできるまで、これを現在のスクリプトに組み込むように努めます。