Estoy intentando crear un script que capture los resultados del ajuste del modelo no lineal y los genere en un gráfico. El conjunto de datos se capturó continuamente a través del tiempo al que ajusté un modelo no lineal (ver imagen adjunta). Tengo 12 muestras diferentes para las cuales tengo el mismo gráfico si pudieras desplazarte hacia abajo.
Sin embargo, me gustaría reportar el gráfico de manera que pueda ver los datos capturados solo para las filas correspondientes a los días 0, 1, 2, 3, 4, 5, y así hasta los 21 días sin interferir la curva de el modelo por muestra. En este caso, quiero tener los datos experimentales como datos de diagrama de dispersión y el modelo como datos de curva continua o curva suave.
¿Cómo hago esto?
El creador de gráficos no parece trazar tanto los datos experimentales como el modelo al mismo tiempo que el primer desafío.
Mi razonamiento fue que potencialmente podría usar algún tipo de filtro de datos que podría aplicar cada vez que llame al script sin interferir con la columna del modelo. ¿Necesito crear una nueva tabla de datos específica para los modelos con las nuevas estimaciones de parámetros para cada una de las 12 muestras y luego llamar al generador de gráficos?
También intenté usar el gráfico Gráfico/Legacy/superposición en la pestaña del menú JMP. Esto parece trazar curvas de datos y de modelo, pero en este caso me di cuenta de que JMP no aplicó las estimaciones de los parámetros individualmente a cada muestra en la columna del modelo después de aceptar y guardar las estimaciones de los parámetros para cada muestra. En este caso, la fórmula del modelo solo usa los parámetros que se estimaron para la muestra que aparece primero en la tabla de datos y los usa para las siguientes muestras.
¿Debo luego crear una nueva tabla de datos que genere 12 columnas con la fórmula del modelo utilizando las estimaciones de parámetros determinadas para cada muestra para poder trazar los datos experimentales y del modelo juntos para cada muestra?
Espero que esto quede claro. Puedo subir una captura de pantalla de la tabla de datos, etc.
Estoy intentando escribir un script que abra una nueva columna para las estimaciones de nuevos parámetros.
Después de ejecutar el ajuste no lineal, obtengo las estimaciones y los errores. Luego conservo solo las tablas de datos de interés e intento de alguna manera que los valores de interés se utilicen en una nueva columna con la misma fórmula modelo. La idea sería especificar los parámetros del modelo en función de las estimaciones.
Necesito ayuda porque no sé si esta es la forma correcta de hacerlo o si necesito utilizar otras funciones. El siguiente script puede ser un poco complicado de seguir, pero probablemente se deba a que casi no tengo experiencia en programación. El guión obviamente funciona
@Mark_Bailey escribió:
Estoy enseñando ahora, así que no tengo libertad para comprobarlo, pero Nonlinear podría guardar la fórmula con los diferentes conjuntos de parámetros para usted. La función Match() es útil aquí. Usted hace coincidir un grupo y replica el modelo para cada resultado, pero aplica las estimaciones de parámetros únicas para cada grupo. Se convierte en una especie de ramificación. Como una declaración CASE en algunos idiomas.
hasta la parte en NEGRITA:
col9 = Nueva columna("Modelo");
col9<< establecer fórmula (Parámetro({Y1_Y1_0 = 0.2, K1_K1_0 = 0.01, P1_P1_0 = 0.004, Y2_Y2_0 = 0.15, K2_K2_0 = 0.06, P2_P2_0 = 0.3}, If(:Días>0, (Y1_Y1_0 * Exp(-Exp(( (K1_K1_0 * Exp()) / Y1_Y1_0) * (P1_P1_0 -
ías))) + Y2_Y2_0 * Exp(-Exp(((K2_K2_0 * Exp()) / Y2_Y2_0) * (P2_P2_0 -
ías)))),0 )));
col10=nuevacolumna("Error");
col10<< set Fórmula((:Promedio - :Modelo) ^ 2);
col10< col10<
obj = No lineal(Y( :Promedio ), X( :Modelo ), Pérdida( :Err ), Límite de iteración( 5000 ), Por( :Muestra ));
objeto << ir;
//devuelve una lista de vectores donde cada vector contiene los parámetros estimados
obj << obtener estimaciones;
//consulte también Obtener SSE, Obtener nombres de parámetros, Obtener CI
//Como alternativa, haz una tabla
_xx = obj << Xpath("//OutlineBox[@helpKey='Solución no lineal']");
//sólo 2 grupos por lo que sólo se encuentran 2; cada uno contiene dos subtablas
fit_dt = (_xx[1]< est_dt = (_xx[1]< fit_dt << set Name("Errores de ajuste no Lin");
est_dt << set Name("Estimaciones de ajuste no Lin");
Nombres predeterminados aquí (1);
DontClose = {"dt4", "Errores de ajuste no Lin", "Estimaciones de ajuste no Lin"}; // Ejemplos de nombres de tablas que deseas abandonar
// Recorre la lista hacia atrás, para que los números de la tabla no cambien
Para (i = N Tabla(), i >= 0, i--,
Si (contiene (DontClose, tabla de datos (i) << obtener nombre),
Continuar(),
Cerrar (Tabla de datos (i), "No guardar")
)
);
dt = Tabla de datos("Estimaciones de ajuste no Lin");
dt2<
myList=:Estimaciones<
dt0 = Tabla de datos ("dt4");
dt0<< Nueva columna("Modelo ajustado por muestra");
col11="Modelo ajustado por muestra";
col11 << establecer fórmula (Parámetro({Y1_Y1_0, K1_K1_0, P1_P1_0, Y2_Y2_0, K2_K2_0, P2_P2_0}, If(:Días>0, (Y1_Y1_0 * Exp(-Exp(((K1_K1_0 * Exp()) / Y1_Y1_0) * ( P1_P1_0 -
ías))) + Y2_Y2_0 * Exp(-Exp(((K2_K2_0 * Exp()) / Y2_Y2_0) * (P2_P2_0 -
ías)))),0), Establecer propiedad("Predicción", {:Promedio , Creador("No lineal")}), Por (:Muestra)));
Para cada fila (col11 = establecer fórmula (Coincidencia ("Parámetro", "Estimaciones")));
col11<
col11<
¿Alguna sugerencia?
Estoy enseñando ahora, así que no tengo libertad para comprobarlo, pero Nonlinear podría guardar la fórmula con los diferentes conjuntos de parámetros para usted. La función Match() es útil aquí. Usted hace coincidir un grupo y replica el modelo para cada resultado, pero aplica las estimaciones de parámetros únicas para cada grupo. Se convierte en una especie de ramificación. Como una declaración CASE en algunos idiomas.
No, en lugar de usar un formato ancho (respuestas guardadas en una docena de columnas de datos), use el formato alto (respuestas guardadas en una columna y use una segunda columna para identificar la muestra). Ahora use el ID de muestra en la función Por de la mayoría de las plataformas o la función Grupo en la plataforma No lineal o Trazar curva.