Pase elementos de estadísticas calculadas a coordenadas específicas en una tabla de datos guardadaGenero varios gráficos con estadísticas calculadas. Me gustaría transmitir parámetros estadísticos calculados específicos, por ejemplo, el mínimo, la mediana y el máximo de cuantiles y Std Dev de Resumen estadístico a coordenadas específicas en una tabla de datos guardada usando JSL.
Por ejemplo, me gustaría transmitir
- Cuantil mínimo a la fila 5, columna 7
- mediana a fila 5, columna 8
- cuantil máximo a la fila 5, columna 9
- Std Dev a la fila 5 columna 10.
a mi tabla de datos guardada. ¿Cómo lograr esto usando JSL?
(las coordenadas están vacías en la tabla de datos guardados para empezar)
Tabla de datosGráficossecuencias de comandosRe: Pasar elementos de estadísticas calculadas a coordenadas específicas en una tabla de datos guardadaGracias. Esto funciona. Viniendo de Matlab y C #, todavía me estoy acostumbrando a la forma de pensar de JSL.
Re: Pasar elementos de estadísticas calculadas a coordenadas específicas en una tabla de datos guardadaMire su código cuidadosamente. está asignando el valor devuelto de la función de inclusión a resultsdt. Ese valor devuelto es lo último que hace el archivo que se incluye, que se evalúa como "H". no es una tabla de datos.
editar:
ya sea (1) agregue una línea final a basicTable.jsl que diga
resultsdt;
o (2) cambie la inclusión de esta manera (agregando comentario)
/*resultsdt =*/ include ("basicTable.jsl");
Creo que (1) parece más cercano a lo que esperas. Se asegura de que lo último evaluado sea la variable que contiene la tabla de datos, que luego se devuelve como resultado de include().
(2) también funcionará, tal vez, dependiendo del comportamiento local y usando el mismo nombre de variable. Creo que será un poco impredecible dependiendo de si usas namesDefaultToHere en todas partes y si los resultados ya existen. No estoy seguro de cómo funcionará sin pruebas.
Re: Pasar elementos de estadísticas calculadas a coordenadas específicas en una tabla de datos guardadaLa declaración
Column(resultsdt, "Column 1")[8] ="H";
simplemente pasa un nombre de parámetro H a la octava fila de la columna 1. Una forma alternativa de definir resultados
Names Default To Here (1);
// set up a table to accept the results
resultsdt = New Table( "Results Table",
Add Rows( 8),
New Column( "Column 1" ),
New Column( "Column 2" ),
New Column( "Column 3" ),
New Column( "Column 4" ),
New Column( "Column 5" ),
New Column( "Column 6" ),
New Column( "Min", Numeric ),
New Column( "Median", Numeric ),
New Column( "Max", Numeric ),
New Column( "SD", Numeric )
);
resultsdt:Column 1[1] ="A";
resultsdt:Column 1[2] ="B";
resultsdt:Column 1[3] ="C";
resultsdt:Column 1[4] ="D";
resultsdt:Column 1[5] ="E";
resultsdt:Column 1[6] ="F";
resultsdt:Column 1[7] ="G";
resultsdt:Column 1[8] ="H";
tampoco funciona cuando se usa
resultsdt = include ("basicTable.jsl");
Sin embargo, si dejo la columna 1 vacía, el código funciona bien. Cualquier ayuda para resolver este problema sería muy útil.
Re: Pasar elementos de estadísticas calculadas a coordenadas específicas en una tabla de datos guardada
resultsdt = include ("basicTable.jsl");
Si ese archivo es lo que muestra, el problema es que resultsdt no es una tabla de datos, pero (¿tal vez?) Lo que sea que esto evalúe
Column(resultsdt, "Column 1")[8] ="H";
que podría ser "H". El resultado de la función include es lo último que se evalúa. (De acuerdo con su nota.)
Sí, el mensaje de error no fue tan útil como podría desear. @Audrey_Shull - debe apuntar a la izquierda del =, no a la derecha.
Re: Pasar elementos de estadísticas calculadas a coordenadas específicas en una tabla de datos guardadaGracias @Craige_Hales . Ahora entiendo un poco mejor el tema. Sin embargo, todavía hay una falla. Lo siguiente funciona según lo previsto
Names Default To Here (1);
delete symbols ();
clear log ();
// set up a table to accept the results
resultsdt = New Table( "Results Table",
Add Rows( 8),
New Column( "Column 1" ),
New Column( "Column 2" ),
New Column( "Column 3" ),
New Column( "Column 4" ),
New Column( "Column 5" ),
New Column( "Column 6" ),
New Column( "Min", Numeric ),
New Column( "Median", Numeric ),
New Column( "Max", Numeric ),
New Column( "SD", Numeric )
);
Column(resultsdt, "Column 1")[1] = "A";
Column(resultsdt, "Column 1")[2] = "B";
Column(resultsdt, "Column 1")[3] = "C";
Column(resultsdt, "Column 1")[4] = "D";
Column(resultsdt, "Column 1")[5] = "E";
Column(resultsdt, "Column 1")[6] = "F";
Column(resultsdt, "Column 1")[7] = "G";
Column(resultsdt, "Column 1")[8] ="H";
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
getDistChart = Function({ColName, _LSL, _USL}, {distChart},
New Window(""||ColName||" distribution",
distChart = dt << Distribution(
Stack( 1 ),
Continuous Distribution(
Column(As Column (ColName) ),
Horizontal Layout( 1 ),
Vertical( 0 ),
Capability Analysis( LSL(_LSL ), USL(_USL) )
),
SendToReport(
Dispatch(
{},
"Distrib Histogram",
FrameBox,
{DispatchSeg( LabelSeg( 1 ), {Font( "Segoe UI", 7, "Plain" )} ),
DispatchSeg( LabelSeg( 2 ), {Font( "Segoe UI", 7, "Plain" )} )}
)
)
);
);
return(distChart);
);
dist = getDistChart ("weight", 55, 185);
toPass= Report( dist )[Outline Box("weight" ), Outline Box( "Quantiles" ), Table Box( 1 ), Number Col Box(1)]<< get (1);
//resultsdt = include ("basicTable.jsl");
resultsdt[1, 2] = toPass;
//show (toPass);
Sin embargo, si defino resultados por separado como a continuación
Names Default To Here (1);
// set up a table to accept the results
resultsdt = New Table( "Results Table",
Add Rows( 8),
New Column( "Column 1" ),
New Column( "Column 2" ),
New Column( "Column 3" ),
New Column( "Column 4" ),
New Column( "Column 5" ),
New Column( "Column 6" ),
New Column( "Min", Numeric ),
New Column( "Median", Numeric ),
New Column( "Max", Numeric ),
New Column( "SD", Numeric )
);
Column(resultsdt, "Column 1")[1] = "A";
Column(resultsdt, "Column 1")[2] = "B";
Column(resultsdt, "Column 1")[3] = "C";
Column(resultsdt, "Column 1")[4] = "D";
Column(resultsdt, "Column 1")[5] = "E";
Column(resultsdt, "Column 1")[6] = "F";
Column(resultsdt, "Column 1")[7] = "G";
Column(resultsdt, "Column 1")[8] ="H";
y luego llámelo como se muestra a continuación (que es como configuré mi código real)
Names Default To Here (1);
delete symbols ();
clear log ();
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
getDistChart = Function({ColName, _LSL, _USL}, {distChart},
New Window(""||ColName||" distribution",
distChart = dt << Distribution(
Stack( 1 ),
Continuous Distribution(
Column(As Column (ColName) ),
Horizontal Layout( 1 ),
Vertical( 0 ),
Capability Analysis( LSL(_LSL ), USL(_USL) )
),
SendToReport(
Dispatch(
{},
"Distrib Histogram",
FrameBox,
{DispatchSeg( LabelSeg( 1 ), {Font( "Segoe UI", 7, "Plain" )} ),
DispatchSeg( LabelSeg( 2 ), {Font( "Segoe UI", 7, "Plain" )} )}
)
)
);
);
return(distChart);
);
dist = getDistChart ("weight", 55, 185);
toPass= Report( dist )[Outline Box("weight" ), Outline Box( "Quantiles" ), Table Box( 1 ), Number Col Box(1)]<< get (1);
resultsdt = include ("basicTable.jsl");
resultsdt[1, 2] = toPass;
//show (toPass);
me sale el error
Not subscriptable value{8} in access or evaluation of 'Assign' , resultsdt[1, 2] = /*###*/toPass/*###*/
¿Dónde me estoy equivocando?
(Observo que si no defino las entradas en la Columna 1, ambos enfoques anteriores funcionan bien)
Re: Pasar elementos de estadísticas calculadas a coordenadas específicas en una tabla de datos guardada2 problemas, la variable local que se devuelve nunca se asigna nada, y la tabla de datos debe pasarse a la función de usuario. Algo como esto
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
getDistChart = Function( {dt, ColName, _LSL, _USL},
{distChart},
New Window( "" || ColName || " distribution",
distChart = dt << Distribution(
Stack( 1 ),
Continuous Distribution(
Column( As Column( ColName ) ),
Horizontal Layout( 1 ),
Vertical( 0 ),
Capability Analysis( LSL( _LSL ), USL( _USL ) )
),
SendToReport(
Dispatch(
{},
"Distrib Histogram",
FrameBox,
{DispatchSeg( LabelSeg( 1 ), {Font( "Segoe UI", 7, "Plain" )} ),
DispatchSeg( LabelSeg( 2 ), {Font( "Segoe UI", 7, "Plain" )} )}
)
)
)
);
Return( distChart );
);
dist = getDistChart( dt, "weight", 55, 185 );
En JMP, el operador << es el enviar operador y envía un mensaje (a la derecha) a un objeto programable , a la izquierda. La tabla de datos (dt) es un objeto programable, pero no sabe acerca de un mensaje obtenerDistancia . Conoce las plataformas integradas, como distribución . El índice de secuencias de comandos muestra todos los nombres de mensajes para la tabla de datos.
Re: Pasar elementos de estadísticas calculadas a coordenadas específicas en una tabla de datos guardada@ron_horne . Lo siguiente debería ayudar a aclarar las cosas un poco más, ya que es muy similar a mi problema real. Obtengo el diagrama de distribución a través de una función.
Names Default To Here (1);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
getDistChart = Function({ColName, _LSL, _USL}, {distChart},
New Window(""||ColName||" distribution",
Distribution(
Stack( 1 ),
Continuous Distribution(
Column(As Column (ColName) ),
Horizontal Layout( 1 ),
Vertical( 0 ),
Capability Analysis( LSL(_LSL ), USL(_USL) )
),
SendToReport(
Dispatch(
{},
"Distrib Histogram",
FrameBox,
{DispatchSeg( LabelSeg( 1 ), {Font( "Segoe UI", 7, "Plain" )} ),
DispatchSeg( LabelSeg( 2 ), {Font( "Segoe UI", 7, "Plain" )} )}
)
)
);
);
return(distChart);
);
dist = dt << getDistChart ("weight", 55, 185);
Para mí, parece que la última línea no está haciendo lo que se supone que debe hacer para extraer valores de la distribución, ya que, en primer lugar, no se traza ninguna distribución. La pregunta ahora es cómo obtener valores de estadísticas calculadas cuando la distribución se traza a través de una función como la mía arriba. ¿Quizás una función no es un mensaje, por lo que no se puede enviar a un objeto usando <
Cualquier ayuda sería muy útil ya que todavía estoy aprendiendo JMP.
Re: Pasar elementos de estadísticas calculadas a coordenadas específicas en una tabla de datos guardadaGracias de nuevo @ron_horne , pero ambos no funcionan y me da el mismo error.
¿Está diciendo que el siguiente es un uso correcto y válido? Tenga en cuenta que es no tramando la distribución si se usa como a continuación (por cierto, no entiendo la función de dist en dist=dt ?)
Output = Report( dist = dt << getDistribution("ColName", "LSL", "USL", "other input parameters") );
y el error (copiado del registro)
Send Expects Scriptable Object{8} in access or evaluation of 'Send' , Output[Outline Box( "height" ), Outline Box( "Quantiles" ),
Table Box( 1 ), Number Col Box( 1 )] << /*###*/get( 1 ) /*###*/Not subscriptable value{8} in access or evaluation of 'Assign' , resultsdt[5, 9] = /*###*/Output[Outline Box( "Pass Distribution" ),
Outline Box( "Quantiles" ), Table Box( 1 ), Number Col Box( 1 )] << /*###*/get( 1 ) /*###*/
/*###*/
Lo que recibo se debe a mi siguiente declaración (incluso cuando su sugerencia a continuación)
resultsdt[5, 9] = Output[Outline Box( "height" ), Outline Box( "Quantiles" ), Table Box( 1 ), Number Col Box( 1)] << get( 1 ); // max
En caso afirmativo, me gustaría hacer una prueba simple y pasar algo más directo a resultsdt. ¿Hay alguna prueba simple que pueda hacer para probar si puedo obtener algo de Producción a la tabla de datos resultados ?
Re: Pasar elementos de estadísticas calculadas a coordenadas específicas en una tabla de datos guardadaHola @Neo ,
si entiendo su problema correctamente, debe prestar atención a la numeración y las direcciones. una vez que utilice los nombres de los cuadros de contorno, la numeración de los Cuadros de tabla y los Cuadros de columnas numéricas comienza desde 1.
Por lo tanto, intente lo siguiente:
resultsdt[5, 9] = Output[Outline Box( "height" ), Outline Box( "Quantiles" ), Table Box( 1 ), Number Col Box( 1)] << get( 1 ); // max
si desea utilizar Number Col Box (11) intente esto:
resultsdt[5, 9] = Output[Number Col Box( 11)] << get( 1 ); // max
Espero que esto ahora funcione.
en general, hay formas mucho más sofisticadas de hacer que el script encuentre la ubicación de los valores de interés usando xpath () o coincidencia de patrones como en este enlace: http://www.pega-analytics.co.uk/blog/oneway-advisor-step-3/
Re: Pasar elementos de estadísticas calculadas a coordenadas específicas en una tabla de datos guardadaGracias @ron_horne . Permítanme tratar de dar una visión general de lo que estoy tratando de hacer. Mi script principal tiene el siguiente flujo (simplificado aquí).
Abra una tabla de datos (y llámela dt ), y luego trazar diagramas de distribución para varias columnas usando una función
getDistribution ("ColName", "LSL", "USL", "other input parameters")
Cada gráfico de distribución resultante tiene "Cuantiles", "Estadísticas resumidas" y "Análisis de capacidad (con contorno cerrado)".
La siguiente parte del script principal es crear una tabla (llamémosla resultados ) con varias filas y columnas donde necesito pasar valores de estadísticas calculadas como se indica en la publicación original.
Sin embargo, lo siguiente no funciona.
output = Report( dist = dt << getDistribution("ColName", "LSL", "USL", "other input parameters") );
resultsdt[5, 9] = Output[Outline Box( "height" ), Outline Box( "Quantiles" ), Table Box( 6 ), Number Col Box( 11)] << get( 1 ); // max
Me he asegurado de que los números en Table Box () y Number Col Box () sean correctos. Obtuve el siguiente error
Send Expects Scriptable Object{8} in access or evaluation of 'Send' , output[Outline Box( "height" ), Outline Box( "Quantiles" ),
Table Box( 6 ), Number Col Box( 11 )] << /*###*/get( 1 ) /*###*/
¿Dónde me estoy equivocando?
Re: Pasar elementos de estadísticas calculadas a coordenadas específicas en una tabla de datos guardadaHola Neo,
su referencia a distb no funciona, ya que distb no es una capa de informe de nada. es la capa de análisis. En JMP hay una diferencia entre ellos.
para extraer algo de la salida, debe hacer referencia explícita a la capa del informe.
mira esto: Extraer estadísticas de un análisis en un informe si tiene varias salidas, deberá nombrarlas y definirlas correctamente para asegurarse de obtener los valores que busca.
Permítanos saber si funciona. de lo contrario, considere proporcionar algunos archivos y secuencias de comandos desde el punto que le está dando problemas.
mis mejores deseos,
Ron
Re: Pasar elementos de estadísticas calculadas a coordenadas específicas en una tabla de datos guardada@ron_horne . Gracias. Me tomó algún tiempo recodificar para poder tener La "Tabla de resultados" abierta para los valores de las estadísticas calculadas podría pasarse a ella.
Empecé con tu sugerencia y tengo una pregunta. ¿Por qué esto no funciona?
distb = Distribution( Continuous Distribution( Column( :height ) ) ) ;
// Extract min median max and SD
resultsdt[5, 7] = distb[Outline Box( "height" ), Outline Box( "Quantiles" ), Table Box( 1 ), Number Col Box( 1 )] << get( 11 ); // min
resultsdt[5, 8] = distb[Outline Box( "height" ), Outline Box( "Quantiles" ), Table Box( 1 ), Number Col Box( 1 )] << get( 6 ); // median
resultsdt[5, 9] = distb[Outline Box( "height" ), Outline Box( "Quantiles" ), Table Box( 1 ), Number Col Box( 1 )] << get( 1 ); // max
resultsdt[5, 10] = distb[Outline Box( "height" ), Outline Box( "Summary Statistics" ), Number Col Box( 1 )] << get( 2 ); // Std dev.
y porque tiene que ser
output = Report( dist = dt << Distribution( Continuous Distribution( Column( :height ) ) ) );
Tengo varias parcelas de distribución a las que puedo asignar fácilmente un nombre como distb1, distb2,... pero si necesito tener
output = Report( dist = dt << Distribution( ..... ) );
Tendré que comprobar cómo afecta esto al resto de mi código.
Re: Pasar elementos de estadísticas calculadas a coordenadas específicas en una tabla de datos guardada
Hola @Neo
Que yo sepa, no hay forma en JMP de establecer datos en una celda de una tabla cerrada.
Si alguien más aquí sabe mejor, por favor háganoslo saber.
tal vez pueda abrir otra tabla como intermediario para mantener la información allí mientras aún está recopilando y solo al final abrir la tabla de resultados final.
Ron
Re: Pasar elementos de estadísticas calculadas a coordenadas específicas en una tabla de datos guardadaGracias @ron_horne . Creo que esto funcionaría. Sin embargo, antes de probar esto con mi problema real, tengo una pregunta. ¿Es necesario abrir la "Tabla de resultados" antes de que se le puedan pasar los valores?
En mi caso, la "Tabla de resultados" es un archivo guardado y no planeaba abrirlo a menos que no sea posible pasarle valores de otra manera.
(Tendré que cambiar el resto de mi código si necesito tener mi "Tabla de resultados" abierta en la instancia en la que se le pasan los valores)
Re: Pasar elementos de estadísticas calculadas a coordenadas específicas en una tabla de datos guardadaHola @Neo
vea si puede extraer lo que necesita de este script
Names Default To Here( 1 );
// set up a table to accept the results
resultsdt = New Table( "Results Table",
Add Rows( 20 ),
New Column( "Column 1" ),
New Column( "Column 2" ),
New Column( "Column 3" ),
New Column( "Column 4" ),
New Column( "Column 5" ),
New Column( "Column 6" ),
New Column( "Min", Numeric ),
New Column( "Median", Numeric ),
New Column( "Max", Numeric ),
New Column( "SD", Numeric )
);
// Open Data Table: Big Class.jmp
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
// Launch platform: Distribution
output = Report( dist = dt << Distribution( Continuous Distribution( Column( :height ) ) ) );
// Extract min median max and SD
resultsdt[5, 7] = output[Outline Box( "height" ), Outline Box( "Quantiles" ), Table Box( 1 ), Number Col Box( 1 )] << get( 11 ); // min
resultsdt[5, 8] = output[Outline Box( "height" ), Outline Box( "Quantiles" ), Table Box( 1 ), Number Col Box( 1 )] << get( 6 ); // median
resultsdt[5, 9] = output[Outline Box( "height" ), Outline Box( "Quantiles" ), Table Box( 1 ), Number Col Box( 1 )] << get( 1 ); // max
resultsdt[5, 10] = output[Outline Box( "height" ), Outline Box( "Summary Statistics" ), Number Col Box( 1 )] << get( 2 ); // Std dev.
cuando se trata de extraer números de la salida, hay que tener cuidado. Las referencias correctas a las ubicaciones pueden cambiar si la salida es diferente debido a las preferencias o simplemente incluye varias salidas en una ventana.
Permítanos saber si funciona.
Ron
Re: Pasar elementos de estadísticas calculadas a coordenadas específicas en una tabla de datos guardadapienso subíndice de la tabla de datos te puede ayudar con esto
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
dt[10,3] = "AAAAAAAAAAAAAA";