Es posible que haya leído la publicación del blog titulada “ Límites de especificación de procesos que difieren según una columna de agrupación ” y haya pensado
En esa publicación se mostró cómo obtener un análisis de capacidad basado en una columna de agrupación, todo en una sola ventana de informe. Sin embargo, una vez que terminó de leer la publicación,
Es posible que te hayas dado cuenta de que la publicación te proporcionó el análisis que querías, pero se proporcionó un gráfico de control separado para cada fase.
Tal vez usted estaba buscando realmente un diagrama de control monofásico con los límites de especificación trazados en el gráfico....
Una de las grandes características de JMP es su flexible lenguaje de programación. Mediante el uso del lenguaje de programación JMP (JSL) , puede crear el tipo de gráfico que busca. En esta publicación del blog se detalla el código necesario para generar ese gráfico de control monofásico con los límites de especificación trazados en el gráfico .
Ejemplo: Impresión de texto en libros
En mi artículo de blog " Límites de especificación de procesos que difieren según una columna de agrupación ", presenté un ejemplo de un proceso de impresión. Repasemos ese ejemplo. Las variaciones en el proceso de impresión pueden causar distorsión en la línea, incluidos problemas de sesgo, grosor y longitud. Para este ejemplo, vamos a considerar la longitud de la línea. Si la línea es demasiado larga, la oración puede salirse de la página. Si la línea es demasiado corta, se desperdiciará mucho espacio en la página.
Para estos datos en particular, tenemos dos tamaños de libros diferentes. Los libros de tapa dura tienen 17,78 cm de ancho. Los libros de bolsillo tienen 13,97 cm de ancho. La longitud de línea en un libro de tapa dura se considera buena si tiene una longitud impresa de 16 cm +/- 0,2 cm. La longitud de línea en un libro de bolsillo se considera buena si tiene una longitud impresa de 12 +/- 0,4 cm. En cada tirada, se toman para medir el primer y el último libro. Las longitudes de línea se miden en una página específica en el medio de cada libro.

Análisis
Para crear un diagrama de control de fases para este ejemplo, seleccione Generador de diagramas de control en el menú Calidad y proceso. Arrastre Longitud hasta Y. Arrastre Tipo hasta Fase. Arrastre Ejecución hasta el eje x.

