Hai bisogno di aiuto per lo scripting - Adattamento lineare dove la pendenza è maggiore<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Sto studiando la crescita di un batterio in terreno di coltura liquido nei pozzetti di una piastra a 96 pozzetti. Voglio ottenere il tasso di crescita massimo, che è la pendenza di una linea retta nella fase di crescita esponenziale, come di seguito:

Quello che devo fare è tagliare i dati da entrambe le direzioni in modo che la linea si adatti ai 10 punti dati che hanno la pendenza maggiore.

Ciascuna delle mie tabelle di dati ha 96 di queste curve indicate con una designazione lettera-numero ("Bene").

I dati dell'asse y sono trasformati in logaritmi naturali “(Ln OD 600”) ei dati dell'asse x sono espressi in ore (“Time [hrs]”). Attualmente ho scritto uno script che utilizza la piattaforma Fit Y by X, inserisce "Ln OD 600" nella risposta Y, "Time [hrs]" nel fattore X e "Well" nella By-box. Quindi ottengo un rapporto con 96 grafici diversi, a ciascun grafico si adatta una linea e apre un filtro dati locale utilizzando "Ora [ore]" e lo taglia a 10 punti dati/righe corrispondenti.

Quindi devo far scorrere manualmente quel filtro/cursore nel tempo per trovare la pendenza maggiore della linea. Ho un paio di centinaia di file di dati, quindi ci vuole un sacco di tempo per farlo!

