Hallo zusammen, im Namen von Elliot und mir. In dieser Präsentation zeigen wir Ihnen, wie wir bei Illumina die Datenverarbeitung in JMP automatisieren, um unsere Produktentwicklung zu beschleunigen. Zunächst stellen wir Ihnen die Produktentwicklung bei Illumina, unser Unternehmen und unsere Vorgehensweise vor. Anschließend zeigen wir, wie die automatisierte Datenverarbeitung in diesen Prozess integriert ist, geben ein Beispiel für unseren typischen Workflow und fassen die wichtigsten Erkenntnisse zusammen.
Illumina ist allgemein als Unternehmen bekannt, das Geräte für die Genomik entwickelt und herstellt. Heute verstehen wir uns als Anbieter von Lösungen und Plattformen für verschiedene Omics-Bereiche wie Genomik, Transkriptomik und Proteomik. Unser Flaggschiffprodukt, ein Hochdurchsatz-System, ist die NovaSeq X-Serie, die wir 2023 auf den Markt gebracht haben. Die Schlüsseltechnologie der NovaSeq X ist die XLEAP-Technologie.
Eine der wichtigsten Eigenschaften der XLEAP-Technologie ist, dass wir im Vergleich zu unserer vorherigen Generation von Hochdurchsatzinstrumenten eine Reduzierung des Reagenzienvolumens um etwa 90 % erreicht haben, sowohl beim Verpackungsmaterial als auch beim Aufwand für die Verwaltung und Lagerung seitens des Kunden.
Dies war möglich, da hier keine Reagenzien mit Trockeneis oder Kühlakkus versendet werden. Die Reagenzien werden in einem einzigen Karton transportiert, wodurch der Kunde sich den Aufwand für die Entsorgung und das Management von Verpackungen, Trockeneisverpackungen und ähnlichen Materialien spart. In diesem Karton erhält der Kunde eine Durchflusszelle, die pro Durchlauf etwa 300 Zyklen mit jeweils 25 Milliarden Messungen durchführen kann.
Für die Entwicklung dieser Instrumente schätzten wir, dass etwa 5.000 dieser Durchflusszellen betrieben werden mussten. Bei jedem Betrieb muss das Instrument mit einer Kartusche befüllt werden, die alle Reagenzien enthält – etwa 20 verschiedene Reagenzien, die jeweils mithilfe analytischer Tests und anschließender Sequenzierung entwickelt wurden. An dieser Stelle kommt die automatisierte Datenverarbeitung zum Einsatz.
Wir haben hier die Anwendung analytischer Assays zur Reagenzienentwicklung veranschaulicht. Wie Sie wissen, führt der Wissenschaftler bei einem plattenbasierten Assay das Experiment durch, extrahiert die Daten, reduziert und analysiert sie – Schritt für Schritt, durch Kopieren und Einfügen, bis ein Bericht fertig ist. Anschließend können Schlussfolgerungen gezogen und mit dem nächsten Experiment fortgefahren werden. Dieses Verfahren lässt sich beliebig oft wiederholen oder durch die Nutzung von JavaScript realisieren.
Generieren Sie ein Skript, das Datenextraktion, Datenreduktion und Datenverarbeitung automatisiert und so iterativ wiederholte Analysen in wiederkehrenden Experimenten ermöglicht. Dies bietet zahlreiche Vorteile: Erstens spart es Zeit für die Experimentatoren. Zweitens ermöglicht es die iterative Durchführung über mehrere Experimente hinweg, was die Produktentwicklung beschleunigt. Da manuelle Klicks, Kopieren und Einfügen entfallen, sinkt die Fehlerquote. Weniger Fehler bedeuten eine Standardisierung der Abläufe.
Standardisierung ist eine Grundvoraussetzung für reproduzierbare und robuste Prozesse. Dies ist auch für Wissenschaftler ohne umfassende Programmiererfahrung möglich, da sie die Workflow-Builder-Funktion in JMP sowie die Informationen der JMP-Community nutzen können. Nur geringe Programmierkenntnisse sind erforderlich.
Betrachten wir ein Beispiel, wie wir mit dem Workflow Builder eine wiederverwendbare, automatisierte Datenverarbeitung erstellen können, die nur geringe GSR-Kenntnisse erfordert. Bei LUNAR entwickeln wir häufig neue Sequenzierungsreagenzien und benötigen oft einen Test, um deren Aktivität zu messen. Nehmen wir an, wir haben einen Test, bei dem wir ein dunkles Substrat verwenden, unsere Reagenzien testen, um es in ein fluoreszierendes Produkt umzuwandeln, und dieses dann in einem Plattenlesegerät die zeitliche Entwicklung der Fluoreszenzintensität messen.
Typischerweise weist eine solche Reaktion eine Kinetik erster Ordnung auf. Die Bildung des Produkts P lässt sich daher durch die hier dargestellte Gleichung beschreiben, die eine Funktion der Zeit und zweier wichtiger Parameter ist. Wir haben Pₘₐₓ, das die maximale Intensität am Ende des Zeitverlaufs beschreibt, und die Reaktionsgeschwindigkeit k.
Diese Rate ist für uns von besonderem Interesse; wir wollen herausfinden, welches unserer Reagenzien die höchstmögliche Rate aufweist. Normalerweise erhalten wir von unserem Plattenlesegerät eine Software-Rohdatendatei, oft eine Excel-Datei. Anschließend möchten wir die Datenverarbeitung mit JMP automatisieren. Wir möchten diese Excel-Daten importieren und die Hintergrundintensitätsdaten von unseren Messwerten subtrahieren.
Wir möchten eine Exponentialfunktion verwenden, um die Reaktionsgeschwindigkeit k zu bestimmen, und diese Daten anschließend in eine JMP-Tabelle exportieren, die uns eine Zusammenfassung der Ergebnisse liefert. Jetzt öffnen wir JMP und ich zeige Ihnen, wie das geht. Zuerst sehen wir uns aber unsere Excel-Datei an. Das ist eine typische Datei, die wir von einer Plattenlesesoftware im Rohformat erhalten. Wie Sie sehen, enthält sie bereits einige experimentelle Details, die von der Software eingetragen wurden.
Wir haben eine Grafik des Plattenlayouts, und erst ab Zeile 21 finden wir unsere experimentellen Daten. Wir möchten diese öffnen, JMP zur Datenverarbeitung nutzen und eine übersichtliche Zusammenfassung erhalten. Um einen automatisierten Workflow zu erstellen, können wir den sogenannten Workflow Builder verwenden, falls wir keine JSL-Kenntnisse besitzen. In allen Beispielen verwenden wir die Basisversion von JMP 18. Wir führen die Beispiele in einem JMP-Projekt durch, um alles übersichtlich darzustellen. Sie können diese Aufgaben aber auch in der Standardversion von JMP ausführen.
Als Erstes gehen wir auf „Neu“ und dann auf „Neuer Workflow“. Dies ist die Workflow-Plattform. Wichtig ist: Bevor Sie mit der Aufnahme beginnen, klicken Sie auf diesen roten Button. Jeder einzelne Schritt wird nun als separater Schritt gespeichert und mit einem entsprechenden Skript versehen. Am Ende können Sie diese Schritte zu einem Skript zusammenfügen und verwenden.
Wir möchten hier unsere Excel-Datei importieren, also öffnen wir sie. Wie ich Ihnen bereits gezeigt habe, beginnen die Daten nicht in der ersten Zeile. Hier können wir den Anfang und das Ende der Daten festlegen, um sie zu importieren. Wenn ich jetzt auf „Importieren“ klicke, wird dieser Schritt in den Workflow-Schritten unseres Workflow-Builders gespeichert. So sehen die Daten aus: Wir haben die Uhrzeit, verschiedene Beispiele und den Hintergrund.
Um unsere Berechnungen durchzuführen, fügen wir eine neue Spalte hinzu, die wir „Pred“ (für Vorhersage) nennen. Wir werden vorhersagen, wie sich die Werte im Laufe der Zeit entwickeln könnten, indem wir die Formel verwenden, die ich Ihnen auf der Folie gezeigt habe. Wir haben hier unsere beiden Variablen. Wir haben Startwerte für die Anpassungen festgelegt.
Wenn Sie Ihre aktuelle Aktivität – Golfen und Erkunden – jederzeit unterbrechen möchten, klicken Sie einfach erneut auf den roten Button und probieren Sie es aus. Ihre Aktionen werden nicht als zusätzlicher Schritt gezählt. Schauen wir uns beispielsweise an, wie die Daten aktuell aussehen. Wenn wir zum Graph Builder gehen und unsere Daten dort erneut importieren, sehen wir uns an, wie sie im Rohformat aussehen.
Sie sehen hier unseren Hintergrundwert von etwa tausend RFU-Einheiten, und unsere Vorhersageantwort beginnt bei null. Wir müssen unsere Messwerte normalisieren und den Hintergrundwert entfernen. Dazu ist noch eine weitere Verarbeitung nötig. Diese Schaltflächen sind sehr hilfreich. Um zum Anfang zurückzukehren, klicken Sie auf die Schaltfläche „Zurücksetzen“. Sie gelangen dann wieder dorthin, und mit einem Klick auf „Wiedergabe“ können wir die Aufzeichnung an der Stelle fortsetzen, an der wir sie zuletzt gestoppt haben.
Bevor wir weitere Schritte aufzeichnen, müssen wir erneut auf die Schaltfläche „Aufzeichnen“ klicken. Wir müssen die Hintergrundwerte subtrahieren. Am besten geht das, indem wir die Spalten mit den Beispielwerten übereinanderlegen. Wir erstellen eine neue Tabelle, in der wir diese Werte zusammenführen, und nennen die Datenspalte „RFU“ (Fluoreszenzeinheit) und die Spalte mit dem Namen „Probe“.
Als Nächstes müssen wir die Differenz zwischen unserem Hintergrundsignal und dem Signal unserer Proben ermitteln. Am einfachsten geht das, indem wir diese beiden Spalten markieren. Mit einem Rechtsklick können wir eine neue Formelspalte erstellen. Unter „Kombinieren“ finden wir die Differenz dieser beiden Spalten. Es gibt zwei Optionen: die Differenz in umgekehrter Reihenfolge und die Differenz in umgekehrter Reihenfolge. Man muss es ausprobieren, um die richtige Option zu finden. Würden wir jetzt die falsche wählen, erhielten wir negative Werte. Wie Sie sehen, haben wir den Hintergrund erfolgreich von unseren Proben subtrahiert.
Jetzt können wir die Anpassung durchführen, um die Geschwindigkeitskonstante zu bestimmen. Wir gehen zu „Analysieren“ und dann zu „Spezielle Modellierung“. Wir passen ein nichtlineares Modell an und fügen unsere Vorhersageformel aus der Spalte „X-Vorhersageformel“ hinzu. Wie Sie sehen, wurde die Formel, die wir als Spaltenattribut hinzugefügt haben, für das angepasste Modell bereitgestellt. Unsere um den Basiswert bereinigten Stichprobendaten dienen als Zielgröße. Da wir mehrere Stichproben haben, müssen wir die Anpassung für jede Stichprobe einzeln durchführen.
Wenn wir auf OK klicken, öffnet sich die Plattform für nichtlineare Anpassung. Hier sehen wir, dass für jede Probe eine separate Anpassung verfügbar ist. Die dicke, schwarze Linie stellt unsere experimentellen Daten dar. Die dünne Linie ist unsere Vorhersageformel, die als Ausgangspunkt dient. Wir werden die beiden Variablen iterativ anpassen, bis wir eine passende Anpassung erhalten. Wie bei allen Plattformen in JMP können Sie mehrere Aktionen gleichzeitig ausführen, indem Sie die Strg-Taste gedrückt halten und auf „Start“ klicken. Dadurch wird die Zielfunktion für jede Probe iterativ mithilfe einer Vorhersageformel angepasst.
Man sieht nun, dass die dünne Linie über der dicken Linie liegt und wir eine Konvergenz in unserer Anpassung erreicht haben. Hier sind unsere Schätzwerte für die Variablen Pₘₐₓ und k. Diese möchten wir nun in einer Übersichtstabelle zusammenfassen. Mit einem Rechtsklick und der Auswahl von „Kombinierte Datentabelle erstellen“ werden alle Variablendaten aus diesen Anpassungen extrahiert. Da wir nur an den Geschwindigkeitskonstanten interessiert sind, bereinigen wir die Daten im Rahmen der Datenverarbeitung noch etwas.
Wir möchten alle übereinstimmenden Zellen für Pₘₐₓ auswählen. Da Pₘₐₓ für uns nicht relevant ist, können wir diese Zeilen entfernen. Auch diese Tabellenspalte benötigen wir nicht unbedingt, und da wir wissen, dass der Parameter k ist, können wir sie ebenfalls schließen und bereinigen.
Wir haben unsere Schätzwerte, unsere Geschwindigkeitskonstanten sowie obere und untere Grenzwerte und die zugehörigen Konfidenzintervalle. Zur besseren Übersichtlichkeit können wir die Schätzwerte neu anordnen, sodass sie zwischen dem unteren und dem oberen Grenzwert liegen. So erhalten wir eine übersichtliche Zusammenfassungstabelle. Angenommen, wir benötigen die anderen Zwischentabellen nicht und möchten sie löschen bzw. schließen, ohne zu speichern. Wir können all diese Schritte hier in unserem Workflow-Builder aufzeichnen. Dies ist das Endergebnis.
Jetzt können wir die Aufzeichnung beenden und alles noch einmal überprüfen, um sicherzustellen, dass es einwandfrei funktioniert. Wir gehen jeden Schritt einzeln durch und prüfen, ob er wie gewünscht abläuft und keine Fehler auftreten. Sie sehen, dass bei jeder erfolgreichen Ausführung ein grünes Häkchen erscheint. Nun sind wir jedoch auf ein Problem gestoßen. Dies tritt häufig auf, wenn eine kombinierte Datentabelle erstellt wird. Dabei wird eine neue Tabelle namens „Ohne Titel“ mit einer Nummer erstellt. Bei jeder Wiederholung dieses Vorgangs wird eine neue Nummer generiert. Das Skript sucht nach einer ganz bestimmten Nummer, die wir beim Erstellen des Workflow-Builders vergeben haben.
Man sieht, dass „Untitled 7“ nicht gefunden wird, daher fragt das Skript, welches verwendet werden soll. Das deutet auf ein kleines Problem hin, das wir bereits erkannt haben. Um unser Skript mehrmals auszuführen, ist etwas manuelle Arbeit nötig. Mit ein paar einfachen Programmieränderungen lässt sich das beheben. Wir können das Skript für jeden Schritt öffnen. Im letzten erfolgreich ausgeführten Schritt definieren wir die Datentabelle als Variable, um nicht mehr auf eine unbenannte Nummer angewiesen zu sein. Nennen wir diese Variable „dt“.
Wir definieren dt als „Aktuelle Datentabelle“. Im nächsten Schritt ersetzen wir jede Zeile, die auf die unbenannte Tabelle verweist, durch unsere neue Variable. Da dies mehrmals vorkommen kann, müssen wir jede unbenannte Tabelle durch dt ersetzen. Nachdem wir all dies implementiert haben, testen wir den Code erneut und prüfen, ob er funktioniert. Dies ist zwar nicht die eleganteste Methode, ermöglicht uns aber, ein automatisiertes Skript zu erstellen, das uns das Schreiben von Code näherbringt.
Wenn wir das Ganze wiederholen, sind wir diesmal erfolgreich? Ich habe hier jemanden übersehen, Person ohne Titel 7. Wir haben das Skript erfolgreich ausgeführt und haben nun unsere Zusammenfassungstabelle. Wir können diesen Workflow speichern oder auf den roten Pfeil klicken und „Exportieren“ > „Im Skriptfenster speichern“ auswählen. Ich hatte ja gesagt, dass wir ein allgemeines, wiederverwendbares Skript benötigen, das von verschiedenen Wissenschaftlern mehrfach verwendet werden kann.
Im Moment ist der Code noch recht spezifisch, da er nur bestimmte Dateien öffnet. Mit einer weiteren Codezeile können wir ihn aber deutlich allgemeiner gestalten. Ich definiere eine Variable F und weise ihr den Wert „Datei auswählen“ zu. Mit diesem Befehl können wir die gewünschte Datei auswählen, indem wir den Dateipfad durch die Variable F ersetzen. Schauen wir uns das Skript an und prüfen wir, ob es jetzt funktioniert.
Wir klicken auf den grünen Pfeil, um das Skript auszuführen. Wir werden aufgefordert, unsere Datei auszuwählen. Mal sehen, ob es funktioniert. Da haben wir's. Es ging so schnell, dass man es kaum bemerkt hat. Aber es hat alle Schritte, die wir für die Zusammenarbeit mit dem Builder geschrieben haben, zügig durchlaufen und uns eine Übersichtstabelle erstellt. So können wir wiederverwendbare Skripte erstellen, die unsere Datenverarbeitung automatisieren. Wir haben gerade einen Prozess, für dessen Demonstration ich vorher 10 Minuten gebraucht habe, in Sekundenschnelle abgeschlossen. Das kann in der Forschung und Entwicklung erhebliche Zeitersparnisse bringen.
Nachdem wir Ihnen gezeigt haben, wie der Workflow generiert wird, sehen wir uns nun ein Beispiel an, in dem der Workflow Daten verarbeitet. Hier betrachten wir einen Enzymaktivitätstest. Wie bereits erwähnt, liefert dieser Enzymaktivitätstest ein Fluoreszenzsignal. Die Aufgabe des Wissenschaftlers besteht in diesem Fall darin, eine Testplatte vorzubereiten. Die Testplatte enthält in Gelb die verschiedenen Proben, die analysiert werden. Jede Probe wird in fünf gleichen Portionen in den Vertiefungen wiederholt.
Anschließend folgt eine Spalte mit Positivkontrollen. Anhand dieser Informationen wird der Pₘₐₓ-Parameter für die Anpassung ermittelt. Es gibt Negativkontrollen, wie sie in jedem guten Experiment vorhanden sein sollten, sowie eine Spalte namens „dt“, die den Fluoreszenzwert vor Reaktionsbeginn liefert. Dies ermöglicht die Bestimmung des Basislinienrauschens, das subtrahiert werden kann, um die Daten auf den Nullpunkt der y-Achse auszurichten. Damit ist die Platte erstellt. Sie wird an ein Plattenlesegerät übergeben, das die Reaktion startet, die Platte verarbeitet, Fluoreszenzdaten generiert und diese in einer Excel-Datei speichert. Parallel dazu hat der Benutzer eine Proben-ID-Tabelle mit den Informationen zu jeder Probe ausgefüllt.
An dieser Stelle kommt die automatisierte Pipeline zum Einsatz. Sie importiert die Excel-Daten und führt sie in der Proben-ID-Tabelle zusammen, sodass jede Bohrung der richtigen Probe zugeordnet wird. Es erfolgt eine Zeit- und Antwortnormalisierung, sodass die Zeitverläufe bei Zeitpunkt null und am Nullpunkt der y-Achse beginnen. Anschließend wird die exponentielle Anpassung gemäß der zuvor beschriebenen Kinetik durchgeführt. Die Reaktionsgeschwindigkeit wird extrahiert und über fünf Läufe gemittelt. Der abweichende Lauf wird ausgeschlossen, sodass sich ein endgültiges N von 4 ergibt.
Anschließend wird ein statistischer Test, beispielsweise in diesem Fall eine ANOVA, durchgeführt, um die Ergebnisse der verschiedenen Proben zu vergleichen. Zusätzlich wird zu Beginn des Prozesses ein Ordner namens „Prozessprotokoll“ erstellt. In diesem Ordner werden alle Zwischenschritte der Pipeline protokolliert. Dies erleichtert dem Wissenschaftler die Fehlersuche, falls die automatisierte Pipeline nicht funktioniert.
Das Ergebnis besteht im Wesentlichen darin, die Rohdaten iterativ in verständliche Ergebnisse umzuwandeln, wie sie in diesem Beispiel durch eine ANOVA dargestellt werden. Beim ersten Durchlauf dieses Verfahrens benötigt der Experimentator etwa 45 Minuten, um die Datenreduktionspipeline zu erstellen. Sobald das Skript jedoch fertig ist, kann die Datenreduktionspipeline in etwa einer Minute ausgeführt werden.
Wenn wir bedenken, dass wir über hundert Platten benötigten, um eines der Reagenzien in der Reagenzkartusche zu entwickeln, die ich zu Beginn des Seminars gezeigt habe, dann können Sie sich leicht vorstellen, dass wir mindestens 75 Stunden unserer Entwicklungspipeline eingespart und die Entwicklung der XLEAP-Technologie beschleunigt haben. Ich wechsle nun zurück zu JMP und zeige Ihnen, wie die Pipeline für die Enzymaktivitätsdaten funktioniert. Ich führe das Skript aus. Das Skript fordert mich auf, den Ordner und die Datei wie zuvor gezeigt auszuwählen.
So, die Datei wurde geöffnet und exportiert. Wir haben nun zusätzliche Daten aus der Datei. Insbesondere die Werte in Spalte 2 werden verwendet. Es handelt sich dabei um die Fluoreszenzwerte zum Zeitpunkt null, die zur Erzeugung eines Hintergrunds und zur Ausrichtung aller Zeitreihen auf den Nullpunkt der y-Achse dienen. Gleich werden diese Daten exportiert und normalisiert. Wir erhalten nun eine Tabelle mit normalisierten Zeitreihen. In jede dieser Tabellen wurde das Signal zum Zeitpunkt null (ca. 1 %) eingefügt. Anschließend werden die Daten gestapelt.
Es wird ein Vorhersagemodell hinzugefügt. Das Modell berücksichtigt natürlich jeden Zeitpunkt und jede Vertiefung der Platte, die erwartete Fluoreszenz und vergleicht sie mit den tatsächlichen Messwerten. Gleich öffnet sich die Benutzeroberfläche für die nichtlineare Anpassung und ermöglicht die automatische Anpassung der einzelnen Datenzeitverläufe. Wie Elliot bereits gezeigt hat, werden die verschiedenen Zeitverläufe nun auf dem Bildschirm angezeigt. Die Anpassung erfolgt in einer Sekunde automatisch.
Der Reaktionsgeschwindigkeitsparameter k wird extrahiert und tabellarisch dargestellt. Die Anpassung erfolgte über alle bereitgestellten Zeitreihen, die Daten wurden extrahiert, und das Skript meldet nun, dass bereits Daten im ANOVA-Format vorliegen. Ich bitte um Verständnis, dass die Zeitlupenwiedergabe des Skripts etwa eine Minute dauerte, um Ihnen die einzelnen Schritte zu zeigen. Sobald die Zeitlupe beendet ist, läuft das Skript wie eben gezeigt blitzschnell durch, und die Daten sind bereit.
Unsere Präsentation vermittelt zwei Kernbotschaften. Erstens: Wir sollten intelligenter, nicht härter arbeiten. Wir hoffen, wir konnten Sie davon überzeugen, dass der Einsatz von JMP-Skripten und die automatisierte Datenverarbeitung Ihre F&E-Produktivität deutlich steigern können. Wir können mühsame Aufgaben automatisieren, sodass Ihre Wissenschaftler und Ingenieure mehr Zeit haben, die Bedeutung der Ergebnisse zu analysieren und neue Produkte und Prozesse zu entwickeln. Wir hoffen außerdem, Sie davon überzeugt zu haben, dass nur geringe Vorkenntnisse erforderlich sind.
In dem Beispiel, das ich vorhin gezeigt habe, benötigten wir nur zwei Zeilen JSL-Code, um ein wiederverwendbares Skript zu erstellen. Der JMP Workflow Builder ist eine echte Innovation, mit der Sie eigene Skripte schreiben können, ohne JSL-Experte sein zu müssen. Abschließend möchten wir uns bei allen Kollegen für ihre Beiträge bedanken, insbesondere bei Steve Mason aus dem Chemie-Team. Vielen Dank fürs Zuhören!
Danke schön.