Cómo guardar la fórmula de predicción para diferentes categorías cuando se ejecuta 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 intentando 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 lo hago manualmente, como por ejemplo:
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 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. Sólo 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 en 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.
Intentaré explicar un poco más sobre esta respuesta.
Sí, mi pregunta es cómo automatizar el ajuste de un modelo y generar una columna con la fórmula de predicción resultante para cada grupo. Sólo quiero crear una columna. La fórmula del modelo ya está en una columna para cada grupo y solo quiero replicarla con los nuevos parámetros que se estimaron.
La idea de hacer esto es solo para poder informar los resultados de cada grupo individualmente, 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 quede 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 Phil.
Probé el script y tienes razón, no funciona porque solo tengo el JMP estándar... lamentablemente.
Re: Cómo guardar la fórmula de predicción para diferentes categorías al ejecutar el ajuste de modelo no linealPublicar fórmula de predicción se relaciona con la capacidad de publicar en Formula Depot en JMP Pro. No espero que esto funcione si utiliza JMP estándar. Puede comprobarlo utilizando 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 decía sobre la opción insertar JSL; mucho más claro, ¿no?)
¿Eso funciona? Debería abrir el Formula Depot. Nuevamente, sólo espero que funcione si estás usando 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, sería útil poder utilizar la opción JSL cuando publique preguntas sobre secuencias de comandos. Sólo necesita hacer clic en en la barra de herramientas encima de la ventana de publicación y agregar su JSL allí. Es mucho más claro para que las personas comprendan su JSL y lo ayuden.
En segundo lugar, aquí hay un modelo no lineal complejo que se ajusta, 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 adaptar un modelo simple para cada grupo de Sex in Big Class podría ser suficiente para demostrar su desafío. O tal vez sea más complejo que eso. No estoy seguro porque la información que has proporcionado es un poco confusa.
Por último, podría resultar útil explicar un poco lo que en última instancia intenta lograr. ¿Por qué desea crear columnas de fórmula para cada grupo? Puede haber otras formas mejores de lograr su objetivo.
Creo que si sigues estos pasos deberías encontrar más ayuda con las consultas que publiques.
Saludos,
filo