So verwenden Sie ein Benchmark-Modell zur modellgesteuerten multivariaten kontinuierlichen ProzessverifizierungHallo alle,
In Fortsetzung des Beitrags (Link zu dem unten angegeben ist) –
https://community.jmp.com/t5/Discussions/Help-in-JSL-scripting-of-Model-Driven-Multivariate-Control-Chart/mp/655359#M84445
Ich würde das Skript gerne erweitern, um ein generisches Skript zu haben, das dem zuvor vorgeschlagenen ähnelt, aber dieses Mal sollte das modellgesteuerte multivariate Kontrolldiagramm einige Benchmark-Modelle (entweder PCA oder PLS) verwenden, um die Kontrollgrenze festzulegen. Der Grund dafür ist, dass zur weiteren Prozessüberprüfung, sobald wir den Grenzwert festgelegt haben (berechnet aus dem historischen Datensatz ohne Ausreißer), die zukünftigen Chargen anhand dieses Grenzwerts überwacht werden müssen. Was derzeit passiert, ist, dass jedes Mal, wenn dieses Skript ausgeführt wird, ein neues Kontrolllimit generiert wird (aus offensichtlichen Gründen), da der Datensatz unterschiedlich ist.
Der erste Teil besteht also darin, die Kontrollgrenze festzulegen (der gesamte historische/goldene Datensatz sollte unter die Kontrollgrenze fallen). Um dies zu erreichen, ist es möglich, ein Modell mit Kreuzvalidierung zu entwickeln, um die Anzahl der Komponenten so festzulegen, dass die Datenpunkte fallen unter die Kontrollgrenze (natürlich nach Entfernung der Ausreißer)? Der knifflige Teil hier, mit dem ich konfrontiert bin, besteht darin, dass die sogenannten Ausreißer jedes Mal entfernt werden, wenn der MDMVCC den einen oder anderen Datenpunkt außerhalb einer Kontrollgrenze angibt (da sich der Datensatz ändert).Das muss behoben werden.
Der zweite Teil besteht darin, dieses Skript (mit fester Kontrollgrenze) auf die anschließend hergestellten Chargen auszuführen, um etwaige Abweichungen in den Variablen als Teil der CPV-Aktivität zu identifizieren.
Die Gesamtidee besteht darin, über ein generisches MDMVCC-Skript (aus einem Benchmark-Modell) zu verfügen, das die Ausreißer/Variationen mit guter Genauigkeit vorhersagen/identifizieren kann.
Ich freue mich sehr, wenn mir jemand aus der Community weiterhelfen oder mehr Licht auf diese Anfrage werfen kann.
Vielen Dank im Voraus !!
KR,
Nawaz
Erweiterte statistische ModellierungBetreff: Verwendung eines Benchmark-Modells zur modellgesteuerten multivariaten kontinuierlichen ProzessüberprüfungHallo @Riaz90Nawaz
Für Ihre zweite Frage (mit festen Kontrollgrenzen) ist dies eine Idee.
- Fügen Sie historische/goldene Daten zum aktuellen Datensatz/zukünftigen Stapel hinzu
– Legen Sie die Option „Historische Daten enden bei Zeile“ für MDMVCC fest
Hier ist ein Beispielskript als Referenz.
Names Default To Here( 1 );
historical_dt = Open( "$SAMPLE_DATA/Quality Control/Aluminum Pins Historical.jmp" );
current_dt = Open( "$SAMPLE_DATA/Quality Control/Aluminum Pins Current.jmp" );
//Get the number of rows for the historical data
historical_data_end_row = N Row( historical_dt );
//Combine the data tables
dt = historical_dt << Concatenate( current_dt );
//Close
Close( historical_dt, nosave );
Close( current_dt, nosave );
dt << Clear Row States;
cols_of_interest = dt << get column names( Continuous, "String" );
Eval(
Substitute(
Expr(
obj = dt <<
Model Driven Multivariate Control Chart(
Process( cols_of_interest ),
Historical Data End at Row( historical_data_end_row )
)
),
Expr( cols_of_interest ), Eval( cols_of_interest ),
Expr( historical_data_end_row ), Eval( historical_data_end_row )
)
);
obj << T Square Plot( Save Values );
new_cols = Associative Array( dt << get column names( Continuous, "String" ) );
new_cols << Remove( Associative Array( cols_of_interest ) ); // T2 column
// get UCL (should be made more robust)
ucl_value = ((Report( obj )[Outline Box( "T² Limit Summaries" )] << Child)[3] << Get)[1];
alarm_rows = Loc( dt[0, new_cols << get keys] > ucl_value );
dt << Select Rows( alarm_rows );
Wait( 0 );
obj << T² Plot( Contribution Plot for Selected Samples( alarm_rows ) );
dt << Clear Select;
Ich hoffe, es funktioniert für Ihr Problem.
Betreff: Verwendung eines Benchmark-Modells zur modellgesteuerten multivariaten kontinuierlichen ProzessüberprüfungHallo @yuichi_katsumur ,
Vielen Dank für Ihre Anleitung. Schätzen.
Ich versuche, dem gleichen Code eine multivariate Streudiagrammmatrix hinzuzufügen, um die Korrelationen zwischen den Variablen zu verstehen, indem ich den folgenden Code hinzufüge, aber es scheint, dass ich es falsch mache, da es nicht funktioniert –
Multivariat(
Y(cols_of_interest),
Varianzschätzung („zeilenweise“),
Streudiagrammmatrix (Dichteellipsen (1))
);
Seien Sie dankbar, wenn Sie auch diesen Aspekt beleuchten können.
Danke und KR,
Betreff: Verwendung eines Benchmark-Modells zur modellgesteuerten multivariaten kontinuierlichen ProzessüberprüfungHallo @Riaz90Nawaz ,
Eine Idee ist der folgende Code. Ich denke, das wird funktionieren.
Multivariate(
Y( eval(cols_of_interest) ),
Variance Estimation( "Row-wise" ),
Scatterplot Matrix( Density Ellipses( 1 ) )
);
Betreff: Verwendung eines Benchmark-Modells zur modellgesteuerten multivariaten kontinuierlichen ProzessüberprüfungHallo @yuichi_katsumur ,
Vielen Dank für die prompte Unterstützung. Es funktionierte.
Eine allgemeine Frage, die ich auch in meinem Hauptbeitrag gestellt habe: Können wir diesen festen Grenzwert (generiert aus dem historischen Datensatz) nicht visuell (durch Skripterstellung) zum aktuellen Datensatz hinzufügen? Ich verstehe, obwohl das Skript nur Beiträge für die Zeilen bereitstellt, die die historische Kontrollgrenze überschreiten. Ideal wäre es, diese Referenzlinie auch für den aktuellen Datensatz zu haben. Derzeit wird für den aktuellen Datensatz die Kontrollgrenze als gestrichelte rote Linie angezeigt. Ich möchte nicht, dass dies angezeigt wird (aus offensichtlichen Gründen). Stattdessen sollte die feste Kontrollgrenze aus dem historischen Datensatz für die Gegenwart/Zukunft bestehen bleiben Datensatz ebenfalls. Dies sorgt für eine korrektere visuelle Darstellung.
KR
Betreff: Verwendung eines Benchmark-Modells zur modellgesteuerten multivariaten kontinuierlichen ProzessüberprüfungHallo @Riaz90Nawaz ,
Wie Sie vielleicht wissen, basiert die obere Kontrollgrenze (Upper Control Limit, UCL) für historische Daten auf der Beta-Verteilung. Andererseits basiert die UCL für aktuelle Daten auf der F-Verteilung. https://www.jmp.com/support/help/en/17.1/#page/jmp/statistical-details-for-limits.shtml#ww345612
Ich bin mir nicht sicher, ob es sinnvoll ist, für alle Daten den gleichen Grenzwert zu verwenden. Eine Idee wäre die Verwendung der Option „Zeile ausschließen“. Hier ist ein Beispielskript als Referenz.
Names Default To Here( 1 );
historical_dt = Open( "$SAMPLE_DATA/Quality Control/Aluminum Pins Historical.jmp" );
current_dt = Open( "$SAMPLE_DATA/Quality Control/Aluminum Pins Current.jmp" );
//Get the number of rows for the historical data
historical_data_end_row = N Row( historical_dt );
//Combine the data tables
dt = historical_dt << Concatenate( current_dt );
//Close
Close( historical_dt, nosave );
Close( current_dt, nosave );
dt << Clear Row States;
cols_of_interest = dt << get column names( Continuous, "String" );
dt << Multivariate(
Y( Eval( cols_of_interest ) ),
Variance Estimation( "Row-wise" ),
Scatterplot Matrix( Density Ellipses( 1 ) )
);
//Exclude current data
data_end_row = N Row( dt );
selected_row = dt << select rows( Index( historical_data_end_row, data_end_row ) );
selected_row << Exclude;
obj = dt << Model Driven Multivariate Control Chart( Process( Eval( cols_of_interest ) ) );
//Show excluded row
obj << Show Excluded Rows( 1 );
obj << T Square Plot( Save Values );
new_cols = Associative Array( dt << get column names( Continuous, "String" ) );
new_cols << Remove( Associative Array( cols_of_interest ) ); // T2 column
// get UCL (should be made more robust)
ucl_value = ((Report( obj )[Outline Box( "T² Limit Summaries" )] << Child)[3] << Get)[1];
alarm_rows = Loc( dt[0, new_cols << get keys] > ucl_value );
dt << Select Rows( alarm_rows );
Wait( 0 );
obj << T² Plot( Contribution Plot for Selected Samples( alarm_rows ) );
dt << Clear Select;
//Add reference line
report = obj << report;
report[Picture Box( 1 )][axis box( 2 )] << Add Ref Line(
{0, eval(historical_data_end_row)},
"Solid",
"Light Red",
"Historical",
1,
0.25
);Betreff: Verwendung eines Benchmark-Modells zur modellgesteuerten multivariaten kontinuierlichen ProzessüberprüfungHallo @yuichi_katsumur ,
Nochmals vielen Dank für die prompte Unterstützung!!
Ja, mir sind die grundlegenden Verteilungsunterschiede zwischen dem historischen und dem aktuellen Datensatz bekannt. Eigentlich können wir im Rahmen der „Continued Process Verification (CPV)“ keine unterschiedlichen Grenzwerte für die anschließende Überwachung verwenden. Es muss eine feste Kontrollgrenze (abgeleitet aus historischen Datensätzen) geben, anhand derer die nachfolgenden Chargen überwacht werden, im Wesentlichen um etwaige Abweichungen/Verschiebungen im Prozess zu untersuchen. Ich hoffe, Sie haben verstanden, was ich zu beheben versuche.
Ich schätze Ihre Unterstützung diesbezüglich, aber können wir das nicht tun, ohne Zeilen auszuschließen? Ich habe gerade das bereitgestellte Skript ausprobiert. In Bezug auf die Visualisierung von T2-Kontrolldiagrammen erfüllt es zwar den Zweck, den ich erreichen wollte, aber als ich mir die T2-Beitragsdiagramme ansah, lieferte das Skript die Diagramme für alle Punkte (insbesondere für den aktuellen Datensatz). ), unabhängig davon, ob ein bestimmter Punkt gegen die UCL verstößt oder nicht. Obwohl im Skript die Beitragsdiagramme speziell für „alarm_rows“ erwähnt werden, scheint es nicht zu funktionieren, was daran liegen könnte, dass wir aktuelle Datensatzzeilen ausgeschlossen haben, da bin ich mir nicht sicher.
Ich hoffe, Sie haben verstanden, was ich erreichen möchte.
Danke im Voraus für deine Unterstützung,
Mit freundlichen Grüße,
Betreff: Verwendung eines Benchmark-Modells zur modellgesteuerten multivariaten kontinuierlichen ProzessüberprüfungHallo @Riaz90Nawaz , Danke für Ihre Antwort. Ich verstehe, was du willst. Es tut mir leid, es gibt einen Fehler in meinem Skript. Bitte fügen Sie dem Skript die folgende Zeile hinzu (in Zeile 26).
//Exclude current data
data_end_row = N Row( dt );
selected_row = dt << select rows( Index( historical_data_end_row, data_end_row ) );
selected_row << Exclude;
dt << Clear Select; //Please add this line!!
Wenn ich Zeilen ausschließe, habe ich einige Zeilen ausgewählt, daher müssen Sie die Auswahl aufheben. Ich denke, das wird funktionieren.
Betreff: Verwendung eines Benchmark-Modells zur modellgesteuerten multivariaten kontinuierlichen ProzessüberprüfungHallo @yuichi_katsumur ,
Vielen Dank für das aktualisierte Skript.Es funktioniert jetzt.
Vielen Dank für Ihre schnelle Unterstützung!!
Ich wünsche ihnen einen wunderbaren Tag !!
Mit freundlichen Grüßen,