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 varios modelos en la plataforma Fit Parametric Survival. En este punto, tengo una secuencia de comandos para ejecutar todos los modelos con múltiples ventanas, y copio/pego el AIC y otras salidas en un archivo de Excel uno por uno. No hace falta hoy en día, este es un proceso que consume tiempo y desperdicio. 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 guardarlas en una sola 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 de secuencias de comandos y me ayudó 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 Weibull y obtener los valores de Scale & Shape y copiarlos en mi archivo VBA -Macro excel. A continuación se muestra el código que utilicé. Espero que sea útil para otros también.
VBA-Macro Excel.
SubJMP()
Dim aplicación como JMP.Aplicación
Dim doc como documento JMP
Establecer aplicación = CreateObject("JMP.Aplicación")
aplicación.Visible = Verdadero
Establecer doc = app.OpenDocument("C:\Users\ABC\Desktop\WS.jsl")
final sub
Scripts JSL (guardados como formato WS.jsl)
//! <<>>.
dt = Abrir( "C:\Users\ABC\Desktop\Book1.xlsm" ); <<< JSL abrirá el archivo de Excel en la tabla de datos JMP para ejecutar el análisis de weibull a continuación>>>
fm = Distribución de Vida(
Y( :Nombre( "TTF,Hr" ) ),
Censor( :Censor ),
Código de censura( 1 ),
Frecuencia( :Frecuencia ),
<
Método de intervalo de confianza (probabilidad),
<
<
Tipo de intervalo (simultáneo),
<
{Documento de probabilidad (Perfilador (1, Intervalos de confianza (1), Valor del término (Nombre ("TTF, Hr")) (4846.6174375, Bloqueo (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))))))),
Riesgo de Weibull (Perfilador (1, Intervalos de confianza (1), Valor del término (Nombre ("TTF, Hr")) (4846.6, Bloqueo (0), Mostrar (1))))))
Densidad de Weibull (Perfilador (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ínea de cuadrícula (2), Orden de línea de referencia (3)}),
Envío ({"Estadísticas", "Comparaciones de modelos"}, "", TableBox, {Ordenar por columna (2, 1)})
)
);
// Para copiar automáticamente los datos de Estimación paramétrica en una nueva tabla de datos (p. ej.: formato untitled.jmp)
fmrep = fm << Informe;
fmrep[Cuadro de esquema("¿Estimación paramétrica?")][Cuadro de tabla( 1 )] << hacer una tabla de datos combinados;
dt1 = Tabla de datos actuales ();
dt1 << SaveAs( "c:\Users\ABC\Desktop\AAA.xlsx" ); // para guardar el archivo sin título.jmp como archivo de Excel (en este caso, lo necesité como AAA.xlsx) en la ubicación del escritorio.
Cerrar (dt, No guardar);
Cerrar (dt1, No Guardar);
Los scripts anteriores funcionan perfectamente para mí.
Solo pensé en contribuir a esta comunidad con mi reciente descubrimiento y aprendizaje.
¡Gracias!
Jim
Re: Script para exportar AIC a una nueva tabla de datos¡¡¡EUREKA!!! ¡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 innecesariamente!
Ahora, si alguno de ustedes sabe cómo agregar una columna para el texto de advertencia cuando los modelos no convergen, sería la guinda del pastel. ¡Pero estoy feliz con lo que hemos logrado!
Re: Script para exportar AIC a una nueva tabla de datosCuando usa By() en el lanzamiento de una plataforma, JMP devolverá una lista de las plataformas resultantes. Sin ella, JMP devolverá una plataforma única, no en una lista.
Dado que los ejemplos aquí usaban By(), necesitaban indexarse en la lista de plataformas para hacer referencia a una específica para uno por grupo. Ese es el [1] en:
fmrep1[1][Outlinebox("Parametric ?")][TableBox(1)]<<make combined data table;No está utilizando By() en ninguno de los lanzamientos de su plataforma, por lo que no necesita el [1].
Para tener 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;
Tenga en cuenta que no necesitamos obtener el objeto del informe, ya que tenemos una referencia a la ventana del informe, miganancia , ya.
Para obtener una tabla similar a la que muestra en su publicación original, deberá dividir () la tabla que obtiene de la tabla de datos combinados.
combined <<Split(
Split By( :Column 1 ),
Split( :Column 2 ),
Remaining Columns( Drop All )
);
Sé que también desea una columna para indicar qué modelo representan las filas. Dependiendo de cómo esté decidiendo 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 usted mismo.
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 una nueva tabla de datosMuy bien, así que 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" ) ;
// Agregar una columna aleatoria 'por'
porCol = dt << NuevaColumna ( "Por" , Numérico , Nominal , Fórmula ( Entero aleatorio ( 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 ][ recuadro ( "¿Paramétrico?" )][ TableBox ( 1 )] << hacer una tabla de datos combinados ;
Cerca ( dt , NoGuardar ) ;
// ¡Este script funciona como se supone que debe hacerlo!
Pero, ¿por qué cuando elimino porCol = dt << NuevaColumna ( ...) y Por ( : Por ) , el script ya no produce una tabla?
Y dado que mi objetivo es crear una sola tabla de datos combinados a partir de varios informes, ¿cómo puedo hacer 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 ][ recuadro ( "¿Paramétrico?" )][ TableBox ( 1 )] << hacer una tabla de datos combinados ;
¡¡¡GRACIAS A TODOS!!!
JP
Re: Script para exportar AIC a una nueva tabla de datosTienes algunos errores de subíndice en esta línea:
fmrep[1]["Parameter Estimates"][TableBox(1)] << Make Combined Data Table;
En su lugar, debería ser:
fmrep[Outlinebox("Parametric ?")][TableBox(1)]<<make combined data table;Puede usar el cuadro de contorno (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 una nueva tabla de datosMark e Ian, ¡gracias por su tiempo! Sin embargo, todavía no lo estoy haciendo bien, porque mi versión del script a continuación aún no produce una tabla. He intentado combinar tus dos ejemplos:
dt = Abierto ( "$SAMPLE_DATA/Clase grande.JMP" ) ;
vivac = dt << bivariado (
Y ( : altura ) ,
X ( : peso ) ,
Línea de ajuste ,
Por ( : sexo )
) ;
fmrep = FM << Informe ;
fmrep [ 1 ][ "Estimaciones de parámetros" ][ TableBox ( 1 )] << Hacer tabla de datos combinados ;
¿Algunas ideas?
Gracias,
JP
Re: Script para exportar AIC a una nueva tabla de datosDonde usé "Estimaciones de parámetros" en el subíndice para apuntar a un cuadro de esquema particular, en su lugar usaría "Ajuste de supervivencia paramétrico - Modelo 633".
Re: Script para exportar AIC a una nueva tabla de datos¡Uy! Veo que querías una mesa, no un diario. En cuyo caso, 'Hacer una tabla de datos combinados' es probablemente más directo.
Re: Script para exportar AIC a una nueva tabla de datosSobre la base de lo que ha explicado Mark, aquí hay una manera:
dt = Abierto ( "$SAMPLE_DATA/Confiabilidad/Tobit2.jmp" ) ;
// Agregar una columna aleatoria 'por'
porCol = dt << NuevaColumna ( "Por" , Numérico , Nominal , Fórmula ( Entero aleatorio ( 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 << ObtenerTítulo ;
// Hacer un cuadro de visualización vacío
lubricante = AlinearCuadro ( NCol ( 1 )) ;
// Agrega el contenido que necesitamos
Para ( o = 1 , o <= Nartículos ( esquematítulo ) , o ++,
lubricante << Adjuntar (
ContornoCuadro ( esquematítulo [ o ] ,
( fmRep [ o ])[ TableBox ( 1 )] ;
) ;
) ;
) ;
Cerca ( dt , NoGuardar ) ;
// hacer un diario
Nueva ventana ( "Informe" , << Diario , lubricante ) ;
La única dificultad es saber qué cuadros de tabla incluir. Para resolver esto, haga clic derecho en el triángulo del nodo del contorno, luego seleccione Editar > Mostrar estructura de árbol.
Re: Script para exportar AIC a una nueva tabla de datosGracias 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" ][ TableBox ( 1 )] << Hacer tabla de datos combinados ;
siguiendo este ejemplo: 46983 - Cómo hacer una tabla de datos combinados de estadísticas de resumen de un informe de distribución cuando se usa 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 en 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 en círculos de ~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 (puaj). También necesitaría una forma de agregar el modelo # (por ejemplo, 633) a cada fila.
¡De nuevo, gracias por tu ayuda!
JP


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 ( Frechet ) ,
Correr ( Pruebas de razón de verosimilitud ( 1 ) ) ,
Enviar a informe (
Despacho (
{} ,
Ajuste de supervivencia paramétrico ,
ContornoCuadro ,
{ 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 ( Frechet ) ,
Correr ( Pruebas de razón de verosimilitud ( 1 ) ) ,
Enviar a informe (
Despacho (
{} ,
Ajuste de supervivencia paramétrico ,
ContornoCuadro ,
{ Establecer título ( "Ajuste paramétrico de supervivencia - Modelo 633" )}
)
)
) ;
Re: Script para exportar AIC a una nueva tabla de datosPuede producir este resultado de forma interactiva haciendo clic con el botón derecho en la tabla con el valor AIC en su informe y seleccionando Crear tabla de datos combinados.
El equivalente de secuencias de comandos requiere enviar un mensaje con el mismo nombre que el comando de menú al objeto de cuadro de visualización que es responsable de presentar el valor AIC en el informe. Use el siguiente ejemplo para esta idea:
- abrir gran clase
- lanzar la plataforma Bivariada con altura versus peso y sexo como variable de agrupación
- ajuste 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/Clase grande.JMP" ) ;
biv = dt << bivariado (
Y( : altura ) ,
X( : peso ) ,
Línea de ajuste ,
Por( : sexo )
);
biv4 = vivac << Informe ;
bivr[ 1 ][ "Estimaciones de parámetros" ][ TableBox ( 1 )] << Hacer tabla de datos combinados ;