Sto cercando di creare uno script che acquisisca i risultati dall'adattamento del modello non lineare e li trasmetta in un grafico. Il set di dati è stato acquisito continuamente nel tempo a cui ho adattato un modello non lineare (vedi immagine allegata). Ho 12 campioni diversi per i quali ho lo stesso grafico se vuoi scorrere verso il basso.
Tuttavia, vorrei riportare il grafico in modo da poter vedere i dati acquisiti solo per le righe corrispondenti ai giorni 0, 1, 2, 3, 4, 5 e così via fino a 21 giorni senza interferire con la curva di il modello per campione. In questo caso voglio avere i dati sperimentali come dati del grafico a dispersione e il modello come dati a curva continua o curva liscia
Come faccio a fare questo?
Il costruttore di grafici non sembra tracciare sia i dati sperimentali che il modello contemporaneamente alla prima sfida.
Il mio ragionamento era che potevo potenzialmente utilizzare una sorta di filtro dati che potevo applicare ogni volta che chiamavo lo script senza interferire con la colonna del modello. Devo creare una nuova tabella dati specifica per i modelli con le nuove stime dei parametri per ciascuno dei 12 campioni e quindi chiamare il generatore di grafici?
Ho anche provato a utilizzare il grafico Graph/Legacy/overlay nella scheda del menu JMP. Questo sembra tracciare sia le curve dei dati che quelle del modello, ma in questo caso mi sono reso conto che JMP non ha applicato le stime dei parametri individualmente a ciascun campione sulla colonna del modello dopo aver accettato e salvato le stime dei parametri per ciascun campione. In questo caso la formula Modello utilizza solo i parametri che sono stati stimati per il campione che appare per primo nella tabella dati e li utilizza per i campioni successivi.
Devo quindi creare una nuova tabella di dati che generi 12 colonne con la formula del modello utilizzando le stime dei parametri determinati per ciascun campione per poter tracciare insieme sia il modello che i dati sperimentali per ciascun campione?
Spero che questo sia chiaro. Posso caricare una schermata della tabella dei dati ecc
Sto cercando di scrivere uno script che apra una nuova colonna per le nuove stime dei parametri.
Dopo aver eseguito l'adattamento non lineare, ottengo le stime e gli errori. Quindi mantengo solo le tabelle di dati di interesse e cerco in qualche modo di ottenere i valori di interesse da utilizzare in una nuova colonna con la stessa formula del modello. L'idea sarebbe quella di specificare i parametri del modello in base alle stime.
Ho bisogno di aiuto perché non so se questo è il modo giusto per farlo o se devo usare altre funzioni. Lo script qui sotto potrebbe essere un po' complicato da seguire, ma probabilmente è perché non ho quasi nessuna esperienza di programmazione. La sceneggiatura ovviamente funziona
@Mark_Bailey ha scritto:
Sto insegnando ora, quindi non sono libero di controllare, ma Nonlinear potrebbe salvare la formula con i diversi set di parametri per te. La funzione Match() è utile qui. Abbina il gruppo e replichi il modello per ogni risultato, ma applichi le stime dei parametri univoci per ogni gruppo. Diventa una sorta di ramificazione. Come un'istruzione CASE in alcune lingue.
fino alla parte in GRASSETTO:
col9 = Nuova Colonna("Modello");
col9<< formula impostata (Parametro({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(: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 )));
col10=nuovacolonna("Err");
col10<< set Formula((:Media - :Modello) ^ 2);
col10< col10<
obj = Non lineare(Y( :Average ), X( :Model ), Loss( :Err ), Iteration Limit( 5000 ), By( :Sample ));
obj << vai;
//restituisce un elenco di vettori in cui ogni vettore contiene le stime dei parametri
obj << ottenere stime;
//vedi anche Ottieni SSE, Ottieni nomi parametri, Ottieni CI
//In alternativa, crea una tabella
_xx = obj << Xpath("//OutlineBox[@helpKey='Soluzione non lineare']");
//solo 2 gruppi quindi ne vengono trovati solo 2; ognuno contiene due sottotabelle
fit_dt = (_xx[1]< est_dt = (_xx[1]< fit_dt << set Name("NonLin Fit Errors");
est_dt << set Name("NonLin Fit Stime");
Nomi Predefinito A Qui( 1 );
DontClose = {"dt4", "NonLin Fit Errors", "NonLin Fit Estimates"}; // Nomi di esempio delle tabelle che vuoi lasciare
// Ciclo all'indietro nell'elenco, in modo che i numeri della tabella non cambino
For( i = N Tabella(), i >= 0, i--,
If( Contiene( DontClose, Data Table( i ) << get name ),
Continua(),
Chiudi( Tabella dati( i ), "Nessun salvataggio" )
)
);
dt = Data Table("NonLin Fit Stime");
dt2<
myList=:Stime<
dt0 = Tabella dati ("dt4");
dt0<< Nuova colonna("Modello adattato per campione");
col11="Modello adattato per campione";
col11 << imposta formula (Parameter({Y1_Y1_0, K1_K1_0, P1_P1_0, Y2_Y2_0, K2_K2_0, P2_P2_0}, 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), Set Property("Predicting", {:Average , Creator("Non lineare")}), By (:Sample)));
For each Row(col11= set formula (Match("Parameter", "Estimates")));
col11<
col11<
Eventuali suggerimenti?
Sto insegnando ora, quindi non sono libero di controllare, ma Nonlinear potrebbe salvare la formula con i diversi set di parametri per te. La funzione Match() è utile qui. Abbina il gruppo e replichi il modello per ogni risultato, ma applichi le stime dei parametri univoci per ogni gruppo. Diventa una sorta di ramificazione. Come un'istruzione CASE in alcune lingue.
No, invece di utilizzare un formato ampio (risposte salvate in una dozzina di colonne di dati), utilizzare il formato alto (risposte salvate in una colonna e utilizzare una seconda colonna per identificare il campione). Utilizzare ora l'ID campione nel ruolo By della maggior parte delle piattaforme o il ruolo Group nella piattaforma Nonlinear o Plot Curve.