Script para exportar AIC a una nueva tabla de datos<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Estoy comparando los resultados de AIC para múltiples modelos en la plataforma Fit Parametric Survival. En este punto, tengo un script para ejecutar todos los modelos que produce múltiples ventanas, y copio y pego el AIC y otras salidas en un archivo de Excel, una por una. No hace falta que hoy en día este sea un proceso que consume mucho tiempo y es una pérdida de tiempo. Soy un novato en JSL, ¿alguien podría ayudarme a producir un proceso automatizado para extraer AIC y otra información de las múltiples ventanas de informes y guardarlos en una única ventana de datos? La información adicional que estoy evaluando es la convergencia de parámetros, las observaciones utilizadas y el número de valores censurados y no censurados.
¡Gracias por cualquier ayuda!
Uso de VBA Macro para importar datos a JMP y devolver los resultados de JMP a la hoja de Excel en Weibull AnalysisHola chicos,
En primer lugar, me gustaría agradecerle por compartir sus hallazgos sobre las secuencias de comandos y que me ayudaron a poder automatizar mi proceso de consulta de datos. Estoy usando VBA-Macro Excel para copiar mi tabla en JMP para realizar el análisis de Weibull y obtener los valores de escala y forma y copiarlos en mi archivo VBA-Macro Excel. A continuación se muestra el código que utilicé. Espero que también sea útil para otros.
VBA-Macro Excel.
Sub-JMP()
Aplicación atenuada como aplicación JMP
Dim doc como JMP.Document
Establecer aplicación = CreateObject ("JMP.Application")
aplicación.Visible = Verdadero
Establecer doc = app.OpenDocument("C:\Users\ABC\Desktop\WS.jsl")
sub final
Scripts JSL (guardados en formato WS.jsl)
//! <<>>.
dt = Abrir( "C:\Users\ABC\Desktop\Book1.xlsm" ); <<< JSL abrirá el archivo Excel en la tabla de datos JMP para ejecutar el análisis Weibull a continuación >>>
fm = Distribución de vida(
Y( :Nombre( "TTF,Hr") ),
Censura( :Censura ),
Código de censura( 1 ),
Frecuencia( :Frecuencia ),
<
Método del intervalo de confianza (probabilidad),
<
<
Tipo de intervalo (simultáneo),
<
{Documento de probabilidad( Profiler( 1, Intervalos de confianza( 1 ), Valor del término( Nombre( "TTF,Hr" )(4846.6174375, Bloquear( 0 ), Mostrar( 1 )) ) ) ),
Distribución de Weibull( Perfilador( 1, Intervalos de confianza( 1 ), Valor del término( Nombre( "TTF,Hr" )(4846.6, Bloqueo( 0 ), Mostrar( 1 )) ) ) ),
Cuantil de Weibull (Perfilador (1, Intervalos de confianza (1), Valor del término (Probabilidad (0,5, Bloqueo (0), Mostrar (1)))))),
Peligro de Weibull( Perfilador( 1, Intervalos de confianza( 1 ), Valor del término( Nombre( "TTF,Hr" )(4846.6, Bloqueo( 0 ), Mostrar( 1 )) ) ) ),
Densidad de Weibull( Profiler( 1, Valor del término( Nombre( "TTF,Hr" )(4846.6, Bloqueo( 0 ), Mostrar( 1 )) ) ) ), Estimación personalizada( Weibull, 0 )}
),
Enviar a informe (
Despacho ({"Comparar distribuciones"}, "Distribución de vida", FrameBox, {Orden de líneas de cuadrícula (2), Orden de líneas de referencia (3)}),
Despacho ({"Estadísticas", "Comparaciones de modelos"}, "", TableBox, {Ordenar por columna (2, 1)})
)
);
// Para copiar automáticamente los datos de la Estimación Paramética en una nueva tabla de datos (por ejemplo: formato untitled.jmp)
fmrep = fm << Informe;
fmrep[Cuadro de esquema("¿Estimación paramétrica?")][Cuadro de tabla(1)] << crear una tabla de datos combinados;
dt1 = Tabla de datos actuales();
dt1 << Guardar como( "c:\Users\ABC\Desktop\AAA.xlsx" ); // para guardar el archivo untitled.jmp como archivo Excel (en este caso lo pedí como AAA.xlsx) en la ubicación del escritorio.
Cerrar( dt, Sin guardar );
Cerrar( dt1, Sin guardar );
Los scripts anteriores funcionan perfectamente para mí.
Solo pensé en contribuir a esta comunidad con mis recientes hallazgos y aprendizajes.
¡Gracias!
Jim
Re: Script para exportar AIC a nueva tabla de datosEUREKA!!! ¡Gracias Jeff, Mark e Ian! ¡Ustedes me enseñaron mucho en poco tiempo y me dieron la solución que me ahorrará horas de hacer clic, copiar y pegar innecesarios!
Ahora, si alguno de ustedes sabe cómo agregar una columna para el texto de advertencia cuando los modelos no convergen, eso sería la guinda del pastel. ¡Pero estoy feliz con lo que hemos logrado!
Re: Script para exportar AIC a nueva tabla de datosCuando utiliza By() en el lanzamiento de una plataforma, JMP devolverá una lista de las plataformas resultantes. Sin él, JMP devolverá una única plataforma, no una lista.
Dado que los ejemplos aquí usaban By(), necesitaban indexar en la lista de plataformas para hacer referencia a una específica para una por grupo. Ese es el [1] en:
fmrep1[1][Outlinebox("Parametric ?")][TableBox(1)]<<make combined data table;No estás utilizando By() en ninguno de los lanzamientos de tu plataforma, por lo que no necesitas [1].
Para reunir todas las tablas en una sola tabla de datos, sería más fácil comenzar con todos los informes en una sola ventana.
Puede hacerlo usando New Window() para crear su propia ventana de informe.
dt = Open( "$SAMPLE_DATA\Reliability\Tobit2.jmp" );
myWin = New Window( "My Window",
fm1 = dt << Fit Model(
Y( :YLow, :YHigh ),
Effects( :age, ),
Personality( Parametric Survival ),
Distribution( LogNormal ),
Run( Likelihood Ratio Tests( 1 ) ),
);
fm2 = dt << Fit Model(
Y( :YLow, :YHigh ),
Effects( :liquidity ),
Personality( Parametric Survival ),
Distribution( LogNormal ),
Run( Likelihood Ratio Tests( 1 ) ),
);
fm3 = dt << Fit Model(
Y( :YLow, :YHigh ),
Effects( :age, :liquidity ),
Personality( Parametric Survival ),
Distribution( LogNormal ),
Run( Likelihood Ratio Tests( 1 ) ),
);
);
combined = myWin[Outline Box( "Parametric ?" )][Table Box( 1 )] << make combined data table;
Observe que no necesitamos obtener el objeto del informe, ya que tenemos una referencia a la ventana del informe. mi victoria , ya.
Para obtener una tabla similar a la que muestra en su publicación original, deberá dividir () la tabla que obtiene al crear una tabla de datos combinados.
combined <<Split(
Split By( :Column 1 ),
Split( :Column 2 ),
Remaining Columns( Drop All )
);
Sé que también quieres una columna para indicar qué modelo representan las filas. Dependiendo de cómo decida qué modelos ejecutar, puede ser más fácil mantener esa lista usted mismo y agregar una columna a la tabla de datos con esa información.
Si no sabe qué modelos especificó, es posible extraerlos de los informes de supervivencia paramétricos, pero no es tan fácil.
-Jeff
Re: Script para exportar AIC a nueva tabla de datosMuy bien, entonces nos estamos acercando. Aunque pegué el guión equivocado, Jeff me dio la respuesta correcta. El siguiente script proporciona la tabla deseada para los datos de muestra:
dt = Abierto ( "$SAMPLE_DATA/Confiabilidad/Tobit2.jmp" ) ;
// Agrega una columna aleatoria 'por'
porCol = dt << Nueva columna ( "Por" , Numérico , Nominal , Fórmula ( EnteroAleatorio ( 1 , 2 ))) ;
//Hacer el informe invisible
fm = dt << Modelo de ajuste (
Y ( : YBajo , : YAlto ) ,
Efectos ( : edad , : liquidez ) ,
Por ( : Por ) ,
Personalidad ( Supervivencia paramétrica ) ,
Distribución ( RegistroNormal ) ,
Correr ( Pruebas de razón de verosimilitud ( 1 ) ) ,
) ;
// Obtener una referencia a la capa del informe
fmrep = fm << Informe ;
fmrep [ 1 ][ Cuadro de esquema ( "¿Paramétrico?" )][ Cuadro de mesa ( 1 )] << hacer tabla de datos combinados ;
Cerca ( dt , No guardar ) ;
// ¡¡Este script funciona como se supone que debe hacerlo!!
¿Pero por qué cuando elimino porCol = dt << Nueva columna ( ...) y Por ( : Por ) , ¿El script ya no produce una tabla?
Y dado que mi objetivo es crear una única tabla de datos combinada a partir de varios informes, ¿cómo hago para que funcione el siguiente script de muestra?
dt = Abierto ( "$SAMPLE_DATA/Confiabilidad/Tobit2.jmp" ) ;
//Hacer el informe invisible
fm1 = dt << Modelo de ajuste (
Y ( : YBajo , : YAlto ) ,
Efectos ( : edad , ) ,
Personalidad ( Supervivencia paramétrica ) ,
Distribución ( RegistroNormal ) ,
Correr ( Pruebas de razón de verosimilitud ( 1 ) ) ,
) ;
fm2 = dt << Modelo de ajuste (
Y ( : YBajo , : YAlto ) ,
Efectos ( : liquidez ) ,
Personalidad ( Supervivencia paramétrica ) ,
Distribución ( RegistroNormal ) ,
Correr ( Pruebas de razón de verosimilitud ( 1 ) ) ,
) ;
fm3 = dt << Modelo de ajuste (
Y ( : YBajo , : YAlto ) ,
Efectos ( : edad , : liquidez ) ,
Personalidad ( Supervivencia paramétrica ) ,
Distribución ( RegistroNormal ) ,
Correr ( Pruebas de razón de verosimilitud ( 1 ) ) ,
) ;
// Obtener una referencia a la capa del informe
fmrep1 = fm1 << Informe ;
fmrep1 [ 1 ][ Cuadro de esquema ( "¿Paramétrico?" )][ Cuadro de mesa ( 1 )] << hacer tabla de datos combinados ;
¡¡¡GRACIAS A TODOS!!!
J.P.
Re: Script para exportar AIC a nueva tabla de datosTienes algunos errores de subíndice en esta línea:
fmrep[1]["Parameter Estimates"][TableBox(1)] << Make Combined Data Table;
En cambio debería ser:
fmrep[Outlinebox("Parametric ?")][TableBox(1)]<<make combined data table;Podrías usar Outlinebox(1) o poner el título completo allí, pero el comodín "?" lo hace un poco más general.
-Jeff
Re: Script para exportar AIC a nueva tabla de datosMark e Ian, ¡gracias por su tiempo! Sin embargo, todavía no lo entiendo bien porque mi versión del siguiente script aún no produce una tabla. Intenté combinar tus dos ejemplos:
dt = Abierto ( "$SAMPLE_DATA/Gran Clase.JMP" ) ;
vivac = dt << bivariado (
Y ( : altura ) ,
X ( : peso ) ,
Línea de ajuste ,
Por ( : sexo )
) ;
fmrep = fm << Informe ;
fmrep [ 1 ][ "Estimaciones de parámetros" ][ Cuadro de mesa ( 1 )] << Crear tabla de datos combinados ;
¿Algunas ideas?
Gracias,
J.P.
Re: Script para exportar AIC a nueva tabla de datosCuando usé "Estimaciones de parámetros" en el subíndice para apuntar a un cuadro de esquema particular, en su lugar usarías "Ajuste de supervivencia paramétrico - Modelo 633".
Re: Script para exportar AIC a nueva tabla de datos¡Ups! Veo que querías una mesa, no un diario. En cuyo caso, 'Crear tabla de datos combinados' probablemente sea más directo.
Re: Script para exportar AIC a nueva tabla de datosBasándonos en lo que Mark ha explicado, aquí hay una forma:
dt = Abierto ( "$SAMPLE_DATA/Confiabilidad/Tobit2.jmp" ) ;
// Agrega una columna aleatoria 'por'
porCol = dt << Nueva columna ( "Por" , Numérico , Nominal , Fórmula ( EnteroAleatorio ( 1 , 2 ))) ;
//Hacer el informe invisible
fm = dt << Modelo de ajuste (
Y ( : YBajo , : YAlto ) ,
Efectos ( : edad , : liquidez ) ,
Por ( : Por ) ,
Personalidad ( Supervivencia paramétrica ) ,
Distribución ( RegistroNormal ) ,
Correr ( Pruebas de razón de verosimilitud ( 1 ) ) ,
Invisible
) ;
// Obtener una referencia a la capa del informe
fmrep = fm << Informe ;
// Esta será una lista, un elemento por grupo 'por'
esquemaTítulo = fmRep << Obtener título ;
//Hacer un cuadro de presentación vacío
lubricante = AlineaciónBox ( NCol ( 1 )) ;
//Agregamos el contenido que necesitamos
Para ( oh = 1 , oh <= NArtículos ( esquemaTítulo ) , oh ++,
lubricante << Adjuntar (
Cuadro de esquema ( esquemaTítulo [ oh ] ,
( fmRep [ oh ])[ Cuadro de mesa ( 1 )] ;
) ;
) ;
) ;
Cerca ( dt , No guardar ) ;
// Haz un diario
Nueva ventana ( "Informe" , << Diario , lubricante ) ;
La única dificultad es saber qué cuadros de mesa incluir. Para resolver esto, haga clic derecho en el triángulo del nodo de esquema, luego seleccione Editar > Mostrar estructura de árbol.
Re: Script para exportar AIC a nueva tabla de datos¡¡Gracias por tu rápida respuesta, Marcos!! Eso fue muy útil y educativo, aunque al principio no produjo la tabla de datos hasta que reescribí el último bit como
Informe ( vivac [ 1 ] )[ "Estimaciones de parámetros" ][ Cuadro de mesa ( 1 )] << Crear tabla de datos combinados ;
siguiendo este ejemplo: 46983 - Cómo crear una tabla de datos combinados de Estadísticas resumidas a partir de un informe de Distribución cuando se utiliza una variable Por .
Sin embargo, todavía no puedo traducirlo a mi flujo de trabajo, tal vez porque la tabla que quiero no tiene título (por ejemplo, "Estimaciones de parámetros"). A continuación se muestra un ejemplo de un informe. La parte rodeada por un círculo es lo que quiero convertir en una tabla de datos. He incluido una muestra del script que estoy usando en la parte inferior. El desafío es cómo agregar los datos encerrados en un círculo de aproximadamente 100 informes generados a la vez en una tabla de datos. Agregué una captura de pantalla de la tabla final que estoy buscando, que actualmente estoy ingresando manualmente en Excel (qué asco). También necesitaría una forma de agregar el número de modelo (por ejemplo, 633) a cada fila.
¡De nuevo, gracias por tu ayuda!
J.P.


