Ciao a tutti, a nome mio e di Elliot. In questa presentazione, mostreremo come utilizziamo l'automazione dell'elaborazione dei dati in JMP in Illumina per accelerare la nostra pipeline di sviluppo prodotti. In questa presentazione, la prima cosa che faremo sarà presentare la pipeline di sviluppo prodotti in Illumina, chi siamo e come realizziamo i nostri prodotti. Poi mostreremo come l'elaborazione automatizzata dei dati si inserisce in questo contesto, forniremo un esempio del nostro flusso di lavoro tipico e concluderemo con i principali concetti chiave.
Illumina è generalmente nota come un'azienda che genera e produce strumenti per la genomica. Oggi possiamo essere definiti un fornitore di soluzioni e piattaforme per molteplici tipi di omica, genomica, trascrittomica e proteomica. Il nostro strumento di punta, ad alta produttività, è la serie NovaSeq X, lanciata nel 2023. La tecnologia chiave di NovaSeq X è la tecnologia XLEAP.
Una delle caratteristiche principali della tecnologia XLEAP è che, rispetto al tipo di volume di reagente necessario per far funzionare uno strumento ad alta produttività nella nostra precedente iterazione di strumenti ad alta produttività, grazie a tale tecnologia abbiamo ottenuto una riduzione di circa il 90% sia nel packaging che negli sforzi di gestione e stoccaggio da parte del cliente.
Ciò è stato possibile perché, in questo caso, nessun reagente viene spedito utilizzando ghiaccio secco o un imballaggio contenente ghiaccio, quindi il reagente viaggia in un'unica scatola e non c'è alcuno sforzo da parte del cliente per smaltire e gestire l'imballaggio, l'imballaggio con ghiaccio secco e imballaggi simili. All'interno di quella scatola, il cliente riceve questo tipo di cella di flusso in grado di eseguire circa 300 cicli per ciclo con 25 miliardi di misurazioni per ciclo.
Per sviluppare questi strumenti, stimiamo che sia stato necessario utilizzare circa 5.000 di queste celle a flusso. Ogni volta che le utilizziamo, dobbiamo caricare lo strumento con una cartuccia contenente tutti i reagenti, circa 20 reagenti unici, ognuno dei quali è stato sviluppato utilizzando test analitici e poi sequenziato. È qui che entra in gioco l'elaborazione automatizzata dei dati.
Abbiamo qui esemplificato l'uso di test analitici per sviluppare reagenti. Come sapete, in un test su piastra, lo scienziato esegue l'esperimento, estrae i dati, esegue la riduzione dei dati, l'analisi e l'elaborazione dei dati, clic dopo clic, copia e incolla dopo copia e incolla finché non è pronto un report. A quel punto, si possono trarre conclusioni e passare all'esperimento successivo. È possibile ripetere la stessa procedura più e più volte o sfruttare le funzionalità di JavaScript.
Generare uno script che automatizzi l'estrazione, la riduzione e l'elaborazione dei dati, consentendo poi di eseguire in modo iterativo un numero sempre maggiore di analisi di questo tipo su esperimenti ripetitivi, il che ovviamente comporta molteplici vantaggi. Innanzitutto, fa risparmiare tempo allo sperimentatore. In secondo luogo, consente di eseguire queste analisi in modo iterativo su più esperimenti, accelerando così la pipeline di sviluppo del prodotto. Inoltre, eliminando la necessità di operazioni di clic e copia e incolla da parte dell'operatore, si verificano meno errori. Avere meno errori significa poter standardizzare le nostre procedure.
La standardizzazione è fondamentale per ottenere processi riproducibili e robusti. Questo è possibile anche per gli scienziati che non hanno molta esperienza con la programmazione, poiché possono sfruttare la funzionalità Workflow Builder di JMP e le informazioni disponibili nella community di JMP. È richiesta un'esperienza minima di programmazione.
Facciamo un esempio di come possiamo realizzare un'elaborazione dati automatizzata e riutilizzabile utilizzando il Workflow Builder, con una conoscenza minima del GSR. In LUNAR sviluppiamo spesso nuovi reagenti di sequenziamento e spesso dobbiamo sviluppare un test per misurarne l'attività. Supponiamo di avere questo test in cui prendiamo un substrato scuro e testiamo i nostri reagenti per convertirlo in un prodotto fluorescente, quindi lo mettiamo su un lettore di piastre e misuriamo l'andamento temporale di questa risposta di questo prodotto fluorescente in funzione del tempo.
È tipico che una reazione di questo tipo abbia una cinetica del primo ordine, e quindi la formazione di un prodotto P può essere descritta da questa equazione, che è funzione del tempo e di due parametri importanti. Abbiamo il nostro Pₘₐₓ, che descrive l'intensità massima che otteniamo alla fine dell'andamento temporale, e poi abbiamo anche la nostra velocità k.
Questa velocità è ciò che ci interessa davvero, ovvero vedere quale dei nostri reagenti ha la velocità più alta possibile. In genere, riceviamo dal nostro lettore di piastre un file di dati grezzi, un software. Spesso si tratta di un file Excel, e poi vogliamo usare JMP per automatizzare l'elaborazione dei dati. Ciò che vorremmo fare è importare questi dati Excel. Dobbiamo sottrarre i dati sull'intensità di fondo dalle nostre risposte.
Vogliamo eseguire un adattamento esponenziale per determinare la velocità di reazione k, e poi vogliamo estrarre i dati in una tabella JMP che ci fornisca un riepilogo dei risultati. Ora andremo in JMP e vi mostrerò come farlo. Ma prima, andiamo al nostro file Excel. Questo è un tipico tipo di file che potremmo ottenere da un software di lettura di piastre nel suo formato raw. Come potete vedere, abbiamo alcuni dettagli sperimentali inseriti dal software.
Abbiamo un grafico del layout della piastra, e solo alla riga 21 otteniamo i nostri dati sperimentali. Vogliamo poterlo aprire, ottenere un JMP per elaborare i dati e poi ottenere un riepilogo chiaro. Se vogliamo creare un flusso di lavoro automatizzato per questo, e non sappiamo come scrivere codice con JSL, e ottenere uno script, possiamo usare quello che è noto come Workflow Builder. Per tutti i nostri esempi, utilizziamo la versione base di JMP 18. Stiamo eseguendo gli esempi all'interno di un progetto JMP solo per poter mantenere tutto organizzato e ben visibile, ma è possibile eseguire queste attività anche nella versione standard di JMP.
La prima cosa che dobbiamo fare è andare su "Nuovo" e selezionare "Nuovo flusso di lavoro". Questa è la piattaforma del flusso di lavoro e la cosa importante da sapere è che prima di iniziare a registrare, quello che fai, clicca su questo pulsante rosso qui, e ora ogni singolo passaggio che esegui verrà salvato come passaggio e avrà uno script corrispondente scritto per te. Alla fine, puoi eseguire questi passaggi e unirli in uno script che può essere utilizzato.
Vogliamo importare il nostro file Excel qui, quindi lo apriremo. Come vi ho mostrato prima, i dati non iniziano sulla prima riga, e qui possiamo specificare dove iniziano e dove finiscono i dati, in modo da poterli importare. Quando clicco su "Importa ora", questo passaggio verrà registrato nei passaggi del flusso di lavoro della scheda Generatore di flussi di lavoro, e questo è l'aspetto dei dati. Abbiamo il nostro tempo, abbiamo diversi campioni e abbiamo il nostro background.
Per eseguire i nostri bit, dobbiamo aggiungere una nuova colonna, che chiameremo Pred per la previsione. Quello che faremo è prevedere come potrebbe apparire in funzione del tempo usando la formula che vi ho mostrato nella diapositiva. Qui abbiamo le nostre due variabili. Quello che abbiamo fatto è stato specificare alcuni valori iniziali e quelli per i fit da eseguire.
Ora, se vuoi mettere in pausa quello che stai facendo in qualsiasi momento, giocare a golf ed esplorare, puoi semplicemente cliccare di nuovo sul pulsante rosso e poi puoi giocare un po'. Qualunque cosa tu faccia non verrà aggiunta come passaggio. Diciamo, ad esempio, diamo un'occhiata a come appaiono i dati ora. Se andiamo su Graph Builder e reimportiamo i nostri dati lì, vediamo come appaiono nella loro forma grezza attuale.
Come potete vedere, abbiamo il nostro background, che si aggira intorno alle mille unità RFU, e la nostra risposta di previsione parte da zero. Come potete vedere, quello che dobbiamo fare è normalizzare i nostri campioni e rimuovere lo background. Prima dobbiamo elaborare ulteriormente. Questi pulsanti sono molto utili. Se volete tornare all'inizio, potete cliccare su questo pulsante "Reset". Vi riporterà lì, e poi cliccando su "Play", potremo tornare al punto in cui eravamo quando abbiamo interrotto la registrazione.
Ora, prima di registrare altri passaggi, dobbiamo assicurarci di cliccare di nuovo sul pulsante Registra. Quello che dobbiamo fare è sottrarre gli sfondi. Il modo migliore per farlo qui è impilare queste colonne campione. Creeremo una nuova tabella in cui le impileremo insieme, e chiameremo la colonna dati RFU, che è l'unità di fluorescenza, ed etichetteremo la colonna come campione.
Quello che dobbiamo fare ora è trovare la differenza tra il nostro segnale di fondo e il segnale dei nostri campioni. Il modo più semplice per verificarlo è evidenziare queste due colonne. Cliccando con il tasto destro del mouse, possiamo creare una nuova colonna formula. In "Combina", possiamo trovare la differenza tra queste due colonne. Ci sono due opzioni. C'è la differenza in ordine inverso. Trovo che sia un processo di tentativi ed errori per sapere quale scegliere. Se dovessimo scegliere quella sbagliata ora, avremmo valori negativi. Come potete vedere, abbiamo ora sottratto con successo il fondo dai nostri campioni.
Ora possiamo eseguire il nostro fitting per calcolare la costante di velocità. Andiamo su Analizza, Modellazione specializzata. Eseguiamo il fitting di un modello non lineare e vogliamo aggiungere la nostra formula di previsione dalla colonna alla Formula Predittiva X. Come potete vedere, ha fornito la formula che abbiamo aggiunto come attributo di colonna per il modello di fitting. I dati del campione di base sottratti saranno la risposta. Poiché abbiamo campioni multipli, dobbiamo effettuare il fitting per campione.
Se clicchiamo su OK, apriremo la nostra piattaforma Nonlinear Fit e vedremo che abbiamo a disposizione un fit diverso per ogni campione. La linea spessa e nera rappresenta i nostri dati sperimentali. La linea sottile è la nostra formula di previsione, che fornisce un punto di partenza; qui modificheremo iterativamente le due variabili fino a ottenere un fit. Come in tutte le piattaforme di JMP, se si desidera eseguire più operazioni contemporaneamente, tenendo premuto il tasto Ctrl e cliccando su "Go", la nostra risposta verrà adattata iterativamente utilizzando una formula di previsione per ciascuno dei nostri campioni.
Ora potete vedere che la linea sottile è sovrapposta a quella spessa e abbiamo ottenuto una convergenza nel nostro fit. Ecco le nostre stime sulle variabili Pₘₐₓ e k. Quello che vogliamo fare ora è inserirle in una tabella riepilogativa. Se clicco con il tasto destro del mouse e vado a creare una tabella dati combinati, questa estrarrà tutti i dati delle variabili da questi fit. Siamo interessati solo alle costanti di velocità, quindi vogliamo ripulirle un po' ora come parte della nostra elaborazione dei dati.
Vogliamo selezionare tutte le celle corrispondenti per Pₘₐₓ. Non siamo interessati a Pₘₐₓ, quindi possiamo rimuovere quelle righe. Anche in questo caso, non abbiamo necessariamente bisogno di questa colonna della tabella qui, e sappiamo che il parametro è k, quindi possiamo anche chiuderla e ripulirla.
Abbiamo le nostre stime, le nostre costanti di velocità, gli importi massimo e minimo, gli intervalli di confidenza massimo e minimo. Per una migliore visualizzazione, potremmo voler riordinare le stime, in modo che si trovino tra il minimo e il massimo, ottenendo così una bella tabella riepilogativa. Supponiamo poi di non aver bisogno di tutte le altre tabelle intermedie e di volerle eliminare e chiudere senza salvare. Possiamo registrare tutti questi passaggi nel nostro Workflow Builder qui, e questo è il risultato finale che abbiamo.
Ora possiamo interrompere la registrazione e quello che dobbiamo fare è semplicemente controllare e assicurarci che tutto funzioni correttamente. Possiamo esaminare ogni passaggio e assicurarci che faccia ciò che vogliamo e che non ci siano errori. Come potete vedere, ogni volta che viene eseguito correttamente, otteniamo un segno di spunta verde, ma ora abbiamo riscontrato un problema. Questo è abbastanza comune quando si crea una tabella di dati combinati. Crea una nuova tabella chiamata "Senza titolo" con un numero. Ogni volta che questo viene ripetuto, prolifera un numero. Lo script sta cercando un numero molto specifico da quando abbiamo creato il Workflow Builder.
Come puoi vedere, non riesce a trovare "Untitled 7", quindi ti chiede quale vuoi usare. Questo ci mostra un piccolo problema che abbiamo incontrato. Dobbiamo fare un po' di lavoro manuale per far funzionare il nostro script più volte. Con un po' di codice molto semplice, possiamo risolvere il problema. Possiamo aprire lo script per ogni passaggio. Se torniamo all'ultimo passaggio eseguito correttamente, quello che vogliamo fare è definire questa tabella dati come una variabile, in modo da non fare affidamento su un numero senza titolo, quindi chiamiamola dt.
Diciamo che dt è uguale a Current Data Table. Quello che dobbiamo fare è procedere con ogni passaggio successivo. Ovunque venga richiamata la tabella senza titolo, vogliamo sostituirla con la nostra nuova variabile. Questo potrebbe verificarsi più volte, quindi dobbiamo solo andare a modificare ogni tabella senza titolo in dt. Abbiamo scritto tutto, quindi lo testeremo di nuovo e vedremo se funziona. Questo potrebbe non essere il modo più elegante di farlo, ma ci permette di creare il nostro script automatizzato su come scrivere codice.
Se ripetiamo questa operazione, avremo successo questa volta? Ne ho saltato uno, la persona Senza Titolo 7. Abbiamo eseguito correttamente lo script e ora abbiamo la nostra tabella di riepilogo. Possiamo salvare questo flusso di lavoro oppure cliccare sulla freccia rossa e selezionare Esporta, Salva nella finestra Script. Ora, ho detto che vogliamo avere uno script generale riutilizzabile che possa essere utilizzato più volte da diversi scienziati.
Al momento, è ancora piuttosto specifico perché apre file molto specifici. Con solo un'altra riga di codice, possiamo renderlo molto più generale. Definirò una variabile F e inserirò semplicemente F uguale a pick file. Questo comando ci permetterà di selezionare quale file utilizzare se sostituiamo questo percorso specifico con la variabile F. Diamo un'occhiata allo script e vediamo se ora funziona.
Clicchiamo sulla freccia verde per eseguire lo script. Ci chiede di selezionare il nostro file e di vedere se funziona. Ecco fatto. È stato così veloce che non si è nemmeno visto cosa è successo. Ma ha eseguito rapidamente tutti i passaggi che abbiamo scritto per funzionare con il builder e ci ha fornito una tabella di riepilogo. Questo è un modo per creare script riutilizzabili in grado di automatizzare l'elaborazione dei dati. Abbiamo appena eseguito in pochi secondi un processo che prima mi richiedeva 10 minuti per essere mostrato, e questo può portare a un notevole risparmio di tempo in ricerca e sviluppo.
Ora che vi abbiamo mostrato come generare il flusso di lavoro, vediamo un esempio in cui il flusso di lavoro elabora i dati. Abbiamo qui l'esempio di un test di attività enzimatica. Come abbiamo detto, questi test di attività enzimatica avranno una lettura in fluorescenza. Il compito del ricercatore è quello di preparare in questo caso una piastra di test. La piastra di test contiene in giallo i vari campioni che verranno elaborati. Ogni campione viene ripetuto in numero uguale di cinque nei pozzetti.
Abbiamo poi una colonna con i controlli positivi e queste informazioni vengono utilizzate per estrarre il parametro Pₘₐₓ per il fitting. Controlli negativi, come dovrebbero esserci in ogni buon esperimento, e una colonna chiamata dt che fornirà la lettura della fluorescenza prima dell'inizio della reazione, consentendo di valutare il rumore di base che può essere sottratto per allineare i dati al punto zero sull'asse y. A questo punto, l'utente ha generato la piastra. La piastra viene passata a un lettore di piastre che consentirà alla reazione di proseguire, la processerà, genererà i dati di fluorescenza e li registrerà in un file Excel. Nel frattempo, l'utente avrà compilato una tabella di ID campione con le informazioni relative a ciascun campione.
È qui che entra in gioco la pipeline automatizzata. Importerà i dati Excel e li combinerà nella tabella degli ID campione, in modo che ogni pozzetto sia associato al campione corretto. Verrà eseguita la normalizzazione temporale e di risposta, in modo che gli andamenti temporali inizino al tempo zero e al punto zero sull'asse y. Verrà eseguito l'adattamento esponenziale seguendo la cinetica appena descritta. Verrà estratta la velocità di reazione, mediata su cinque analisi. L'analisi divergente verrà esclusa, ottenendo un N finale pari a 4.
Verrà quindi utilizzato un test statistico, ad esempio in questo caso un'ANOVA, per confrontare i risultati dei diversi campioni. Un'ulteriore funzionalità è la creazione di una cartella denominata "process dump" all'inizio del processo. In questa cartella verranno registrati tutti i passaggi intermedi della pipeline. Questo aiuterà lo scienziato a risolvere eventuali problemi nel caso in cui la pipeline automatizzata non funzioni correttamente.
In sostanza, l'output consiste nel prendere i dati grezzi e trasformarli in modo iterativo in risultati comprensibili, rappresentati in questo esempio da un'ANOVA. La prima volta che lo sperimentatore adotta questo approccio, possono volerci circa 45 minuti per generare la pipeline di riduzione dei dati. Ma una volta pronto lo script, la pipeline di riduzione dei dati può essere eseguita in circa un minuto.
Se pensiamo che ci sono volute più di cento piastre per sviluppare uno di quei reagenti nella cartuccia di reagenti che ho mostrato all'inizio del seminario, allora potete facilmente immaginare che abbiamo risparmiato almeno 75 ore della nostra pipeline di sviluppo, accelerando lo sviluppo della tecnologia XLEAP. Ora torno a JMP e mostro come funziona la pipeline dei dati sull'attività enzimatica. Sto eseguendo lo script. Lo script mi chiederà di selezionare la cartella e il file come mostrato in precedenza.
Ecco fatto, il file è stato aperto ed esportato. Ora abbiamo alcuni dati aggiuntivi estratti dal file. In particolare, verranno utilizzati quelli nella Colonna 2. Si tratta delle valutazioni di fluorescenza al tempo zero che verranno utilizzate per generare uno sfondo e allineare ogni andamento temporale al punto zero sull'asse y. Tra poco, questo verrà esportato, i dati saranno normalizzati e ora abbiamo una tabella con gli andamenti temporali normalizzati. Su ognuno di essi, abbiamo imposto il segnale al tempo zero, che è circa l'1%, e ora questi dati verranno sommati.
Verrà aggiunto un modello, che è il modello di previsione. Ecco fatto. Il modello ovviamente tiene conto di ogni punto temporale e di ogni pozzetto sulla piastra, del tipo di fluorescenza che ci aspettiamo di leggere e lo confronta con le letture effettive. Tra un attimo, l'interfaccia di adattamento non lineare si aprirà e consentirà l'adattamento automatico di ciascuno di questi andamenti temporali dei dati. Potete vedere i vari andamenti temporali, come mostrato in precedenza da Elliot, apparire sullo schermo. Questi verranno adattati automaticamente in un secondo.
Il parametro della velocità di reazione, k, verrà estratto e tabulato per noi. L'adattamento è stato eseguito su tutti gli andamenti temporali forniti, i dati sono stati estratti e ora lo script mi dice che abbiamo già dati disponibili presentati in formato ANOVA. Se vi rendete conto che ci è voluto circa un minuto per eseguire lo script al rallentatore, il che mi ha permesso di mostrarvi passo dopo passo cosa stava succedendo, una volta rimosso il rallentatore, lo script, così come era mostrato un minuto prima, viene eseguito in pochissimo tempo e i dati sono pronti.
La nostra presentazione ci ha trasmesso due messaggi principali. Il primo è che dovremmo cercare di lavorare in modo più intelligente, non più duro. Speriamo di avervi convinto che l'utilizzo di script JMP e l'elaborazione automatizzata dei dati possono aumentare significativamente la produttività della vostra attività di ricerca e sviluppo. Possiamo automatizzare le attività più noiose, consentendo ai vostri scienziati e ingegneri di dedicare più tempo a riflettere sul significato di tali risultati e a innovare nuovi prodotti e processi. Speriamo anche di avervi convinto che è davvero richiesta un'esperienza minima.
Nell'esempio che ho mostrato in precedenza, ci servivano solo due righe di JSL per creare uno script riutilizzabile. JMP Workflow Builder è una vera svolta che permette di scrivere script personalizzati senza essere esperti di codice JSL. Vorremmo anche concludere ringraziando tutti i nostri colleghi per il loro contributo, in particolare Steve Mason del team di chimica. Grazie a tutti per l'attenzione.
Grazie.