Aprendimos de la publicación del blog titulada “ Límites de especificación de procesos que difieren según una columna de agrupación ” que no podemos usar la propiedad de columna de límite de especificación ni el comando Límites de especificación porque estos comandos se aplican a toda la columna (en este caso, Longitud). Esto significa que ambas fases tendrían los mismos límites de especificación, lo cual no es lo que queremos. Por lo tanto, debemos agregarlos mediante scripts.
Obtención del script del gráfico de control
Para obtener el script que produce este gráfico, seleccione “Guardar script en la ventana de scripts” en el triángulo rojo que se encuentra junto al Generador de gráficos de control. Se le proporcionará el siguiente script.
Control Chart Builder(
Show Capability( 0 ),
Variables( Subgroup( :Run ), Y( :Length ), Phase( :Type ) ),
Chart( Position( 1 ) ),
Chart( Position( 2 ) ),
SendToReport(
Dispatch(
{},
"Control Chart Builder",
FrameBox,
{DispatchSeg(
TextSeg( 3 ),
{Line Color( "None" ), Fill Color( "None" )}
), DispatchSeg(
TextSeg( 4 ),
{Line Color( "None" ), Fill Color( "None" )}
)}
)
)
);
Para que el script sea más robusto y fácil de usar para nuestros propósitos, agregaremos algunas cosas a este script. Agregamos código antes del script para abrir las tablas de datos necesarias (los datos reales y la tabla de límites de especificaciones de la que hablaremos más adelante), asignamos un identificador al script, apuntamos el script a la tabla de datos de interés y agregamos un identificador al informe.
dt=Open("SpecChange.jmp"); //actual data
dtSpec=Open("specChangelimits.jmp"); //data containing specification limits
obj=dt<<CONTROL chart="" builder=""></CONTROL>
<P> </P>
<P>A continuación, debemos descubrir cómo agregar los límites de especificación a este script existente.</P>
<H3 id="toc-hId--476198926" id="toc-hId--1762693414">Comando de línea H</H3>
<P>De forma predeterminada, en <A href="https://www.jmp.com/en_us/software/data-analysis-software.html" target="_self" rel="noopener noreferrer">JMP</A> , las líneas de límite de especificación se agregan como líneas de referencia. Puede considerar agregar líneas de referencia a través de JSL. Si prueba esto, descubrirá que esto tampoco le brinda lo que desea. Al igual que con los métodos mencionados anteriormente, las líneas de referencia se aplican a todo el gráfico y, por lo tanto, estarían presentes en ambas fases (tapa dura y libro de bolsillo). En cambio, podemos lograr líneas de especificación separadas para cada fase mediante un segmento de línea. El segmento de línea particular que queremos usar es H Line. El comando H Line tiene el siguiente formato:</P>
<P> </P>
<CODE class=" language-jsl">H Line( x1, x2, y);
Dibuja una línea horizontal en y desde x1 a x2 a través de todo el marco.
Determinar los valores de x1 y x2
Podemos aprovechar la información que ya conoce JMP. El gráfico de control ya sabe qué son x1 y x2 tanto para los libros de tapa dura como para los de bolsillo porque ya ha dibujado líneas de límite de control en el gráfico. Podemos usar esos segmentos de línea existentes para determinar x1 y x2.
actLineSeg=(rpt[FrameBox(2)]<<XPATH>0, //if the description contains the word average
actx=Insert(actx , arg(actLineSeg,i)<<GET x="" values=""></GET></XPATH>
<P>En el código anterior, primero buscamos los segmentos de línea para el gráfico de ubicación. A continuación, obtenemos las descripciones de cada segmento de línea. Creamos dos listas actx y actPhase. Cuando la descripción contiene la palabra "Promedio", los valores x del segmento de línea se almacenan en actx y la etiqueta de fase se almacena en actPhase.</P>
<H3 id="toc-hId-1298808436" id="toc-hId-1722927256">Obtención del argumento y para la línea H</H3>
<P>El método que utilice para obtener y estará determinado por cómo haya almacenado esta información. Para los fines de este ejemplo y de la publicación del blog, asumiremos que esta información se almacena en una tabla de datos separada, tal como se hizo en la publicación del blog “ <A href="https://community.jmp.com/t5/JMPer-Cable/Process-specification-limits-that-differ-based-on-a-grouping/ba-p/36656" target="_self">Límites de especificación de procesos que difieren según una columna de agrupación</A> ”.</P>
<P> </P>
<P><SPAN class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="specChange2.png" style="width: 297px;"><span class="lia-inline-image-display-wrapper" image-alt="specChange2.png" style="width: 297px;"><img src="https://us.v-cdn.net/6038925/uploads/images/5995i8FBEFD91C35B15EE/specChange2.png" role="button" title="specChange2.png" alt="specChange2.png" /></span></SPAN></P>
<P> </P>
<P>Necesitaremos hacer coincidir el valor de actPhase (obtenido con el script anterior) con la columna “Tipo” en nuestra tabla de datos de límites de especificación. Su variable de fase no siempre se llamará “Tipo”. Para que el JSL sea más genérico y se pueda usar en otros ejemplos, podemos obtener el nombre de la variable de fase del informe del generador de gráficos de control. Específicamente, podemos extraer esta información de las etiquetas de fase que aparecen directamente sobre el gráfico.</P>
<P> </P>
<CODE class=" language-jsl">actPhaseName=(rpt[GraphBuilderBox(1)]<<XPATH></XPATH>
<P>Una vez determinada la fila adecuada en la tabla de límites de especificación, podemos obtener los valores del límite de especificación inferior, el objetivo y el límite de especificación superior de las columnas LSL, Objetivo y USL en la tabla de datos de límites de especificación.</P>
<P> </P>
<CODE class=" language-jsl">for(j=1, j<=narg(actx),j++, //for every argument of actx
for(k=1, k<=nrows(dtSpec), k++, //for every row of the specification data table
if(arg(actPhase,j)==Column(dtSpec, actPhaseName)[k],
//if actPhase is equal to Type in the specification table
H Line( arg(actx,j)[1], arg(actx,j)[2], Column(dtSpec, "LSL")[k] );
H Line( arg(actx,j)[1], arg(actx,j)[2], Column(dtSpec, "Target")[k]);
H Line( arg(actx,j)[1], arg(actx,j)[2], Column(dtSpec, "USL")[k] );
);
);
);
Guión gráfico
¿Cómo utilizamos las líneas H en nuestro script? Los comandos HLine deben incluirse en un comando de script de gráficos. Los scripts de gráficos son la forma en que agregamos elementos gráficos a un marco existente dentro de una ventana de informe. Agregaremos una descripción al script y elegiremos el color del lápiz para las líneas de límite de especificación. También podemos determinar el orden de las líneas de la cuadrícula y el orden de las líneas de referencia si es necesario. El script de gráficos se puede enviar a la ventana del generador de gráficos de control mediante el comando SendTo Report.
obj<<SENDTOREPORT></SENDTOREPORT>
<H3 id="toc-hId--1221151498" id="toc-hId-913580630">Conclusión</H3>
<P>Juntando todas estas piezas tenemos el siguiente guión terminado:</P>
<P> </P>
<CODE class=" language-jsl">dt=Open("SpecChange.jmp"); //actual data
dtSpec=Open("specChangelimits.jmp"); //data containing specification limits
obj=dt<<CONTROL chart="" builder="">0, //if the description contains the word average
actx=Insert(actx , arg(actLineSeg,i)<<GET x="" values=""></GET></CONTROL>
<P>La ejecución de este script produce los siguientes resultados.</P>
<P><SPAN class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Note: The specification limits are difficult to see for hardcover since all lines are so close together. You can alter the Y axis through the interface or JSL so that the lines can be seen more clearly if necessary." style="width: 686px;"><span class="lia-inline-image-display-wrapper" image-alt="Note: The specification limits are difficult to see for hardcover since all lines are so close together. You can alter the Y axis through the interface or JSL so that the lines can be seen more clearly if necessary." style="width: 686px;"><img src="https://us.v-cdn.net/6038925/uploads/images/5996i6790A59F4F9F1592/specchangefinished.png" width="686" height="346" role="button" title="specchangefinished.png" alt="Note: The specification limits are difficult to see for hardcover since all lines are so close together. You can alter the Y axis through the interface or JSL so that the lines can be seen more clearly if necessary." /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Note: The specification limits are difficult to see for hardcover since all lines are so close together. You can alter the Y axis through the interface or JSL so that the lines can be seen more clearly if necessary.</span></span><SPAN class="lia-inline-image-caption" onclick="event.preventDefault();">Nota: Los límites de especificación son difíciles de ver en tapa dura, ya que todas las líneas están muy juntas. Puede modificar el eje Y a través de la interfaz o JSL para que las líneas se puedan ver con mayor claridad si es necesario.</SPAN></SPAN></P>
<P>En la imagen de arriba se puede observar que aparece un conjunto de límites de especificación para tapa dura (15,98, 16, 16,02) y un conjunto diferente de límites de especificación para tapa blanda (11,6, 12, 12,4).</P>
<P>Este script es genérico en el sentido de que puede tener tantos niveles de fase como desee, los niveles pueden tener el nombre que desee y la columna de fase puede tener el nombre que desee. Sin embargo, el script requiere que sus límites de especificación se almacenen en una tabla de datos separada. La tabla de datos de límites de especificación requiere que haya 1 fila por nivel de fase. Los nombres de los niveles de fase deben coincidir con los nombres de los niveles que se muestran en el informe CCB. La tabla de datos debe contener columnas tituladas LSL, Target y USL que almacenan el límite de especificación inferior, el objetivo y el límite de especificación superior respectivamente.</P>
<P><SPAN class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="cartoon_thought_bubble_3.jpg" style="width: 150px;"><span class="lia-inline-image-display-wrapper" image-alt="cartoon_thought_bubble_3.jpg" style="width: 150px;"><img src="https://us.v-cdn.net/6038925/uploads/images/6004i22873971DFC74A41/cartoon_thought_bubble_3.jpg" role="button" title="cartoon_thought_bubble_3.jpg" alt="cartoon_thought_bubble_3.jpg" /></span></SPAN></P>