Hallo zusammen. Vielen Dank, dass Sie heute dabei sind. Ich werde heute einen Vortrag über mein Projekt halten, und der Titel lautet: „Von der Entwicklung zum Testen: Die Reise zur Erstellung und Validierung eines JMP-Add-Ins“.
Ein paar Worte zu mir. Ich bin Doktorandin der Mathematik an der Clemson University in den USA. Meine Forschungsschwerpunkte liegen im Bereich Versuchsplanung und Präferenzlernen. Seit Sommer 2024 absolviere ich ein Praktikum im DOE- und Zuverlässigkeitsteam von JMP. Dort habe ich an Projekten im Bereich diskreter Wahlversuche und Softwaretests mitgearbeitet – zwei recht unterschiedliche Gebiete. Das war’s zu mir.
Ich gebe Ihnen einen Überblick über den heutigen Vortrag. Zunächst spreche ich im ersten Teil über die Motivation für die Entwicklung dieses Add-ins, das wir im Sommer erstellt haben. Wir führten Usability-Studien für das JMP-Programm Easy DOE durch und wollten die Präferenzen verschiedener demografischer Gruppen hinsichtlich der Benutzeroberfläche ermitteln. Anschließend stelle ich das Add-in vor und demonstriere seine Funktionsweise. Zum Schluss gehe ich kurz auf das Testen des Add-ins mithilfe des JSL-Unit-Testing-Frameworks ein, um die Anwendung bzw. das Add-in zu validieren.
Hier ist der erste Abschnitt: Die Motivation für die Entwicklung unseres Add-ins. Wie einige von Ihnen vielleicht wissen, gibt es in JMP ein Programm namens Easy DOE. Dieses Programm unterstützt Anwender bei der Planung und Auswertung von Experimenten. Der Easy-DOE-Workflow besteht aus mehreren Komponenten. Zunächst definiert der Experimentator die relevanten Faktoren und Zielgrößen. Anschließend wählt er das Modell aus, mit dem er die erhobenen Daten analysieren möchte. Nach der Modellauswahl entwirft er ein Experiment, das auf diesem Modell basiert.
Sobald sie das Experiment entworfen haben, können sie es durchführen und die gesammelten Daten im Dateneingabefeld eingeben. Nach der Datenerfassung können sie das Modell analysieren, die Daten auswerten und das Modell anpassen. Abschließend können sie das Modell für Vorhersagen und zur Auswahl optimaler Faktoreinstellungen verwenden, falls gewünscht. Zum Schluss können sie einen zusammenfassenden Bericht des Modells einsehen.
Heute möchten wir uns insbesondere den Analyse-Tab genauer ansehen. Wie einige von Ihnen, die Easy DOE bereits genutzt haben, wissen, sieht der Analyse-Tab wie in Abbildung 2 dargestellt aus. Im Sommer wollten wir herausfinden, welche Änderungen an bestimmten Bereichen des Analyse-Tabs vorgenommen werden könnten, um ihn für Experimentatoren und Anwender von Easy DOE benutzerfreundlicher zu gestalten. Wir haben schließlich mehrere Versionen der Benutzeroberfläche vorgeschlagen und wollten wissen, welche davon am beliebtesten ist.
Das UI-Design, so wie wir es entworfen haben, hatte eine faktorielle Struktur. Besonders interessant war für uns die Hover-Hilfe. Diese Hover-Hilfe enthält verschiedene Meldungen, die den Benutzer über statistische Eigenschaften seines Modells informieren. Zu diesen Meldungen in den Hover-Hilfe-Einstellungen gehören die Eingabemeldung (ob ein Term im Modell enthalten ist, gab es in zwei verschiedenen Versionen), die Signifikanzmeldung (ob der Term signifikant ist oder nicht) und die Heritabilitätsmeldung (warum ein bestimmter Term trotz seiner Insignifikanz im Modell enthalten ist).
Oftmals gibt es die sogenannte Vererbungseigenschaft: Wenn ein Interaktionsterm signifikant ist, der Haupteffekt jedoch nicht, wird der Haupteffekt trotzdem berücksichtigt. Ein letzter Faktor dieser Hover-Hilfe-Einstellung war die Position der Hover-Hilfe. Befindet sie sich über einem Konfidenzintervall oder über der Vorschauspalte?
Wir wollten herausfinden, welche dieser Einstellungen die Nutzer am meisten bevorzugten. Wie bereits erwähnt, hatten wir vier Faktoren. Zwei oder drei dieser Faktoren hatten jeweils zwei Ausprägungen, und einer der Faktoren hatte drei Ausprägungen. Somit ergaben sich 24 verschiedene Versionen der Benutzeroberfläche für die Hover-Hilfeeinstellungen.
Ein weiterer Aspekt ist, dass die Nutzer von Easy DOE häufig entweder neu in der Versuchsplanung sind oder nur über mäßige Erfahrung verfügen. Wir haben aber auch erfahrene Anwender, die Easy Doe entweder privat oder in Schulungen einsetzen. Es gibt also unterschiedliche Nutzergruppen. Wir wollten herausfinden, welche Einstellungen für die Hover-Hilfe diese Gruppen bevorzugen, um die Hover-Hilfe optimal an die jeweilige Zielgruppe anzupassen.
Wir wollten dieses Problem mithilfe des Modells der kontextuellen diskreten Wahlversuche angehen. Ich werde kurz erläutern, was dieses Modell ausmacht. Zunächst zum Datenerhebungsprozess. Bei kontextuellen diskreten Wahlversuchen gibt es eine Gruppe von Teilnehmenden und bestimmte Kovariateninformationen über diese Teilnehmenden. Diese Informationen bezeichnen wir beispielsweise als Kovariaten- oder Kontextinformationen. Häufig handelt es sich dabei um demografische Daten der Nutzer.
In diesem Rahmen befragen wir die verschiedenen Teilnehmer mithilfe eines Fragebogens. In jeder Frage werden sie gebeten, zwei oder mehr alternative Designs zu vergleichen und das ihnen bevorzugte auszuwählen. Die Datenerhebung ist recht intuitiv und spiegelt wider, wie Menschen im realen Leben Entscheidungen treffen.
Nun möchte ich kurz auf die Modellierung und Analyse von kontextbezogenen Discrete-Choice-Experimenten eingehen. Nach der Datenerhebung lässt sich ein Nutzenmodell an diese Daten anpassen, das nicht nur die Faktoren des Untersuchungsgegenstands – in unserem Fall die Einstellungen der Hover-Hilfe – berücksichtigt, sondern auch Kontextinformationen der Teilnehmenden. Die Kombination dieser beiden Faktoren ermöglicht es, die Präferenzen verschiedener Nutzergruppen hinsichtlich unterschiedlicher Hover-Hilfe-Einstellungen zu ermitteln. Mithilfe dieses Nutzenmodells lässt sich schließlich herausfinden, welche Hover-Hilfe-Varianten von den einzelnen demografischen Gruppen bevorzugt werden.
Ein wichtiger Bestandteil von kontextbezogenen Discrete-Choice-Experimenten ist deren Gestaltung. Wie wählen wir die Fragen aus, die wir den Teilnehmenden präsentieren? Wenn Sie mit herkömmlichen Discrete-Choice-Experimenten vertraut sind, wissen Sie, dass für eine gute Gestaltung häufig Vorinformationen über die Präferenzen der Nutzenden benötigt werden.
Bei kontextbezogenen Discrete-Choice-Experimenten führen wir zunächst eine sogenannte Screening-Studie durch. Dabei beginnen wir mit einer bestimmten Anzahl von Teilnehmenden, deren Kontext- oder demografische Daten uns vorliegen. Anschließend befragen wir sie zu ihren Präferenzen. Aus den Ergebnissen dieser Screening-Studie entwickeln wir ein Modell, das die Präferenzen der Teilnehmenden charakterisiert. Mithilfe dieses Modells können wir dann die Präferenzen verschiedener demografischer Gruppen analysieren.
Wir können dieses Modell also nutzen, um Bayes'sche Priorverteilungen zu erstellen, mit denen wir Bayes'sche D-optimale Versuchsdesigns für den Fragebogen entwickeln können. Damit können wir Fragebögen erstellen, die auf die jeweilige demografische Gruppe zugeschnitten sind, sodass wir effizienter statistische Informationen von dieser Gruppe gewinnen. Das ist die Methodik, die wir für dieses Problem gewählt haben. Wir wollten statistisch hocheffiziente Fragebögen für unsere Teilnehmer entwickeln, um effizienter Informationen von ihnen zu sammeln und Präferenzen in verschiedenen demografischen Gruppen zu ermitteln.
Ich möchte hier kurz auf die Erstellung dieses Add-Ins eingehen. Für alle, die es noch nicht kennen: JSL steht für JMP Scripting Language. Sie ermöglicht es Benutzern, die Funktionalität von JMP zu erweitern, beispielsweise durch die Durchführung routinemäßiger, mehrstufiger Analysen oder die Anpassung eines bestimmten Modells an täglich generierte Daten. JSL erweitert also die Funktionalität von JMP erheblich. Ein JMP-Add-In ist ein JSL-Skript, das die Funktionalität von JMP erweitert und von anderen JMP-Benutzern heruntergeladen und verwendet werden kann.
Warum haben wir ein JMP-Add-in für unser spezielles Problem entwickelt? Zunächst einmal führten wir mehrere Usability-Studien durch. Wir wiederholten dieselbe Studie – die zur Hover-Hilfe – zu verschiedenen Zeitpunkten. Dabei sammelten wir im Laufe der Zeit immer mehr Daten, die wir zur Optimierung der Versuchsdesigns und der Fragebögen nutzten. Darüber hinaus führten wir auch andere Usability-Studien durch, beispielsweise zu verschiedenen Aspekten der Benutzeroberfläche. Eine dieser Studien untersuchte beispielsweise das Farbschema und die Position der Benachrichtigungen auf der Registerkarte „Analysieren“.
Ein weiterer Grund für die Entwicklung dieses Add-ins war der hohe Aufwand bei der Erstellung kontextbezogener Discrete-Choice-Experimente. Oftmals mussten die a priori Mittelwerte und Kovarianzmatrizen berechnet werden, um für jede Gruppe Bayes'sche D-optimale Versuchspläne zu erstellen. Wir stellten fest, dass sich dies durch JSL-Skripte automatisieren lässt.
Und schließlich lässt sich dieses Framework für kontextbezogene diskrete Wahlversuche für eine Vielzahl von Entscheidungsaufgaben einsetzen. Es beschränkt sich nicht nur auf Usability-Studien, sondern eignet sich für jede Art von Studie, in der Nutzer ihre Präferenzen zwischen mehreren Optionen angeben sollen. Wir haben dieses Add-in nicht nur für uns selbst entwickelt, sondern auch, damit andere es zur Lösung ihrer Probleme nutzen können.
Ich werde kurz den Workflow unseres Add-ins für kontextbezogene diskrete Wahlmöglichkeiten erläutern. Zunächst muss der Benutzer oder Versuchsleiter Daten aus einer Screening-Studie erheben. Diese Screening-Studie sollte Informationen darüber enthalten, welche Fragen den Teilnehmern gestellt wurden, welche Attribute (Profilattribute) verwendet wurden und welche Faktoren sowie Kovariaten der Probanden erfasst wurden.
Sobald diese Daten vorliegen, wird ein Screening-Modell daran angepasst. Im Screening-Modell muss der Versuchsleiter sowohl die Profileffekte (in unserem Fall die Einstellungen der Hover-Hilfe) als auch die Subjekteffekte spezifizieren. Dadurch kann der Versuchsleiter ein Nutzenmodell erstellen. Dieses Nutzenmodell wird anschließend mithilfe der Choice Analysis Platform von JMP geschätzt.
Anschließend wählt der Nutzer eine demografische Gruppe für die weitere Untersuchung aus. Dazu legt er die Ausprägungen der einzelnen Effekte oder Kontextfaktoren fest. Die Kombination dieser Ausprägungen definiert die zu untersuchende Gruppe. Nach der Gruppenauswahl wird für diese Gruppe ein Bayes’sches D-optimales Versuchsdesign bzw. ein Bayes’scher D-optimaler Fragebogen erstellt, um eine statistisch effiziente weitere Untersuchung zu ermöglichen.
Ich zeige Ihnen nun das Add-In für kontextbezogene diskrete Wahlversuche. Ich öffne JMP und gehe zu meinen Add-Ins. Dort wähle ich die Datentabelle aus. Diese Datentabelle enthält Informationen… Ich zeige Ihnen kurz, wie sie aussieht. Sie enthält Informationen zu früheren Usability-Studien, die für die Hover-Hilfe durchgeführt wurden. Sie sehen beispielsweise, welche Option der Nutzer gewählt hat und welche Optionen angezeigt wurden. Außerdem enthalten wir Kontextinformationen zum Nutzer, wie seine Erfahrung im Versuchsdesign und den Grund für die Nutzung von Easy DOE. Nutzt er es für den persönlichen Gebrauch oder für Schulungszwecke?
Innerhalb dieses Bereichs… Ich öffne ihn hier. Zuerst fügen wir die Antwortanzeige ein, also die Auswahl des Nutzers, und legen außerdem die Auswahlset-ID und die Subjekt-IDs fest. Anschließend können wir hier die Profileffekte eingeben, in unserem Fall die drei Meldungen im Bereich der Hover-Hilfe. Optional könnten wir auch Interaktionseffekte hinzufügen. Im Moment belasse ich es aber bei einem Modell mit Haupteffekten. Zusätzlich können wir Subjekteffekte wie den Erfahrungsstand und die Frage, ob die Nutzer andere unterrichten oder Easy DOE privat nutzen, hinzufügen.
Sie sehen, dass viele der hier angezeigten Informationen der Konfiguration der Choice Analysis Platform ähneln. Wenn wir auf „Ausführen“ klicken, wird im Hintergrund die Choice Analysis Platform aufgerufen und analysiert das Screening-Modell für die Screening-Studie. Selbstverständlich können wir damit genauso interagieren wie mit der Choice Analysis Platform. Beispielsweise können wir ein Nutzenprofil aufrufen und sehen, dass erfahrene Nutzer, die andere schulen, eine bestimmte Option für die Vererbungsinformation bevorzugen – nämlich diese zweite Alternative.
Sobald wir das betrachtet haben, können wir diese Komponente aufrufen, die uns auffordert, eine demografische Gruppe für weitere Untersuchungen auszuwählen. Angenommen, ich führe diese Studien durch und möchte die Expertennutzer von Easy DOE untersuchen, also diejenigen, die Erfahrung mit Versuchsplanung haben, und mich interessiert, wann sie andere schulen. Ich möchte einen Fragebogen erstellen, um die Präferenzen dieser Experten zu ermitteln. Ich klicke auf „Design erstellen“, und die Plattform für die Auswahlplanung wird so geöffnet, dass die Informationen, die wir bereits in der Phase „Auswahlanalyse“ oder „Screening-Studie“ eingegeben haben, automatisch in die Plattform übernommen werden.
Wir haben unsere Attribute und unser Modell für diese spezielle Gruppe – ein von uns spezifiziertes Haupteffektmodell. Das Wichtigste dabei ist, dass wir mithilfe des Modells aus der Screening-Studie, also jenes Screening-Modells, Bayes'sche Priorverteilungen für den A-priori-Mittelwert und die A-priori-Varianz der untersuchten Gruppe berechnen konnten.
Nachdem wir diese Vorinformationen erstellt haben, können wir durch Klicken auf „Design erstellen“ ein sogenanntes Bayes'sches D-optimales Design anlegen. Daraufhin erhalten wir ein Design, das speziell auf die untersuchte Gruppe zugeschnitten ist. Bei der Erstellung dieses Designs wurden die uns vorliegenden Informationen zu den Präferenzen dieser Gruppe berücksichtigt. Dieses Design ist nun auf die Gruppe zugeschnitten, die wir genauer untersuchen möchten. Das war meine Demonstration des Add-ins für kontextuelle diskrete Wahlversuche. Ich schließe nun einige dieser Fenster und kehre zu unseren Folien zurück.
Als Letztes möchte ich nun auf das Testen des Add-ins mithilfe des JSL-Unit-Testing-Frameworks eingehen. Was ist Unit-Testing überhaupt, für alle, die es noch nicht wissen? Beim Unit-Testing werden einzelne Komponenten einer Softwareanwendung getestet, um Fehler zu identifizieren. Insbesondere automatisiertes Unit-Testing ermöglicht es, regelmäßig Unit-Tests für eine Softwareanwendung auszuführen, um neu aufgetretene Fehler während des Entwicklungsprozesses zu erkennen und zu beheben.
JMP verfügt über ein Unit-Testing-Framework namens JSL Unit-Testing-Framework, das speziell für JSL-Anwendungen entwickelt wurde. Die wichtigste Funktion dieses Frameworks ist `ut assert`, mit der Benutzer bestimmte Komponenten einer JSL-Anwendung testen können. Der Benutzer gibt den erwarteten Ausgabewert an, den sogenannten Sollwert. Dieser wird mit der tatsächlichen Ausgabe der Anwendung verglichen. Stimmen die Werte überein, war der Testfall erfolgreich; andernfalls ist er fehlgeschlagen. Nach dem Ausführen eines Skripts mit `ut assert` wird ein Bericht zurückgegeben, der angibt, ob alle Tests erfolgreich waren oder welche fehlgeschlagen sind, sodass diese genauer untersucht werden können.
Wir haben im Add-in für kontextbezogene diskrete Wahlversuche diverse Funktionen getestet. Unter anderem haben wir die Schaltfläche zum Hinzufügen von Interaktionseffekten geprüft. Funktionierte diese korrekt? Wir gingen davon aus, dass wir, wenn wir zwei bestimmte Optionen auswählen und die Schaltfläche betätigen, wissen, wie das Ergebnis aussehen sollte. Daher konnten wir dies mit der tatsächlichen Ausgabe vergleichen, um sicherzustellen, dass das System richtig arbeitet.
Ein weiterer wichtiger Punkt, den wir getestet haben, war, dass beim Auswählen einer demografischen Gruppe für die weitere Untersuchung eine Meldung erscheinen sollte, wenn der Versuchsleiter eine der Optionen leer gelassen hat. Wir haben dies getestet und sichergestellt, dass diese Fehlermeldung wie gewünscht angezeigt wird.
Abschließend noch ein wichtiger Punkt: Wir wollten sicherstellen, dass die zuvor in den Choice Designer geladenen Informationen korrekt waren. Wir haben dies getestet und mit den Ergebnissen der Choice Analysis-Plattform verglichen. Stimmen diese überein, wussten wir, dass wir die Informationen korrekt in den Choice Designer einspielten. Bei einer Abweichung wussten wir, dass etwas nicht stimmte. Glücklicherweise stellten wir fest, dass wir die korrekten Informationen geladen hatten.
Einer der wichtigsten Aspekte automatisierter Unit-Tests ist das Refactoring des Codes. Automatisierte Unit-Tests ermöglichen es, den Code zu refaktorisieren und zu prüfen, ob dabei Fehler entstanden sind. Mit Refactoring meine ich Änderungen am Code während des Entwicklungsprozesses. Wie lässt sich feststellen, ob man durch eine Codeänderung versehentlich etwas anderes, das mit der eigentlichen Änderung nichts zu tun hat, beschädigt hat?
Ein Beispiel: Ein Testnutzer dieses Add-ins stellte fest, dass die Liste für einen Kontextfaktor nicht korrekt angezeigt wurde, wenn dieser eine Wertbezeichnung hatte. Sie wurde überhaupt nicht angezeigt.
Wir haben den Fehler behoben. Um sicherzugehen, dass wir durch die Behebung keine weiteren Probleme verursacht haben, haben wir unser Unit-Test-Skript erneut ausgeführt. Glücklicherweise traten dabei keine neuen Fehler auf, was unsere Annahme bestätigte, dass wir keine weiteren Fehler verursacht hatten. Unsere vorgeschlagene Lösung für das Problem mit der Wertbezeichnung hat das Problem korrekt behoben, wie Sie rechts im Bild sehen können.
Diese Unit-Tests sind wichtig, weil sie erstens Fehler im Code aufdecken und zweitens die Refaktorisierung ermöglichen, um sicherzustellen, dass keine neuen Fehler eingeführt wurden. Drittens ändern sich mit JMP-Updates interne Abläufe und die Kompatibilität mit verschiedenen Plattformen. Mit diesem Unit-Test-Skript können Sie Ihr Add-in nach jedem JMP-Update testen und so überprüfen, ob Änderungen in JMP Auswirkungen auf Ihr Add-in haben.
Zum Abschluss meines heutigen Vortrags habe ich das Problem der Konzeption kontextbezogener Discrete-Choice-Experimente vorgestellt, um die Präferenzen der Benutzeroberfläche von Easy DOE in verschiedenen demografischen Gruppen unserer Nutzerbasis zu ermitteln. Anschließend habe ich demonstriert, wie JSL-Skripte die Entwicklung eines benutzerfreundlichen JMP-Add-ins für diese Experimente ermöglichen. Abschließend habe ich die Bedeutung von Unit-Tests erörtert. Diese Tests sollten Sie während oder nach der Entwicklung Ihres Add-ins durchführen, um Fehler frühzeitig zu erkennen.
Damit beende ich meinen Vortrag für heute. Gibt es noch Fragen?