<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Ich schreibe ein Skript, das einer vorhandenen Plattform zusätzliche Informationen hinzufügt (z. B. das RSquare Predicted to Fit-Modell). Ich kann das pred.R2 zu einer Plattform hinzufügen, die als Teil meines Skripts erstellt wird. Aber wie bekomme ich einen Hinweis auf ein vom Benutzer geeignetes Modell? Ich möchte einen Benutzerdialog erstellen, in dem der Benutzer das Plattformfenster auswählen kann, zu dem pred.R2 hinzugefügt werden soll.
Natürlich würde ich es sogar vorziehen, nur einen eigenen Menüeintrag zum Haupt-Hotspot des Fit-Model-Plaftorm hinzuzufügen, aber ich habe keine Ahnung, ob das möglich ist?
Vielen Dank für jeden Rat
Sebastian
Sebastian,
Nur um auf die exzellente Antwort von MS aufzubauen ... Wir haben ein sehr ähnliches Skript geschrieben, um den R2 Predicted-Wert zur Fit Model-Ausgabe hinzuzufügen. Anstatt ein Dialogfeld zum Auswählen des entsprechenden Berichts anzuzeigen, können Sie das Skript über das Menü oder eine Symbolleiste des aktuellen Berichtsfensters ausführen (das Skript muss dem Menü oder einer Symbolleiste hinzugefügt werden). Dann stellt der Befehl Aktuelles Fenster () einen Verweis auf das Berichtsfenster bereit, und Sie können die Gliederungsfelder innerhalb des Berichtsfensters durchsuchen. Hier ist ein Teil unseres Skripts.
curwin = Current Window();For( i = 1, i < 10000, i++, Try( outlinebox = curwin[Outline Box( i )]; Try( outlineboxobj = outlinebox << Get Scriptable Object; // DETAILS NOT SHOWN: // Check that the outline box is the top of a Fit Model analysis, with Standard Least Squares personality. // Pull the PRESS statistic and SS(treatment) to calculate R2-Predicted and append it to the Summary of Fit. ); , Break(); // If no more outline boxes are found, the first "Try()" goes here and forces an escape from the For() loop. ););
Unser Skript fügt tatsächlich den R2 Predicted-Wert in jede Fit Model-Analyse in diesem Fenster ein (funktioniert für mehrere Ys und By-Variablen). Dazu wird jedes Gliederungsfeld im Berichtsfenster angezeigt.
Bemerkungen:
1 Die JSL-Dokumentation wird der Nachricht "<< Get Scriptable Object" nicht gerecht. Ich habe sehr lange nach einer Methode gesucht, um auf vorhandene Berichtsfenster zuzugreifen (Standardanalysen, die bereits von einem Benutzer erstellt wurden, nicht von einem Skript). Diese Funktion eröffnet viele Möglichkeiten für das Scripting.
2 Um zu verhindern, dass wir alle das Rad neu erfinden, wäre es schön, wenn JMP den R2-Predicted-Wert in die Standardausgabe "Fit Least Squares" einfügt.
Howard
Meistens, << Skriptfähiges Objekt abrufen kann Zugriff auf die Plattform geben. Jedoch die Modell anpassen Die Ausgabe ist etwas eigenartig und erfordert einige Eingriffe in den Bericht, um die oberste Gliederungsbox der Plattform zu finden.
Wenn keine Nebenrolle zugewiesen ist, sollte das Folgende funktionieren (vorausgesetzt Funktionen und Definitionen wie oben).
// Dialog
Neues Fenster ( "Regressionsbericht auswählen" .
<< Modal .
Panel Box ( Msgstr "Regressionsbericht auswählen, um Predicted R2 zu hinzufügen" .
rb = Radiobox ( Fenster ) .
Button Box ( "OK" .
Fenster ( rb << ausgewählt werden ) << Bringen Sie das Fenster nach vorne ;
insertToReport (
Aktueller Bericht () [ 1 . 1 . 1 ] << Skriptfähiges Objekt abrufen ()
) ;
)
)
) ;
Vielen Dank, Sebastian. Ich habe es fast geschafft (denke ich), also lass mich noch einmal zusammenfassen. . .
Ihr Benutzer hat seine JMP-Sitzung in einem Zustand, über den Ihr Code nichts weiß. Mit anderen Worten, sie könnten mehrere Tabellen mit jeweils mehreren Fenstern geöffnet haben. Einige dieser Fenster enthalten möglicherweise "Fit Least Squares". Bericht. Ihr Code sollte alle geöffneten Fenster scannen, letztere identifizieren und, wenn es mehr als eins gibt, den Benutzer auswählen lassen, an welches der zusätzliche Berichtsinhalt angehängt werden soll (wenn es nur eines gibt, müssen Sie nicht fragen). Der Schlüsselpunkt ist, dass Ihr Code keinen der Berichte tatsächlich generiert hat.
Ist das richtig, bitte?
Hi Ian,
danke für die Antwort. Ich möchte diesem Workflow folgen:
1 Der Benutzer beginnt seine Analyse mit "Fit Model (Standard Least Squares)".
2 Dann führt der Benutzer mein Skript aus, um seinem Bericht Predicted R2 hinzuzufügen.
3. Das vorhergesagte R2 wird dann an den Bericht "Modell anpassen" angehängt.
Das Problem ist, wie ich auf den Bericht zugreifen kann, der vom Benutzer in meinem Skript erstellt wurde.
Derzeit sieht mein Code so aus. Grundsätzlich möchte ich den letzten Abschnitt "Test it" durch einen Benutzerdialog ersetzen, in dem der Benutzer den Bericht für den Pred auswählt. R2 sollte hinzugefügt werden (insbesondere wenn mehrere Berichte vorhanden sind). Ich vermisse nur den Teil, wie ich auf einen vorhandenen Bericht verweisen könnte.
// Extrahiert die PRESS-Statistik aus einer "Fit Model" -Plattform
getPRESS = Funktion ({ Plattform } .
Plattform << Drücken Sie ( Show = 1 ) ;
Bericht = Plattform << Bericht ;
Drücken Sie = ( Bericht [ OutlineBox ( "Drücken Sie" )] [ 1 ] [ 1 ] << Erhalten Sie als Matrix ) [ 1 ] ;
Drücken Sie ;
) ;
// Extrahiert die Summe der Quadrate aus einer "Fit Model" -Plattform
getTSS = Funktion ({ Plattform } .
Bericht = Plattform << Bericht ;
ss = ( Bericht [ OutlineBox ( "Varianzanalyse" )] [ 1 ] [ 3 ] << Erhalten Sie als Matrix ) ;
tss = ss [ Nrow ( ss )] ;
tss ;
) ;
// Berechnet den vorhergesagten R2 für ein lineares Modell, das mit der Fit-Model-Plattform berechnet wurde
predR2 = Funktion ({ Plattform } .
Drücken Sie = getPRESS ( Plattform ) ;
tss = getTSS ( Plattform ) ;
pr2 = 1 - Drücken Sie / tss ;
pr2 ;
) ;
// Füge den Pred R2 in den Bericht ein
insertToReport = Funktion ({ Plattform } .
lm.rep = Plattform << Bericht ;
Namen = lm.rep [ OutlineBox ( "Zusammenfassung der Passform" )] [ StringColBox ( 1 )] << Erhalten ;
Werte = lm.rep [ OutlineBox ( "Zusammenfassung der Passform" )] [ Nummer Col Box ( 1 )] << Erhalten ;
Einfügen in ( Namen . "RSquare Predicted" . 3 ) ;
Einfügen in ( Werte . predR2 ( Plattform ) . 3 ) ;
lm.rep [ OutlineBox ( "Zusammenfassung der Passform" )] [ StringColBox ( 1 )] << Werte setzen ( Namen ) ;
lm.rep [ OutlineBox ( "Zusammenfassung der Passform" )] [ NumberColBox ( 1 )] << Werte setzen ( Matrix ( Werte )) ;
) ;
// Probier es aus
dt = Öffnen ( "$ sample_data / Design Experiment / Coffee Data.jmp" ) ;
Analyse = Modell anpassen (
Y ( : Stärke ) .
Auswirkungen ( : Schleifen . : Temperatur . : Zeit . : Aufladen . : Bahnhof ) .
Persönlichkeit ( "Standard-Kleinstquadrate" ) .
Betonung ( "Minimaler Bericht" ) .
Lauf (
: Stärke << { Passt nicht ( 0 ) . Plot Actual von Predicted ( 0 ) .
Regression der Handlung ( 0 ) . Plot Residuen von vorhergesagt ( 0 ) .
Plot-Effekt-Hebel ( 0 )}
)
) ;
InsertToReport ( Analyse ) ;
Zusatz: Das habe ich versucht, konnte aber keine Arbeit machen:
// ----------------------- +
// Benutzerdialog |
// ----------------------- +
// Holen Sie sich alle offenen Fenster
Windows = {};
ref_windows = Window ();
Für (i = 1, i <= Länge (ref_windows), i ++,
Einfügen in (Windows, Ref_Windows) << Fenstertitel abrufen);
);
// Dialog
Neues Fenster ("Regressionsbericht auswählen", << Modal,
Panel Box ("Wählen Sie den Regressionsbericht aus, um Predicted R2 zu hinzufügen", pf = Radio Box (Windows));
);
lm_plattform = Plattform (pf << Get);
lm_plattform << Nach vorne bringen;
insertToReport (lm_plattform);
Ich denke, wir brauchen mehr Details über den Workflow, den Sie sich vorstellen, Sebastian. Ist es richtig zu denken, dass Sie eine Modellierungsplattform (wie Neural) verwenden möchten, die mehrere Modelle in einem Bericht zulässt? Gibt es eine solche Plattform von besonderem Interesse?