Límite de parámetros para el ajuste de curvas no linealesEstoy intentando ajustar los puntos de datos de más de 1000 muestras. He descubierto que la función Biexponencial 5P ofrece los mejores resultados de ajuste. Sin embargo, las mismas muestras con uno o dos puntos de datos ligeramente fuera de la tendencia hacen que el ajuste sea realmente extraño. Para una población típica, los parámetros de la tasa de decaimiento rondan 0,2 y, para esas muestras, el ajuste proporciona resultados en el rango de 10. Las opciones de "Límite de parámetro" y un mayor límite de iteración en el ajuste no lineal resuelven el problema. Sin embargo, hacerlo manualmente a través de la interfaz gráfica es imposible.
¿Hay alguna manera de establecer límites de parámetros y números de iteración "globalmente" (para todas las muestras)?
También probé la opción de script, pero no estoy familiarizado con los scripts JSL y no pude mostrar resultados adecuados con el script a continuación.
Names Default To Here( 1 );
dt = Current Data Table();
obj = Nonlinear( Y( :data ), X( :data Predictor ), By( :ID ) );
obj << Go;
obj << Parameter Bounds(
asympt( 14, 22 ),
scale1( 0, 100 ),
decayrate1( -0.2, 0.1 ),
scale2( -100, 0 ),
decayrate2( -0.2, 0.1 )
);
obj << Iteration Limit( 10000 );
obj << Finish;
G = obj << Get Estimates;
Show( G );
obj << Report View( "Summary" );
obj << get estimates;
Nota: El JSL original fue trasladado a la caja de presentación de JSL por txnelson
Análisis y modelado de datos básicosRe: Límite de parámetros para ajuste de curva no linealHola @eugur ,
Te mostraré cómo lograr esto sin usar JSL, solo para que entiendas cómo funciona el proceso (excepto la sección inicial). Comienza generando una columna de fórmula que proporcione los valores de los parámetros en blanco, que luego podrás modificar para encontrar el ajuste óptimo a tus datos en la plataforma no lineal. Primero, crea la columna de fórmula (he añadido un breve script aquí, pero también puedes hacerlo manualmente):
dt=current data table();
dt<
<NEW column=""></NEW>
<P>Cuando esté listo, abra la plataforma no lineal, coloque la columna de fórmula en la función "X, Fórmula de Predictor" y la Y de interés en la sección Y. Pulse "Ejecutar". Una vez iniciada la plataforma, haga clic en el botón rojo, seleccione "Límites de parámetros" e introduzca los límites que desee.</P> <P><SPAN class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Ben_BarrIngh_0-1749874842390.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_0-1749874842390.png" style="width: 278px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_0-1749874842390.png" style="width: 278px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_0-1749874842390.png" style="width: 278px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_0-1749874842390.png" style="width: 278px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_0-1749874842390.png" style="width: 278px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_0-1749874842390.png" style="width: 278px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_0-1749874842390.png" style="width: 278px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_0-1749874842390.png" style="width: 278px;"><span class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_0-1749874842390.png" style="width: 278px;"><img src="https://us.v-cdn.net/6038925/uploads/images/76921iB16E7281FC0917D7/Ben_BarrIngh_0-1749874842390.png" role="button" title="Ben_BarrIngh_0-1749874842390.png" alt="Ben_BarrIngh_0-1749874842390.png" /></span></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></P> <P><SPAN class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Ben_BarrIngh_1-1749874859915.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_1-1749874859915.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_1-1749874859915.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_1-1749874859915.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_1-1749874859915.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_1-1749874859915.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_1-1749874859915.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_1-1749874859915.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_1-1749874859915.png" style="width: 400px;"><span class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_1-1749874859915.png" style="width: 400px;"><img src="https://us.v-cdn.net/6038925/uploads/images/76922i0E0E2181BA64F9AD/Ben_BarrIngh_1-1749874859915.png" role="button" title="Ben_BarrIngh_1-1749874859915.png" alt="Ben_BarrIngh_1-1749874859915.png" /></span></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></P> <BR /> <P>Luego puede ejecutar la plataforma no lineal con 'Go' para obtener los parámetros estimados con esos límites.</P> <BR /> <P>¡Espero que ayude!</P> <P>Gracias,</P> <P>Ben</P> <BR /> <BR />
Re: Límite de parámetros para ajuste de curva no linealHola Ben,
Gracias por tu respuesta, pero ya puedo hacerlo y no es lo que solicito. Como mencioné en mi publicación, intento ajustar los puntos de datos para más de 1000 muestras, lo que implica ajustar más de 1000 curvas. Por lo tanto, en una plataforma no lineal, también necesitaría usar la columna "ID" en la sección "Por". (Por algún motivo, la opción "Grupo" no funciona aquí, mientras que sí funciona para Ajustar Curva).
Cuando tienes varias muestras, debes hacer lo que explicaste (hacer clic en el botón rojo, seleccionar "límites de parámetros" e introducir los límites que desees usar) manualmente para cada muestra. Esto podría funcionar si tienes un par de muestras, pero no para más de 1000. Lo que pido es poder establecer límites de parámetros y el número de iteraciones para las más de 1000 muestras a la vez.
Re: Límite de parámetros para ajuste de curva no linealHola @eugur ,
Si no utiliza el término de grupo, los límites de los parámetros se establecen globalmente para las más de 1000 muestras (la agrupación no funciona en el modo no lineal porque el grupo debe integrarse en la fórmula de predicción que alimenta a NL). El script debería funcionar, pero no necesita ejecutar "Go" en la segunda línea; por eso no se agregan los límites de los parámetros, ya que la plataforma se ejecuta antes de poder modificar nada. Aquí tiene un ejemplo que utiliza la herramienta "Tabla de datos combinados" para obtener un informe único y ver fácilmente cómo han cambiado los valores en cada muestra.
dt=current data table();
id_no=N Items(Associative Array(dt:Batch)<
<GET keys=""></GET>
<BR /> <BR />
Re: Límite de parámetros para ajuste de curva no linealFit Curve funciona mejor para casos con muchos identificadores de curvas, pero si su función de ajuste no está incluida en la biblioteca de funciones preprogramadas de Fit Curve, entonces se necesita Fit Nonlinear.
Como habrás notado, "Agrupar" funciona de forma diferente en Ajuste no lineal y no es lo que quieres usar en este caso. Recomiendo agrupar las curvas usando "Por".
I prefer using the following syntax for this. Could you try this and let us know if it works:</CODE></P>
<PRE><CODE class=" language-jsl">Nonlinear(
Y( :data ),
X( :data predictor),
By( :ID ),
Parameter Bounds(
asympt( 14, 22 ),
scale1( 0, 100 ),
decayrate1( -0.2, 0.1 ),
scale2( -100, 0 ),
decayrate2( -0.2, 0.1 ) ),
Iteration Limit( 10000 )
);
Re: Límite de parámetros para ajuste de curva no linealGracias Ben,
Esto funciona. Sin embargo, creo que la plataforma no lineal utiliza un solucionador diferente. Casi el 50 % de los resultados de ajuste son inaceptables.
Re: Límite de parámetros para ajuste de curva no linealHola Christian,
Muchas gracias por su respuesta. Tiene razón, Fit Curve parece funcionar mucho mejor. La función de ajuste que uso ( 5P biexponencial ) está incluida en la biblioteca de funciones preprogramadas de Fit Curve. Sin embargo, como mencioné antes, para las mismas muestras (5 %), los resultados del ajuste son bastante extraños, y por eso quería probar la opción Fit Nonlinear. Pero incluso con los límites, Fit Nonlinear solo ajusta con precisión alrededor del 50 % de las muestras.
Entonces mis preguntas son:
- ¿Es posible agregar límites de parámetros para la curva de ajuste?
- Si no, ¿es posible utilizar los mismos solucionadores y configuraciones para Ajustar no lineal que en Ajustar curva?
Re: Límite de parámetros para ajuste de curva no linealHola @eugur , puedes intentar ampliar tu límite de iteración o incluso considerar usar una cuadrícula SSE para ver si es posible obtener valores de parámetros adecuados para tus muestras; también podrías considerar ejecutar diferentes iteraciones desde la opción 'Netwon' que se usa como predeterminada.
La razón por la que el 50% de los resultados fallan individualmente es porque cuando se utilizan todas las muestras, el efecto en el ajuste general del modelo SSE se reduce, por lo que la probabilidad de que un solo punto cause una falla se reduce, mientras que cuando se analiza solo un único punto, la falla es más probable.
Re: Límite de parámetros para ajuste de curva no linealHola eugur,
1) Fit Curve no admite límites de parámetros hasta donde yo sé. 2) Fit Curve utiliza un algoritmo diferente al no lineal, por lo que no se puede utilizar el mismo solucionador.
Fit Curve y Fit Nonlinear parecen similares a simple vista, pero en realidad son bastante diferentes en su interior. Nonlinear es un solucionador tradicional de regresión por mínimos cuadrados no lineal. Ofrece máxima flexibilidad, pero también requiere la mayor cantidad de entrada manual. El ajuste de regresión no lineal, a diferencia de las regresiones lineales, no es determinista, por lo que no hay garantía de que un conjunto dado de valores iniciales siempre converja, incluso para conjuntos de datos similares. Esto no es exclusivo de JMP; en mi experiencia, la mayoría de los solucionadores no lineales requieren ajustes manuales ocasionales, lo que convierte el procesamiento por lotes de cientos de conjuntos de datos en un desafío interesante (¡pero no imposible!). Aquí es donde entra en juego la plataforma Fit Curve de JMP.
Fit Curve es un caso especial con una pequeña biblioteca de funciones predefinidas optimizadas. No utiliza un solucionador de regresión no lineal completamente general, sino que cada función utiliza un algoritmo especial desarrollado específicamente para ella. Esto la hace excepcionalmente rápida y con mayor probabilidad de convergencia para una amplia variedad de datos. (No soy desarrollador de software ni matemático, así que disculpen la explicación no técnica, ¡esto es solo mi comprensión básica!). Hasta donde sé, Fit Curve no admite límites de parámetros, quizás porque no suelen ser necesarios. Si considera que los límites de parámetros son necesarios para su situación, entonces volvemos a usar la plataforma Nonlinear. Ben propuso algunas buenas ideas y hay otras cosas que se pueden probar usando Nonlinear+scripting si Fit Curve no funciona; pero mi sugerencia es siempre probar Fit Curve primero y usar Fit Nonlinear solo como alternativa si esto no funciona.
A continuación se muestran algunos enlaces que podrían ser interesantes:
Ejemplo de configuración de límites de parámetros
Detalles estadísticos de los modelos de curva de ajuste
¿Curva no lineal vs. curva de ajuste con resultados diferentes? - Comunidad de usuarios de JMP
-Cristiano