Cómo guardar la fórmula de predicción para diferentes categorías al ejecutar el ajuste de modelo no linealTengo un script que se ajusta a una fórmula personalizada para un modelo no lineal. (no disponible en Nonlib) que obtiene las estimaciones de los parámetros del modelo. Puedo Guardar la fórmula en el menú del triángulo rojo y seleccionar Guardar fórmula de predicción que creará una nueva columna para los nuevos resultados. Puedo hacer esto para cada categoría.
New Column( "Fitted Model By Sample",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Property( "By ID", 207957763 ),
Formula(
If( :Sample == "Barley 2710",
If( :Days > 0,
0.171070850115799 * Exp( -Exp( ((0.00826868962267886 * Exp()) / 0.171070850115799) * (8.5626914275992 - :Days) ) )
+0.189197655815188 * Exp( -Exp( ((0.0822175769423173 * Exp()) / 0.189197655815188) * (1.00952608535815 - :Days) ) ),
0
),
.
)
),
Set Property( "Predicting", {:Average, Creator( "Nonlinear" )} ),
Set Selected
);
Set Label Columns( :Label );
Sin embargo, estoy tratando de hacer que se ejecute para todas las categorías de la tabla de datos para evitar tener que hacerlo manualmente. ¿Alguna sugerencia sobre cómo hacer esto?
Intenté simplemente publicar la nueva fórmula, pero no se crea ninguna columna como cuando se hace manualmente, como:
obj = Nonlinear( Y( :Average ), X( :Model ), Loss( :Err ), Iteration Limit( 5000 ), By( :Sample ) );
obj << go;
obj << Publish prediction formula;
obj << Set name( "Fitted Model by sample" );
También intenté modificar el script grabado de JSL como se muestra a continuación, desafortunadamente la fórmula no funciona. Cualquier ayuda es muy apreciada.
obj = Nonlinear( Y( :Average ), X( :Model ), Loss( :Err ), Iteration Limit( 5000 ), By( :Sample ) );
obj << go;
//returns a list of vectors where each vector, contains the parameters estimates
obj << get estimates;
obj << get prediction formula;
col11 = New Column( "Fitted Model By Sample",
set formula(
If( :Days > 0,
(Y1_Y1_0 * Exp( -Exp( ((K1_K1_0 * Exp()) / Y1_Y1_0) * (P1_P1_0 - :Days) ) ) + Y2_Y2_0 * Exp(
-Exp( ((K2_K2_0 * Exp()) / Y2_Y2_0) * (P2_P2_0 - :Days) )
)),
0
),
By( :Sample ),
Set Property( "Predicting", {:Average, Creator( "Nonlinear" )} ),
Set Selected
),
Set Label Columns( :Label )
);
Re: Cómo guardar la fórmula de predicción para diferentes categorías al ejecutar el ajuste de modelo no lineal¡Impresionante! Puedo creer que me perdí esta solución en la comunidad. He buscado todo tipo de ejemplos. Solo necesitaba "Guardar", eso es todo lo que necesitaba.
¡Muchas gracias Phil!
Re: Cómo guardar la fórmula de predicción para diferentes categorías al ejecutar el ajuste de modelo no lineal¿La solución de @txnelson en esta publicación ¿ayuda? ("Guardando la fórmula de predicción de vuelta a la tabla")
Names Default To Here( 1 );
dt = Open(
"$SAMPLE_DATA/Nonlinear Examples/Bioassay.jmp"
);
obj = Fit Curve(
Y( :Toxicity ),
X( :log Conc ),
Group( :formulation ),
Fit Logistic 4P
);
obj << (Fit[1] << Save Prediction Formula);
Esto utiliza el comando Guardar fórmula de predicción, en lugar de Publicar fórmula de predicción. Creo que esto es lo que quieres hacer y no requiere Pro.
Le brinda una columna de fórmula de predicción de resultados con, efectivamente, un modelo para cada grupo:
Match( :Formulation,
"standard",
0.599015186864584 + (1.10686367677145 - 0.599015186864584) / (1
+Exp( -5.84379312234502 * (:log Conc - 0.32019959502239) )),
"test A",
0.590902329849433 + (1.1012080930316 - 0.590902329849433) / (1
+Exp( -5.98069280093278 * (:log Conc - 0.284551221955609) )),
"test B",
0.592984828033858 + (1.0972015134296 - 0.592984828033858) / (1
+Exp( -5.75586785289505 * (:log Conc - 0.084429442746212) )),
"test C",
0.593403681513877 + (1.10597929999838 - 0.593403681513877) / (1
+Exp( -6.00992746207644 * (:log Conc - 0.298749145989595) )),
.
)
Re: Cómo guardar la fórmula de predicción para diferentes categorías al ejecutar el ajuste de modelo no linealhola phil,
Gracias de nuevo por los comentarios.
Voy a tratar de explicar un poco más en esta respuesta.
Sí, mi pregunta es sobre cómo automatizo el ajuste de un modelo y genero una columna con la fórmula de predicción resultante para cada grupo. Es solo una columna que quiero crear. La fórmula del modelo ya está en una columna para cada grupo y solo quiero replicar eso con los nuevos parámetros que se estimaron.
La idea de hacer esto es solo para poder informar los resultados de cada grupo de forma individual, además de poder representar gráficamente la curva del modelo y los datos experimentales de manera diferente a través del generador de gráficos.
Espero que esto sea más claro.
Sin embargo, parece que necesitaría Jump Pro para poder hacer esto, ¿verdad?
Gracias
ivo
Re: Cómo guardar la fórmula de predicción para diferentes categorías al ejecutar el ajuste de modelo no linealGracias por los comentarios Fil.
Probé el script y tienes razón, no funciona ya que solo tengo el JMP estándar... por desgracia.
Re: Cómo guardar la fórmula de predicción para diferentes categorías al ejecutar el ajuste de modelo no linealLa fórmula de predicción de publicación se relaciona con la capacidad de publicar en Formula Depot en JMP Pro. No espero que esto funcione si está utilizando JMP estándar. Puede verificar usando el script de ejemplo del índice de scripting.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Boston Housing.jmp" );
obj = K Nearest Neighbors(
Y( :mvalue ),
X(
:crim,
:zn,
:indus,
:chas,
:nox,
:rooms,
:age,
:distance,
:radial,
:tax,
:pt,
:b,
:lstat
),
K( 10 )
);
obj << (Response[1] << Publish Prediction Formula);
(Por cierto, esto es lo que estaba diciendo sobre la opción insertar JSL, mucho más claro, ¿no?)
¿Eso funciona? Debería abrir el Formula Depot. Nuevamente, solo espero que funcione si está utilizando JMP Pro.
Re: Cómo guardar la fórmula de predicción para diferentes categorías al ejecutar el ajuste de modelo no linealHola,
Solo algunos consejos para ayudar a las personas a ayudarlo con sus desafíos.
En primer lugar, ayudaría si puede usar la opción JSL cuando publique preguntas de secuencias de comandos. Solo necesita hacer clic en en la barra de herramientas sobre la ventana de publicación y agregar su JSL allí. Mucho más claro para que la gente entienda tu JSL y te ayude.
En segundo lugar, aquí hay un ajuste de modelo no lineal complejo, pero su pregunta es realmente sobre cómo automatizar el ajuste de un modelo y generar la columna de fórmula de predicción para cada grupo. Será más fácil para las personas ayudar si proporciona un ejemplo más simple que demuestre la parte particular del problema que está tratando de abordar. También hará que sea más accesible para que otros miembros de la comunidad entiendan si esto les da una solución a su problema. Un ejemplo que utilice el conjunto de datos de muestra clásico de Big Class siempre es bueno. En su caso, creo que ajustar un modelo simple para cada grupo de Sex in Big Class podría ser suficiente para demostrar su desafío. O tal vez es más complejo que eso. No estoy seguro porque la información que has proporcionado es un poco confusa.
Finalmente, podría ayudar si puede explicar un poco sobre lo que finalmente está tratando de lograr. ¿Por qué desea crear columnas de formularios para cada grupo? Puede haber otras formas mejores de lograr su objetivo.
Creo que si sigue estos pasos, encontrará que obtendrá más ayuda con las consultas que publique.
Saludos,
phil