Quello che sto cercando di fare è scrivere uno script che sposti automaticamente il cursore nel tempo e trovi la pendenza maggiore della linea. Sfortunatamente lo scripting e la codifica non sono uno dei miei set di abilità, quindi sono perplesso. Ho allegato il mio script JSL fin da ora. Grazie per qualsiasi aiuto o pensiero!
Ri: Ho bisogno di aiuto per lo scripting - Adattamento lineare dove la pendenza è maggiore
Ciao Jim-
Come modificheresti lo script per trovare la massima pendenza dei dati esemplificati nel grafico sopra nel corso dell'intervallo?Ho provato a modificare il tuo script ma non ha escluso correttamente alcuna riga. È nello stesso formato dell'OP.Ogni "pozzetto" ha una forma d'onda simile.
Grazie,
Ha disegnato
Ri: Ho bisogno di aiuto per lo scripting - Adattamento lineare dove la pendenza è maggioreJim,
Questo è meraviglioso! L'ho eseguito su 1 set completo di dati e le pendenze della linea calcolate dallo script sono correlate alle pendenze calcolate a mano con un R-quadrato di 0,98. Sospetto che la piccola variazione sia dovuta all'errore coinvolto nel calcolarli a mano. Ne farò ancora un po ', ma sembra esattamente quello di cui avevo bisogno!Pubblicherò di nuovo una volta eseguito su alcuni dei miei file di dati già analizzati sulle sue prestazioni.
Grazie mille per l'aiuto,
Nathan
Ri: Ho bisogno di aiuto per lo scripting - Adattamento lineare dove la pendenza è maggioreProva questo script sui tuoi dati e vedi se è più vicino a quello che vuoi:
I nomi predefiniti sono qui ( 1 ) ;
// apre la tabella dei dati
dt = Tabella dei dati correnti () ;
Riassumere ( dt , Bene Lista = di ( : BENE ) ) ;
dt << colore per colonna ( : BENE ) ;
// Passa attraverso i dati di ogni pozzo e trova i migliori 10 punti contigui
// con la migliore pendenza
Per ( io = 1 , io <= N articoli ( Bene Lista ) , io ++,
// Imposta gli elenchi per contenere i 10 punti dati determinati con la massima pendenza
dt << seleziona dove ( : BENE == Bene Lista [ io ] ) ;
bestbeta = 0 ;
startrow = 0 ;
voi = : Ln diametro esterno 600 [ dt << ottenere righe selezionate ] ;
xall = : Tempo [ dt << ottenere righe selezionate ] ;
Per ( K = 1 , K <= N righe ( xall ) - 10 , K ++,
X = xall [ K :: K + 9 ] ;
X = J ( Riga N ( X ) , 1 , 1 ) || X ;
si = voi [ K :: K + 9 ] ;
// calcoli di regressione
xpxi = Inverso ( X ` * X ) ;
beta = xpxi * X ` * si ;
Se ( Addominali ( beta [ 2 ] ) > bestbeta ,
bestbeta = Addominali ( beta [ 2 ] ) ;
startrow = ( dt << ottenere righe selezionate )[ K ] ;
) ;
) ;
Per ( K = min ( dt << ottenere righe selezionate ) , K <= Massimo ( dt << ottenere righe selezionate ) , K ++,
Se ( startrow <= K <= startrow + 9 ,
Stato riga ( K ) = Stato escluso ( 0 ) , Stato riga ( K ) = Stato escluso ( 1 )
) ;
) ;
) ;
// Crea l'output grafico
Bivariato ( Y ( : Ln diametro esterno 600 ) , X ( : Tempo ) , Raggruppa per ( : BENE ) , Linea adatta ( 1 ) ) ;
Ri: Ho bisogno di aiuto per lo scripting - Adattamento lineare dove la pendenza è maggioreJim,
Meraviglioso grazie! Probabilmente non l'ho chiarito. Questa è la mia prima incursione nello scripting. Apprezzo l'aiuto,
Nathan
Ri: Ho bisogno di aiuto per lo scripting - Adattamento lineare dove la pendenza è maggioreIl mio errore nel pensare che ciascuno dei diversi valori Well fosse in colonne diverse.Non sarà un grande progetto modificare lo script per soddisfare le tue esigenze.Non sarò in grado di raggiungerlo fino a domani pomeriggio, ma te lo farò avere allora.
Ri: Ho bisogno di aiuto per lo scripting - Adattamento lineare dove la pendenza è maggioreJim,
Grazie per la risposta e per i pensieri! Sono stato in grado di modificare lo script da applicare al mio tavolo ed eseguirlo. Tuttavia, in realtà ho bisogno che la linea sia adatta per ogni curva, quando ogni curva viene tracciata con il tempo come asse x. Quindi devo selezionare 10 punti contigui (contigui nel tempo) che producono la pendenza maggiore. Mi scuso se non sono stato chiaro al riguardo. Fondamentalmente se ci sono 10 minuti tra ogni punto, sto cercando il periodo di 100 minuti che ha la maggiore pendenza della linea.
Ecco un'istantanea delle mie schede tecniche. Fondamentalmente nella colonna "Bene" ci sono 96 identificatori di combinazioni di lettere e numeri. Ogni identificatore ha circa 140 righe. Quindi traccio "Time [hrs]" sulla x e "OD 600" sulla y, "Bene" nella casella By. Questo aiuta?

Ecco la finestra di dialogo:

Grazie mille per l'aiuto!
~Nathan
Ri: Ho bisogno di aiuto per lo scripting - Adattamento lineare dove la pendenza è maggioreEcco uno script che credo farà quello che vuoi.Viene impostato come esempio utilizzando la tabella dati JMP Sample chiamata Big Class.Tuttavia, se si punta semplicemente lo script alla tabella di dati su cui si desidera eseguire e si modifica Y Var = "age"; alla colonna Y contro cui vuoi correre, dovresti ottenere quello che vuoi.Ci sono 2 presupposti con lo script.....il primo è che tutte le colonne continue numeriche nella tabella dei dati devono essere analizzate, e il secondo presupposto è che i dati nelle colonne siano ordinati in base alla variabile X.In caso contrario, lo script può essere modificato per gestire tale situazione.Aggiungerà solo più tempo di elaborazione Ho cambiato lo script per fare l'ordinamento.
I nomi predefiniti sono qui ( 1 ) ;
// apre la tabella dei dati
dt = Aprire ( "$SAMPLE_DATA/Classe grande.jmp" ) ;
Y Var = "età" ;
// ottiene i dati nelle matrici
ColList = dt << ottenere i nomi delle colonne ( continuo , corda ) ;
// Elimina la variabile Y dall'elenco
ColList = Rimuovere ( ColList , Contiene ( ColList , Y Var ) , 1 ) ;
// Imposta gli elenchi per contenere i 10 punti dati determinati con la massima pendenza
I migliori dati = {} ;
Miglior Ys = {} ;
Nomi di colonna = {} ;
bestbeta = 0 ;
startrow = 0 ;
// Passa attraverso le colonne
Per ( io = 1 , io <= N articoli ( ColList ) , io ++,
// Ordina i dati per assicurarti che siano in X crescente
dt << ordinare ( di ( Collista [ io ] ) , ordine ( ascendente ) , sostituire la tabella ( 1 ) ) ;
voi = Colonna ( Y Var ) << getValues ;
xall = ( Colonna ( dt , collistare [ io ] ) << getValues ) ;
Per ( K = 1 , K <= N righe ( xall ) - 10 , K ++,
X = xall [ K :: K + 9 ] ;
X = J ( Riga N ( X ) , 1 , 1 ) || X ;
si = voi [ K :: K + 9 ] ;
// calcoli di regressione
xpxi = Inverso ( X ` * X ) ;
beta = xpxi * X ` * si ;
Se ( Addominali ( beta [ 2 ] ) > bestbeta ,
bestbeta = Addominali ( beta [ 2 ] ) ;
startrow = K ;
) ;
) ;
I migliori dati = I migliori dati || Come Lista ( xall [ startrow :: startrow + 9 ] ) ;
Miglior Ys = Miglior Ys || Come Lista ( voi [ startrow :: startrow + 9 ] ) ;
Per ( K = 1 , K <= 10 , K ++,
Inserire ( Nomi di colonna , ColList [ io ] )
) ;
) ;
// Crea la nuova tabella dati con i migliori 10 punti per tutte le colonne
dtinsieme = Nuova Tavola ( "I risultati" ,
Nuova Colonna ( "Nome colonna" , carattere , valori ( Nomi di colonna ) ) ,
Nuova Colonna ( "Y" , valori ( Miglior Ys ) ) ,
Nuova Colonna ( "Dati" , valori ( I migliori dati ) )
) ;
// Crea l'output grafico
dtinsieme << colore per colonna ( : nome della colonna ) ;
Bivariato ( Y ( : Y ) , X ( : Dati ) , Raggruppa per ( : Nome colonna ) , Linea adatta ( 1 ) ) ;