Limite dei parametri per l'adattamento della curva non lineareSto cercando di adattare i dati a punti per oltre 1000 campioni. Ho scoperto che la funzione 5P biesponenziale fornisce i migliori risultati di adattamento. Tuttavia, gli stessi campioni con uno o due punti dati leggermente al di fuori del trend rendono l'adattamento davvero anomalo. Per una popolazione tipica, i parametri del tasso di decadimento si aggirano intorno a 0,2 e per quei campioni l'adattamento fornisce risultati nell'intervallo 10. Le opzioni "Parameter bound" e l'aumento del limite di iterazione nell'adattamento non lineare risolvono il problema. Tuttavia, farlo manualmente tramite GUI è impossibile.
Esiste un modo per impostare i limiti dei parametri e il numero di iterazioni "globalmente" (per tutti i campioni)?
Ho provato anche l'opzione script, ma non ho familiarità con la scrittura di script JSL e non sono riuscito a mostrare risultati soddisfacenti con lo script seguente.
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: il JSL originale è stato spostato nella casella di visualizzazione JSL da txnelson
Analisi e modellazione dei dati di baseRe: Limite dei parametri per l'adattamento di curve non lineariCiao @eugur ,
Vi mostrerò come ottenere questo risultato senza usare JSL, solo per farvi capire come funziona il processo (a parte la sezione iniziale). Dovreste iniziare generando una colonna formula che fornirà i valori dei parametri vuoti che possono poi essere modificati per trovare la soluzione migliore per i vostri dati nella piattaforma non lineare. Per prima cosa, dovete creare la colonna formula (ho aggiunto un breve script qui, ma potete anche crearlo manualmente):
dt=current data table();
dt<
<NEW column=""></NEW>
<P>Quando è pronto, apri la piattaforma non lineare, inserisci la colonna della formula nel ruolo "X, Formula Predittiva" e la colonna Y di interesse nella sezione Y, quindi premi "Esegui". Una volta avviata la piattaforma, fai clic sul pulsante rosso e seleziona "limiti dei parametri" e inserisci i limiti che desideri utilizzare.</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>È quindi possibile eseguire la piattaforma non lineare con 'Go' per ottenere i parametri stimati con tali limiti.</P> <BR /> <P>Spero che sia d'aiuto!</P> <P>Grazie,</P> <P>Ben</P> <BR /> <BR />
Re: Limite dei parametri per l'adattamento di curve non lineariCiao Ben,
Grazie per la risposta, ma posso già farlo e non è quello che sto chiedendo. Come ho accennato nel mio post, sto cercando di adattare i dati a punti per oltre 1000 campioni, il che significa più di 1000 curve. Pertanto, in una piattaforma non lineare, dovrei anche utilizzare la colonna "ID" nella sezione "Per". (In qualche modo l'opzione "Raggruppa" non funziona qui, mentre funziona per Adatta curva).
Quando si hanno più campioni, è necessario eseguire manualmente quanto spiegato (cliccare il pulsante rosso, selezionare "limiti dei parametri" e inserire i limiti desiderati) per ogni campione. Questo potrebbe andare bene se si hanno un paio di campioni, ma non per più di 1000. Quello che chiedo è di poter impostare i limiti dei parametri e il numero di iterazioni per tutti i 1000 campioni contemporaneamente.
Re: Limite dei parametri per l'adattamento di curve non lineariCiao @eugur ,
Se non si utilizza il termine "gruppo", i limiti dei parametri impostati vengono impostati globalmente per tutti i campioni con più di 1000 dati (il motivo per cui il raggruppamento non funziona in modalità non lineare è che il gruppo stesso deve essere integrato nella formula di previsione che si sta utilizzando per la generazione di dati non lineari). Lo script che si ha dovrebbe funzionare, ma non è necessario eseguire "Go" sulla seconda riga; ecco perché i limiti dei parametri non vengono aggiunti, perché la piattaforma è in esecuzione prima che sia possibile apportare modifiche. Ecco un esempio che utilizza lo strumento "tabella dati combinati" per ottenere un report singolare che mostra facilmente come sono cambiati i valori in ciascun campione.
dt=current data table();
id_no=N Items(Associative Array(dt:Batch)<
<GET keys=""></GET>
<BR /> <BR />
Re: Limite dei parametri per l'adattamento di curve non lineariFit Curve funziona al meglio nei casi con molti ID di curva, ma se la funzione di adattamento non è inclusa nella libreria di funzioni pre-programmate di Fit Curve, è necessario Fit Nonlinear.
Come hai notato, "Raggruppa" funziona in modo diverso in Adattamento non lineare e non è la scelta giusta in questo caso. Consiglio di raggruppare le curve usando "Per".
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: Limite dei parametri per l'adattamento di curve non lineariGrazie Ben,
Funziona funzionalmente. Ma credo che la piattaforma non lineare utilizzi un risolutore diverso. Quasi il 50% dei risultati di adattamento non è accettabile.
Re: Limite dei parametri per l'adattamento di curve non lineariCiao Christian,
Grazie mille per la risposta. Hai ragione, Fit Curve sembra funzionare molto meglio. La funzione di adattamento che sto usando ( Biesponenziale 5P ) è inclusa nella libreria di funzioni pre-programmate di Fit Curve. Tuttavia, come ho già detto, per alcuni campioni (5%) i risultati dell'adattamento sono davvero strani ed è per questo che ho voluto provare l'opzione Fit Nonlinear. Tuttavia, anche con i limiti, Fit Nonlinear riesce ad adattare con precisione solo circa il 50% dei campioni.
Quindi le mie domande sono:
- È possibile aggiungere limiti ai parametri per la curva di adattamento?
- In caso contrario, è possibile utilizzare gli stessi risolutori e impostazioni per Fit Nonlinear come in Fit Curve?
Re: Limite dei parametri per l'adattamento di curve non lineariCiao @eugur , puoi provare ad ampliare il limite delle iterazioni o addirittura prendere in considerazione l'utilizzo di una griglia SSE per vedere se è possibile ottenere valori di parametri adatti per i tuoi campioni. Potresti anche provare a eseguire iterazioni diverse dall'opzione "Netwon" utilizzata di default.
Il motivo per cui il 50% dei risultati fallisce individualmente è che quando vengono utilizzati tutti i campioni, l'effetto sull'adattamento complessivo del modello SSE è ridotto, quindi si riduce la probabilità che un singolo punto causi un errore, mentre quando viene analizzato un solo punto, l'errore è più probabile.
Re: Limite dei parametri per l'adattamento di curve non lineariCiao eugur,
1) Per quanto ne so, Fit Curve non supporta i limiti dei parametri. 2) Fit Curve utilizza un algoritmo diverso da Nonlinear, quindi non è possibile utilizzare lo stesso risolutore.
Fit Curve e Fit Nonlinear sembrano simili in apparenza, ma in realtà sono piuttosto diversi "sotto il cofano". Nonlinear è un risolutore di regressione non lineare tradizionale basato sui minimi quadrati. Offre la massima flessibilità, ma richiede anche un input manuale notevole. L'adattamento della regressione non lineare, a differenza delle regressioni lineari, è non deterministico, quindi non vi è alcuna garanzia che un dato insieme di ipotesi iniziali convergerà sempre, anche per set di dati "simili". Questo non è un problema specifico di JMP; nella mia esperienza, la maggior parte dei risolutori non lineari richiede occasionali "aggiustamenti" manuali, il che rende l'elaborazione batch di centinaia di set di dati una sfida interessante (ma non impossibile!). È qui che entra in gioco la piattaforma Fit Curve di JMP.
Fit Curve è un caso speciale con una piccola libreria di funzioni preimpostate e ottimizzate. Non utilizza un risolutore di regressione non lineare completamente generale, ma ogni funzione utilizza un algoritmo speciale scritto appositamente per quella funzione. Questo lo rende eccezionalmente veloce e con maggiori probabilità di convergenza per un'ampia varietà di dati. (Non sono uno sviluppatore di software né un matematico, quindi perdonate la spiegazione non tecnica, queste sono solo le mie conoscenze di base!). Per quanto ne so, Fit Curve non supporta i limiti dei parametri, forse perché di solito non sono necessari. Se ritenete che i limiti dei parametri siano necessari per la vostra situazione, allora torniamo a utilizzare la piattaforma Nonlinear. Ben ha proposto alcune buone idee e ci sono altre cose da provare usando Nonlinear + scripting se Fit Curve non funziona, ma il mio consiglio è sempre di provare prima Fit Curve e di utilizzare Fit Nonlinear solo come opzione di backup se questo non funziona.
Ecco alcuni link che potrebbero interessarti:
Esempio di impostazione dei limiti dei parametri
Dettagli statistici per i modelli di curva di adattamento
Curva non lineare vs curva di adattamento che danno risultati diversi? - Community utenti JMP
-Cristiano