Extraer datos de un análisis unidireccionalEstoy tratando de crear una secuencia de comandos para tomar el valor p del análisis unidireccional y colocarlo en una nueva columna en la tabla utilizada para el análisis.
Revisé la guía de secuencias de comandos JMP 13 y en la página 690, hay "Extraer valores de un análisis en un informe", que parece ser lo que quiero. Sin embargo, siguiendo eso como guía, no parece funcionar con oneway y anovas...
Aquí está el script enumerado que modifiqué para trabajar con el conjunto de datos de muestra de clase grande mientras intentaba solucionar el código:
Deletesymbols();
dt=Open("$SAMPLE_DATA\Big Class.jmp");
//creates a oneway analysis of big class similar how my data will be interpreted
anova=Oneway(
Y(:height),
X(:age),
With Control(1, {12}),
Means(1), Mean Diamonds(1), Comparison Circles(1),
By(:sex)
);
anova<<show tree structure;
/*
Female LDS threshold results are in OultineBox(9), Levels (age) is StringColBox(5), pValues are NumberColBox(15)
Male LDS threshold results are in OultineBox(18), Levels (age) is StringColBox(10), pValues are NumberColBox(30)
*/
// Should create a report that I can use to extract data from the anova analysis based off the original script
report(anova) [Outline Box(9)] << Close( 0 ); <BR />report(anova) [Outline Box(18)] << Close( 0 );
reportanova = anova << Report;
// Should extract the level (age) and pvalues for females
agef = reportanova[Outline Box(9)][String Col Box(5)] << Getaslist;
pvalsf = reportanova[Outline Box(9)][NumberColBox(15)] << Getaslist;
// Should extract the level (age) pvalues for males
agem = reportanova[Outline Box(18)][String Col Box(10)] << Getaslist;
pvalsm = reportanova[Outline Box(18)][NumberColBox(30)] << Getaslist;
//column creation to recieve extracted data
dt<<new column("p-value",Numeric, "Continuous");
//should add the collected p-value to the data table in the new column, matched to the correct row based on sex and age <FONT color="#FF0000">(untested)</FONT>.
For Each Row( p-value =
match(sex,
"f",match(age,
show(agef[1]),show(pvalsf[1]),
show(agef[2]),show(pvalsf[2]),
show(agef[3]),show(pvalsf[3]),
show(agef[4]),show(pvalsf[4]),
show(agef[5]),show(pvalsf[5]),
show(agef[6]),show(pvalsf[6]),
),
"m",match(age,
show(agem[1]),show(pvalsm[1]),
show(agem[2]),show(pvalsm[2]),
show(agem[3]),show(pvalsm[3]),
show(agem[4]),show(pvalsm[4]),
show(agem[5]),show(pvalsm[5]),
show(agem[6]),show(pvalsm[6]),
),
);*/
Pero el registro incrustado tiene un error al colocar el anova en un informe:
Enviar espera un objeto programable en acceso o evaluación de 'Enviar', Informe (anova) [Cuadro de esquema (9)] << /*###*/Cerrar (0) /*###*/
El depurador falla en el mismo lugar y proporciona estas como variables:
Variable Valor
anova {Uno de ida[], De una sola mano[]}
Tabla de datos dt ("clase grande")
reportanova {Cuadro de visualización [Cuadro de contorno], Cuadro de visualización [Cuadro de contorno]}
Entonces solo puedo suponer que lo que funciona con Bivariate no se extiende a Oneway.Incluso cambié las variables, acortando anova a anov en caso de que fuera una variable/comando/algo que no coincidiera, pero sigue fallando.Hubo un Publicación anterior de 2011 con un código de muestra, pero estaba distorsionado con información de fuente que no se aclaraba en Word, una ventana de secuencia de comandos jmp o se guardaba como un archivo html para poder leerlo...
Esto lo tengo que resolver antes de poder ver si mi código para agregar el valor p a la fila correcta funciona...
Gracias.
Re: Extraer datos de un análisis unidireccionalSi alguien también quiere ver cómo obtuve la adición del valor a la tabla correspondiente al sexo y la edad de trabajo:
//creates a new column
dt<<NEW column=""></NEW>
Puede haber una manera más fácil o ordenada de hacer esto, pero funciona. Las declaraciones if anidadas y los bucles for también funcionaron tan pronto como me di cuenta de la falta de coincidencia del tipo de datos de la edad original como 'número', y la lista de "LSD Threshold Matrix" era 'carácter'.
Re: Extraer datos de un análisis unidireccionalPor si sirve de algo, limpié lo distorsionado correo de 2011.
Re: Extraer datos de un análisis unidireccionalUna fuerte recomendación para algo que enseñamos como una 'mejor práctica': no use el índices absolutos que se muestran en el diagrama de árbol de visualización. Puede escribir subíndices correctos de esta manera, entonces, ¿por qué no?Porque esta vía es difícil de componer, de leer y, por tanto, de mantener, y es quebradiza. Utilizar el indexación relativa como se ilustra en mi solución. Es más fácil de escribir, leer (¿autodocumentado?) y mantener. También es mucho menos frágil. ¡Sé egoísta y piensa solo en ti!
Recuerde que JMP también cambia: las versiones introducen nuevas secciones en los informes o mueven secciones, usted cambia sus preferencias de plataforma, alguien más usa su script con preferencias diferentes, etc. Guiones defensivos anticipa tal variación.Los índices relativos son robustos frente a ella.
Algunas personas piensan que esta elección es solo una cuestión de estilo. Espero que nunca sufran por el cambio.
(Y no me hagas empezar a usar la directiva de intérprete Enviar a informe...)
Re: Extraer datos de un análisis unidireccionalEso funciona, gracias!
Entonces, para cualquier otra persona que busque aquí ... y para asegurarme de que entiendo y no solo copio y pego el código, en:
f ages <SPAN class="token operator">=</SPAN> anova rpt<SPAN class="token punctuation">[</SPAN><SPAN class="token number">1</SPAN><SPAN class="token punctuation">]</SPAN><SPAN class="token punctuation">[</SPAN><SPAN class="token string">"LSD Threshold Matrix"</SPAN><SPAN class="token punctuation">]</SPAN><SPAN class="token punctuation">[</SPAN><SPAN class="token function">StringColBox</SPAN><SPAN class="token punctuation">(</SPAN><SPAN class="token number">1</SPAN><SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">]</SPAN> <SPAN class="token operator"><</SPAN><SPAN class="token operator"><</SPAN><SPAN class="token messages"> Get</SPAN><SPAN class="token punctuation">;</SPAN>
La opción 'By()' en oneway crea dos instancias separadas dentro del informe, supongo que es por eso que '<
anova rpt<SPAN class="token punctuation">[</SPAN><SPAN class="token number">1</SPAN><SPAN class="token punctuation">]</SPAN>
apunta al primer grupo creado a partir de 'By(:sex)' al crear el oneway, que es 'F', y 'anova rpt[2]' se refiere al grupo 2 'M'.T ¿El guión original de la guía de secuencias de comandos no lo necesitaba ya que solo había una sección en el informe para tratar cuando era un bivariado simple?
Entonces el segmento:
<SPAN class="token punctuation">[</SPAN><SPAN class="token string">"LSD Threshold Matrix"</SPAN><SPAN class="token punctuation">]</SPAN><SPAN class="token punctuation">[</SPAN><SPAN class="token function">StringColBox</SPAN><SPAN class="token punctuation">(</SPAN><SPAN class="token number">1</SPAN><SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">]</SPAN>
Permitamos que jmp salte directamente a la sección "Matriz de umbral LSD" del informe y restablezca el esquema de numeración, razón por la cual la columna de cadena ahora está referenciada por ... Box (1), pero para toda la estructura de árbol, es ... Caja (5).Siendo las tres formas equivalentes de obtener la lista de edades femeninas referenciadas de la estructura de árbol:
f ages <SPAN class="token operator">=</SPAN> anova rpt<SPAN class="token punctuation">[</SPAN><SPAN class="token number">1</SPAN><SPAN class="token punctuation">]</SPAN><SPAN class="token punctuation">[</SPAN><SPAN class="token string">"LSD Threshold Matrix"</SPAN><SPAN class="token punctuation">]</SPAN><SPAN class="token punctuation">[</SPAN><SPAN class="token function">StringColBox</SPAN><SPAN class="token punctuation">(</SPAN><SPAN class="token number">1</SPAN><SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">]</SPAN> <SPAN class="token operator"><</SPAN><SPAN class="token operator"><</SPAN><SPAN class="token messages"> Get</SPAN><SPAN class="token punctuation">;<BR />f ages = anova rpt[1][Outline Box(9)][StringColBox(1)] << Get;<BR />f ages = anova rpt[1][StringColBox(5)] << Get;<BR /></SPAN>
Entonces, si By (:sex) se comenta de una manera, la estructura de árbol se simplifica y:
ages <SPAN class="token operator">=</SPAN> anova rpt[1]<SPAN class="token punctuation">[</SPAN><SPAN class="token function">StringColBox</SPAN><SPAN class="token punctuation">(5</SPAN><SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">]</SPAN> <SPAN class="token operator"><</SPAN><SPAN class="token operator"><</SPAN><SPAN class="token messages"> Get</SPAN><SPAN class="token punctuation">;<BR />ages = anova rpt[StringColBox(5)] << Get;<BR /></SPAN>
ambos funcionan ahora porque [1] se entiende y no es necesario especificarlo, ya que [2] ya no es ni siquiera una opción.
Re: Extraer datos de un análisis unidireccionalExisten reglas generales y sintaxis que se aplican a todas las plataformas JMP (informes), pero la composición (es decir, cuadros de visualización anidados específicos) varía, por supuesto. Pruebe este enfoque:
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA\Big Class.jmp" );
//creates a oneway analysis of big class similar how my data will be interpreted
anova = dt << Oneway(
Y( :height ),
X( :age ),
With Control( 1, {12} ),
Means( 1 ),
Mean Diamonds( 1 ),
Comparison Circles( 1 ),
By( :sex )
);
anova rpt = anova << Report;
f ages = anova rpt[1]["LSD Threshold Matrix"][StringColBox(1)] << Get;
f pVal = anova rpt[1]["LSD Threshold Matrix"][NumberColBox(2)] << Get;
m ages = anova rpt[2]["LSD Threshold Matrix"][StringColBox(1)] << Get;
m pVal = anova rpt[2]["LSD Threshold Matrix"][NumberColBox(2)] << Get;