Uso de columnas de configuración para aplicar reglas de forma selectiva a los gráficos de controlHola,
Tengo un problema al aplicar las reglas de tendencia adecuadas, o "Pruebas", a los gráficos de control con JSL. Mis datos consisten en los resultados de múltiples análisis para todos los lotes de medición de un determinado producto en el último año. Los datos con los que estoy trabajando están en un formato apilado y la tabla tiene columnas que contienen límites de control y especificación, así como 8 columnas para las 8 Pruebas. En las columnas de pruebas, cada fila tendrá un 1 o un 0 para indicar si se aplicará la regla. He creado una tabla de muestra a continuación en un formato similar para referencia.
| Identificación del lote | Análisis | Resultado | LCL | Universidad de California en Los Ángeles | Regla 1 | Regla 3 | Regla 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 |
En este ejemplo, hay 3 análisis únicos para 3 lotes únicos. La columna Resultado es única para cada análisis de cada lote, pero los límites de control y las reglas de tendencia coinciden para los análisis coincidentes, por lo que para el análisis X, solo se debe aplicar la Regla 1, pero para el Análisis Z, se deben aplicar las 3 reglas. Tengo gráficos de control que se trazan utilizando el código a continuación, con modificaciones menores en los nombres de las columnas para el bien del ejemplo:
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))}
),El resto del código son comandos de Dispatch para agregar líneas de referencia, ajustar el tamaño del marco, etc. Esas secciones de código no tienen problemas, por lo que las he omitido para abreviar. Como se muestra arriba, al agregar las líneas "Test 1", "Test 3" y "Test 5" al comando Levey Jennings, intenté hacer referencia al valor de la primera fila de las respectivas columnas de configuración. De esta manera, a medida que el script traza los gráficos por Análisis, la primera fila contendrá la configuración de la Regla de tendencia del análisis actual que se está trazando. Sin embargo, cuando ejecuto el script, solo aplica las 3 reglas, independientemente de si se deben aplicar para ese parámetro específico. ¿Alguien puede ayudar a explicar cómo puedo hacer que JMP analice el valor de las respectivas columnas de configuración y determine si se debe aplicar una determinada regla a cada gráfico por Análisis?
Anteriormente hice que esto funcionara en una tabla dividida, pero lo hice usando un bucle for para crear una cadena con los valores concatenados en la cadena y luego usando los comandos Parse y Eval para ejecutar. Realmente preferiría no usar un bucle for aquí si se puede evitar, ya que es por eso que estoy extrayendo los datos en un formato apilado en primer lugar.
Automatización y scriptingExploración y visualización de datosRe: Uso de columnas de configuración para aplicar reglas de forma selectiva a gráficos de controlEjecuté tu JSL con 2 modificaciones
- Especificó una columna llamada Lote y el nombre real es ID de lote
- Eliminé la sección Enviar a informe
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] )
)
);
El código se ejecutó y produjo el siguiente resultado

Para verificar que las pruebas especificadas se manejaron correctamente, guardé el script de la salida del Gráfico de control
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 )
);
Como se puede ver en el script generado, el Gráfico de Control recibió la información sobre qué pruebas ejecutar para cada Análisis.
Ejecuté el código en Windows 11 con JMP 18.1.0
No veo ningún problema
Re: Uso de columnas de configuración para aplicar reglas de forma selectiva a gráficos de controlBien, intenté replicar exactamente lo que habías descrito. Este es el script que ejecuté.
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] )
)
)
);
Pero mi salida predeterminada tiene las tres reglas activas para cada análisis. Aquí está el script para el análisis X, al que solo se le debe aplicar la prueba 1 según las columnas de configuración.
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" )
);
Estoy usando JMP 17.0.0 en Windows 11, por lo que tal vez esto sea algo que se haya solucionado en una de las actualizaciones entre nuestras versiones. Consultaré con mi departamento de TI sobre la actualización antes de realizar cualquier otra solución de problemas. ¡Gracias por probar el código, me alegra ver que, en principio, debería funcionar!
Re: Uso de columnas de configuración para aplicar reglas de forma selectiva a gráficos de controlHe replicado sus hallazgos en JMP 17. A continuación, se muestra una forma de obtener los resultados que desea ejecutando cada uno de los niveles de análisis uno a la vez.
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: Uso de columnas de configuración para aplicar reglas de forma selectiva a los gráficos de controlEsto es similar a cómo lo había logrado cuando trabajaba con una tabla dividida, haciendo un bucle por número de columna y creando una expresión que finalmente se analizó en JSL y se evaluó. Solo esperaba evitar el uso de una declaración For cuando trabajaba con la tabla apilada y utilizaba las funciones By y Where para separar por análisis. En definitiva, este código JMP17 sigue siendo mucho más simple que lo que había desarrollado para tablas divididas. ¡Gracias nuevamente por el aporte! Intentaré incorporar esto en mi script actual hasta que pueda actualizar a JMP18.