Cómo usar JSL para guardar T² de la plataforma PCA (o cómo calcularlo)Hola a todos,
Estoy tratando de hacer que funcione un código JSL para guardar T² de la plataforma del Componente Principal, por ejemplo, cómo puede hacerlo llamando a << Save DModX (n), donde n es la cantidad de PC a usar.
Sé que la llamada << Save T Square funcionará con el gráfico de control multivariante, pero no parece funcionar con las plataformas PCA o Multivariate. Necesito usar la plataforma PCA para generar la fórmula T² porque en la plataforma PCA, de hecho, puede especificar la cantidad de PC que se usarán en el cálculo, no es la estadística T² normal, como la distancia al cuadrado de Mahalanobis. Incluso la llamada << T² (1, Save T Square) enviada a la ventana del informe no funciona.
1. ¿Es posible utilizar scripts para especificar el número de PC que se utilizarán y guardar la fórmula T² en la tabla de datos? Hasta ahora, no he encontrado una opción para esto.
2. Si no es así, ¿cuál es la mejor forma de calcularlo? Sé que el cálculo está definido aquí , pero la fórmula que se guarda en la tabla de datos usando el botón rojo parece un poco diferente.
De acuerdo con la fórmula guardada (guardado manual) T² = Vec Cuadrática (S, X) = Diag (X * S * X`), donde X es el vector estandarizado de datos, X` es su transpuesta y S es la covarianza inversa matriz. Este es el estándar T², el cuadrado de la distancia de Mahalanobis.
Sin embargo, de acuerdo con el documentación para el iésimo valor de T² de la plataforma PCA, T_i² = [X_ci * P_a] * L-1 * [P`_a * X`_ci], donde X_ci es la iésima observación estandarizada, P_a es una matriz que contiene la primera "a" valores propios (es decir, posiblemente no todos), y L-1 es una matriz diagonal que contiene los primeros valores propios A. En principio, esto debería ser igual a Vec Quadratic (L-1, [X_ci * P_a]), excepto que en lugar de usar la matriz de covarianza inversa, S, está usando la matriz de valores propios axa inversa de las primeras PC "a", y X ahora es X_ci * P_a]. O eso parece.
Parece bastante complicado e innecesario rediseñar este problema para guardar el componente n-principal T² cuando JMP ya calcula todo esto por usted. Solo quiero automatizar el proceso de guardado, pero parece que no puedo hacer que la opción 1 funcione, lo que significa que la opción 2 es la siguiente mejor opción. Incluso entonces, intentar recuperar la fórmula para hacer una nueva columna con una fórmula parece un poco excesivo.
Adjunto una tabla de datos modificada del archivo Iris.jmp que muestra las fórmulas T² guardadas de la plataforma multivariante (y cómo T² = Mahal.Dist.²), y luego T² de la plataforma PCA donde la fórmula se determina usando todos 4 PC y luego solo a PC. Como puede ver al mirar las fórmulas, la matriz S en Vec Quadratic (S, X) es diferente para los T² calculados usando 2 PC frente a 4 PC.
Si alguien tiene información sobre cómo crear un script para obtener la T² con un número diferente de PC o cómo formular correctamente la fórmula de la columna para calcular la T², estaría agradecido por esa información.
¡Gracias por sus comentarios y pensamientos!
DS
AnalíticaTabla de datosScriptingRe: Cómo usar JSL para guardar T² de la plataforma PCA (o cómo calcularlo)La capacidad de guardar T cuadrado solo está disponible desde la plataforma de gráficos de control, por lo que su primer acercamiento no es posible en este momento.
Puede buscar en la Lista de deseos aquí en la Comunidad de JMP para ver si alguien ya la ha solicitado. Si es así, vote por él (kudo). Si no es así, ingrese una nueva solicitud.
Re: Cómo usar JSL para guardar T² de la plataforma PCA (o cómo calcularlo)Consulte el script adjunto para conocer la forma de calcular T cuadrado. Fue proporcionado por el desarrollador JMP de estas plataformas.
Re: Cómo usar JSL para guardar T² de la plataforma PCA (o cómo calcularlo)Hola @markbailey ,
Gracias por sus comentarios y por incluir el JSL del desarrollador de la plataforma. Bueno, resulta que la solución a lo que buscaba (opción 1) es realmente posible con JSL !! Y mucho más simple también. Solo necesitaba verlo en el código que enviaste.La parte crítica está aquí:
Outlier Analysis( 1, Number of Components( N ), Save T Square ),
Al cambiar "N" en la entrada Número de componentes y agregar el cuadro Guardar T, en realidad guardará la fórmula T² en la tabla de datos para los N componentes que defina. No sabía que dentro de la llamada de Análisis de valores atípicos (), se podía enviar la solicitud a "Guardar T Square". Hacer eso junto con los componentes N hace exactamente lo que esperaba hacer, ¡gracias por la ayuda! No es necesario que pongas una Lista de deseos ni nada, ¡JMP ya puede hacerlo por ti!
Adjunto la tabla de datos Iris_mod.jmp con scripts para calcular el valor T² para 2, 3 y 4 PC. Es bueno saber cómo calcular de manera eficiente el valor T² si alguna vez lo necesito. El código que estaba escribiendo ahora para hacer el cálculo era bastante largo y engorroso, aunque creo que habría funcionado una vez que hubiera arreglado todo. Sin embargo, prefiero la solución anterior: ¡son solo unos pocos caracteres adicionales de código!
Tras una inspección más detallada del código que envió, me di cuenta de que el T² calculado a partir de la plataforma PCA y el cálculo "manual" en el código son diferentes para el mismo número de PC. ¿Alguna pista de por qué? O el cálculo "manual" es "incorrecto" o se realiza de manera diferente a cómo lo hace el PCA, o algo más está sucediendo. También adjunto otra tabla de datos Iris_mod_different_T2.jmp que muestra que los resultados de T² para el mismo número de PC son diferentes de la plataforma PCA y el cálculo "manual". Hasta nuevo aviso, prefiero usar la fórmula T² de la plataforma PCA. Me gustaría saber si hay algo diferente en el cálculo "manual" y por qué los valores no son los mismos.
¡Gracias de nuevo!,
DS
PD Si alguien está interesado, el código en el que he estado trabajando está a continuación. Es un código interactivo que permite al usuario seleccionar las columnas para realizar el PCA y luego seleccionar dinámicamente el número de PC que se utilizarán para extraer las fórmulas DModX y T². Incluso puede guardar el número seleccionado de PC en la tabla de datos si lo desea para otros análisis.
Muchas gracias a @jthi para obtener ayuda con algunos otros aspectos de este código para que las cosas funcionen según lo previsto, como << Inferior () para Plot Col Box () y << Establecer filas seleccionables (1) para los cuadros de visualización Table Box (). Lo único que no pude averiguar es cómo limitar la selección de filas en el Cuadro de tabla () a solo una. En el entorno Cuadro de lista de columnas (), puede establecer el número máximo de elementos (1) en 1 y esto solo permite que la persona seleccione un elemento a la vez. Cualquier sugerencia sobre cómo hacer eso para el código a continuación es muy apreciada. En este momento, solo se necesita el número máximo de PC si el usuario selecciona más de una fila en el Cuadro de tabla ().
Names Default To Here( 1 );
//Clear Symbols();
//Function to choose the data table to model
choose_data_table = Function( {},
list = {};
For( i = 1, i <= N Table(), i++,
list[i] = Data Table( i ) << get name
);
win = New Window( "Select a data table",
<<MODAL></MODAL> PCRptOutlier << Save DModX( N_PCs );
If( savePCs == 1,
PCRptOutlier << Save Principal Components( N_PCs )
);
PCRptOutlier<<CLOSEWINDOW> 0, Try( choose_data_table, Throw( "No data found" ) )
);
ModMetrics;
);
Firstwin;</CLOSEWINDOW>