Aquí hay un ejemplo del script que estoy usando:
Modelo de ajuste (
Censurar ( : Disperso ) ,
Código de censura ( "0" ) ,
Y ( : días para la dispersión ) ,
Efectos ( : Peso ,: Año ,: Fuente ,: Translocación ,: Tratamiento ,: Geología ,: Sitio , ) ,
Personalidad ( Supervivencia paramétrica ) ,
Distribución ( Fréchet ) ,
Correr ( Pruebas de razón de verosimilitud ( 1 ) ) ,
Enviar a informe (
Despacho (
{} ,
Ajuste de supervivencia paramétrico ,
Cuadro de esquema ,
{ Establecer título ( "Ajuste paramétrico de supervivencia: modelo 632" )}
)
)
) ;
Modelo de ajuste (
Censurar ( : Disperso ) ,
Código de censura ( "0" ) ,
Y ( : días para la dispersión ) ,
Efectos ( : Peso ,: Año ,: Fuente ,: Translocación ,: Tratamiento ,: Geología , ) ,
Personalidad ( Supervivencia paramétrica ) ,
Distribución ( Fréchet ) ,
Correr ( Pruebas de razón de verosimilitud ( 1 ) ) ,
Enviar a informe (
Despacho (
{} ,
Ajuste de supervivencia paramétrico ,
Cuadro de esquema ,
{ Establecer título ( "Ajuste paramétrico de supervivencia: modelo 633" )}
)
)
) ;
Re: Script para exportar AIC a nueva tabla de datosPuede producir este resultado de forma interactiva haciendo clic derecho en la tabla con el valor AIC en su informe y seleccionando Crear tabla de datos combinados.
El equivalente de secuencia de comandos requiere enviar un mensaje con el mismo nombre que el comando de menú al objeto del cuadro de visualización que es responsable de presentar el valor AIC en el informe. Utilice el siguiente ejemplo para esta idea:
- abrir gran clase
- lanza la plataforma Bivariate con altura versus peso y sexo como variable de agrupación
- encajar una línea en ambos grupos
- obtener la referencia a la capa del informe
- subíndice repetidamente el árbol de visualización en el informe al nivel de la primera tabla (por ejemplo, estimaciones de parámetros)
- enviar el mensaje
dt = Abierto ( "$SAMPLE_DATA/Gran Clase.JMP" ) ;
vivac = dt << bivariado (
Y ( : altura ) ,
X( : peso ) ,
Línea de ajuste ,
Por( : sexo )
);
vivac4 = vivac << Informe ;
bivr[ 1 ][ "Estimaciones de parámetros" ][ Cuadro de mesa ( 1 )] << Crear tabla de datos combinados ;