Come utilizzare un modello di riferimento per la verifica continua del processo multivariata guidata dal modelloCiao a tutti,
In seguito al post (link a cui è fornito di seguito) -
https://community.jmp.com/t5/Discussions/Help-in-JSL-scripting-of-Model-Driven-Multivariate-Control-Chart/mp/655359#M84445
Vorrei estendere lo script per avere uno script generico sulle linee simili a quanto suggerito in precedenza, ma questa volta il grafico di controllo multivariato basato sul modello dovrebbe utilizzare alcuni modelli di riferimento (PCA o PLS) per fissare il limite di controllo. Il motivo è che, ai fini della continua verifica del processo, una volta fissato il limite (calcolato dal set di dati storici senza valori anomali), i batch futuri devono essere monitorati rispetto a questo limite. Attualmente, ciò che sta accadendo è che ogni volta che questo script viene eseguito, genera un nuovo limite di controllo (per ovvi motivi) poiché il set di dati è diverso.
Quindi, la prima parte è fissare il limite di controllo (tutti i set di dati storici/golden dovrebbero scendere al di sotto del limite di controllo) e per fare ciò, è possibile sviluppare un modello con validazione incrociata per finalizzare il numero di componenti in modo che il i punti dati scendono al di sotto del limite di controllo (ovviamente, dopo aver rimosso i valori anomali)? La parte difficile qui che sto affrontando, anche se i cosiddetti valori anomali vengono rimossi, ogni volta che MDMVCC fornisce uno o l'altro punto dati oltre un limite di controllo (poiché il set di dati sta cambiando).Questo deve essere risolto.
La seconda parte consiste nell'eseguire questo script (con limite di controllo fisso) sui lotti prodotti successivamente per identificare eventuali escursioni nelle variabili come parte dell'attività CPV.
L'idea generale è di avere uno script MDMVCC generico (da un modello di riferimento) in grado di prevedere/identificare i valori anomali/variazioni con buona precisione.
Apprezzo molto se qualcuno della comunità può guidarmi o gettare qualche luce in più su questa richiesta.
Grazie in anticipo !!
K.R.,
Nawaz
Modellazione statistica avanzataRi: Come utilizzare un modello di riferimento per scopi di verifica continua del processo multivariato basato su modelloCiao @Riaz90Nawaz
Per le tue seconde domande (con limiti di controllo fissi), questa è un'idea.
- Aggiungi dati storici/d'oro al set di dati corrente/batch futuro
- Impostare l'opzione "Fine dati storici alla riga" per MDMVCC
Ecco uno script di esempio per riferimento.
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;
Spero che funzioni per il tuo problema.
Ri: Come utilizzare un modello di riferimento per scopi di verifica continua del processo multivariato basato su modelloCIAO @yuichi_katsumur ,
Grazie mille per la tua guida. Apprezzo molto.
Allo stesso codice, sto cercando di aggiungere una matrice di grafici a dispersione multivariata in modo da comprendere le correlazioni tra le variabili aggiungendo il seguente codice, ma sembra che lo stia facendo nel modo sbagliato perché non funziona -
multivariato(
Y(cols_di_interesse),
Stima della varianza ("Row-wise"),
Matrice del grafico a dispersione( Ellissi di densità( 1 ) )
);
Apprezzo se puoi gettare luce anche su questo aspetto.
Grazie e KR,
Ri: Come utilizzare un modello di riferimento per scopi di verifica continua del processo multivariato basato su modelloCiao @Riaz90Nawaz ,
Un'idea è il seguente codice. Penso che questo funzionerà.
Multivariate(
Y( eval(cols_of_interest) ),
Variance Estimation( "Row-wise" ),
Scatterplot Matrix( Density Ellipses( 1 ) )
);
Ri: Come utilizzare un modello di riferimento per scopi di verifica continua del processo multivariato basato su modelloCIAO @yuichi_katsumur ,
Grazie mille per il tempestivo supporto. Ha funzionato.
Una domanda generale, che ho pubblicato anche nel mio post principale, non possiamo aggiungere visivamente questo limite fisso (generato dal set di dati storici) al set di dati corrente (tramite script)? Capisco, sebbene lo script fornisca contributi solo per quelle righe che violano il limite di controllo storico. sarebbe l'ideale avere questa linea di riferimento anche per il set di dati corrente. Al momento, per il set di dati corrente, il limite di controllo è mostrato come linea rossa tratteggiata, non voglio che appaia (per ovvi motivi), invece di questo, il limite di controllo fisso dallo storico dovrebbe continuare per il presente/futuro anche il set di dati. Ciò fornisce una rappresentazione visiva più corretta.
K.R
Ri: Come utilizzare un modello di riferimento per scopi di verifica continua del processo multivariato basato su modelloCIAO @Riaz90Nawaz ,
Come forse saprai, l'Upper Control Limit (UCL) per i dati storici si basa sulla distribuzione Beta. D'altra parte, l'UCL per i dati correnti si basa sulla distribuzione F. https://www.jmp.com/support/help/en/17.1/#page/jmp/statistical-details-for-limits.shtml#ww345612
Non sono sicuro che abbia senso utilizzare lo stesso limite per ogni dato, un'idea è utilizzare l'opzione Exclude Row. Ecco uno script di esempio per riferimento.
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
);Ri: Come utilizzare un modello di riferimento per scopi di verifica continua del processo multivariato basato su modelloCIAO @yuichi_katsumur ,
Grazie mille ancora una volta per il tuo pronto supporto!!
Sì, sono a conoscenza delle differenze di distribuzione di base per il set di dati storico e attuale. In realtà, nell'ambito della "Continued Process Verification (CPV)", non possiamo utilizzare limiti diversi per il monitoraggio successivo. Deve esserci un limite di controllo fisso (derivato dal set di dati storici) rispetto al quale vengono monitorati i lotti successivi, fondamentalmente per studiare eventuali derive/spostamenti nel processo. Spero che tu abbia capito cosa sto cercando di risolvere.
Apprezzo il tuo supporto su questo, ma non possiamo farlo senza escludere le righe? Ho appena provato lo script fornito, anche se in termini di visualizzazione del grafico di controllo T2, serve allo scopo che volevo ottenere, ma quando ho guardato i grafici dei contributi T2, lo script fornisce i grafici per tutti i punti (specialmente per il set di dati corrente ) indipendentemente dal fatto che un punto specifico violi o meno l'UCL. Sebbene nello script i grafici dei contributi siano specificatamente menzionati per "alarm_rows", ma sembra che non funzioni, potrebbe essere perché abbiamo escluso le righe del set di dati correnti, non ne siamo sicuri.
Spero che tu abbia capito cosa sto cercando di ottenere.
Grazie in anticipo per il tuo supporto,
Cordiali saluti,
Ri: Come utilizzare un modello di riferimento per scopi di verifica continua del processo multivariato basato su modelloCIAO @Riaz90Nawaz , Grazie per la risposta. Capisco cosa vuoi. Mi dispiace, c'è un errore nel mio copione. Si prega di aggiungere la seguente riga allo script (nella riga 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!!
Quando escludo le righe, ho selezionato alcune righe, quindi è necessario deselezionarle. Penso che questo funzionerà.
Ri: Come utilizzare un modello di riferimento per scopi di verifica continua del processo multivariato basato su modelloCIAO @yuichi_katsumur ,
Grazie mille per lo script aggiornato.Sta lavorando adesso.
Apprezzo il tuo pronto supporto !!
Vi auguro una buona giornata !!
Distinti saluti,