<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />J'écris un script qui ajoutera des informations supplémentaires à une plateforme existante (par exemple, en ajoutant RSquare Predicted to Fit model). Je peux ajouter le pred.R2 à une plate-forme créée dans le cadre de mon script. Mais comment pourrais-je obtenir une référence à un modèle adapté à l'utilisateur? Je souhaite créer une boîte de dialogue permettant à l’utilisateur de sélectionner la fenêtre de la plate-forme à laquelle le pred.R2 doit être ajouté.
Bien sûr, je préférerais encore plus simplement ajouter ma propre entrée de menu au point chaud principal de Fit-Model-plaftorm, mais je ne sais pas si cela est possible?
Merci pour tout conseil,
Sebastian
Sebastian,
Juste pour construire sur l'excellente réponse de MS ... Nous avons écrit un script très similaire pour ajouter la valeur R2 prévue à la sortie du modèle d'ajustement. Au lieu d'afficher une boîte de dialogue pour sélectionner le rapport approprié, vous pouvez exécuter le script à partir du menu ou d'une barre d'outils de la fenêtre du rapport en cours (le script doit être ajouté au menu ou à une barre d'outils). Ensuite, la commande Fenêtre en cours () fournit une référence à la fenêtre du rapport et vous pouvez rechercher les zones de plan dans la fenêtre du rapport. Voici une partie de notre script.
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. ););
Notre script insère en fait la valeur prédite R2 dans chaque analyse de modèle d'ajustement de cette fenêtre (fonctionne pour plusieurs variables Y et by). Pour ce faire, il examine toutes les zones de contour de la fenêtre du rapport.
Commentaires:
1. La documentation JSL ne rend pas justice au message "<< Get Scriptable Object". J'ai longtemps cherché une méthode pour accéder aux fenêtres de rapport existantes (analyses standard déjà créées par un utilisateur, pas par un script). Cette fonctionnalité ouvre de nombreuses possibilités de script.
2 Pour nous empêcher tous de réinventer la roue, il serait bien que JMP inclue la valeur R2-Predicted dans la sortie standard des moindres carrés.
Howard
Habituellement, << Obtenir un objet scriptable peut donner accès à la plate-forme. Cependant, le Modèle ajusté la sortie est un peu particulière et nécessite quelques fouilles dans le rapport pour trouver la boîte de dialogue supérieure de la plate-forme.
Si aucun rôle secondaire n'est attribué, les éléments ci-dessous devraient fonctionner. (en assumant les fonctions et les définitions ci-dessus).
// dialogue
Nouvelle fenetre ( "Sélectionner le rapport de régression" ,
<< Modal ,
Boîte de panneau ( "Sélectionnez le rapport de régression pour ajouter le R2 prévu à" ,
rb = Radio Box ( les fenêtres ) ,
Boîte à boutons ( "D'ACCORD" ,
La fenêtre ( rb << être sélectionné ) << Amener la fenêtre à l'avant ;
insertToReport (
Rapport actuel () [ 1 , 1 , 1 ] << obtenir un objet scriptable ()
) ;
)
)
) ;
Merci beaucoup, Sebastian. Je l'ai presque (je pense), alors laissez-moi récapituler. . .
Votre utilisateur aurait une session JMP dans un état inconnu de votre code. En d'autres termes, plusieurs tables pourraient être ouvertes, chacune avec plusieurs fenêtres. Certaines de ces fenêtres peuvent contenir un «ajustement des moindres carrés»; rapport. Votre code doit scanner toutes les fenêtres ouvertes, identifier cette dernière et, s’il y en a plusieurs, laisser l’utilisateur choisir lequel ajouter le contenu du rapport supplémentaire (s’il n’y en a qu’une, il n’est pas nécessaire de demander). Le point clé étant que votre code n'a généré aucun des rapports.
Est-ce correct, s'il vous plaît?
Bonjour Ian,
Merci pour la réponse. J'aimerais suivre ce workflow:
1. Les utilisateurs commencent leur analyse en utilisant "Fit Model (Standard Least Square)".
2 Ensuite, l'utilisateur exécute mon script pour ajouter le R2 prédictif à son rapport.
3 Le R2 prédit est alors associé au rapport "Modèle ajusté".
Le problème est de savoir comment accéder au rapport créé par l'utilisateur dans mon script.
Actuellement, mon code ressemble à ceci. Je veux fondamentalement remplacer la dernière section "Testez-le" par une boîte de dialogue utilisateur dans laquelle l'utilisateur choisit le rapport où Pred. R2 doit être ajouté (surtout s'il y a plusieurs rapports). Je manque juste la partie comment je pourrais faire référence à un rapport existant.
// extrait la statistique PRESS d'une plate-forme "Fit Model"
getPRESS = Une fonction ({ plate-forme } ,
plate-forme << presse ( spectacle = 1 ) ;
rapport = plate-forme << rapport ;
presse = ( rapport [ OutlineBox ( "Presse" )] [ 1 ] [ 1 ] << Obtenez comme matrice ) [ 1 ] ;
presse ;
) ;
// Extrait la somme totale des carrés d'une plate-forme "Fit Model"
getTSS = Une fonction ({ plate-forme } ,
rapport = plate-forme << rapport ;
ss = ( rapport [ OutlineBox ( "Analyse de la variance" )] [ 1 ] [ 3 ] << Obtenez comme matrice ) ;
tss = ss [ Nrow ( ss )] ;
tss ;
) ;
// Calcule le R2 prévu pour un modèle linéaire calculé à l'aide de la plate-forme Fit-Model
predR2 = Une fonction ({ plate-forme } ,
presse = getPRESS ( plate-forme ) ;
tss = getTSS ( plate-forme ) ;
pr2 = 1 - presse / tss ;
pr2 ;
) ;
// Insérer le prédéducteur R2 dans le rapport
insertToReport = Une fonction ({ plate-forme } ,
lm.rep = plate-forme << rapport ;
des noms = lm.rep [ OutlineBox ( "Résumé de Fit" )] [ StringColBox ( 1 )] << Obtenir ;
valeurs = lm.rep [ OutlineBox ( "Résumé de Fit" )] [ Nombre Col Box ( 1 )] << Obtenir ;
Insérer dans ( des noms , "RSquare Predicted" , 3 ) ;
Insérer dans ( valeurs , predR2 ( plate-forme ) , 3 ) ;
lm.rep [ OutlineBox ( "Résumé de Fit" )] [ StringColBox ( 1 )] << Définir des valeurs ( des noms ) ;
lm.rep [ OutlineBox ( "Résumé de Fit" )] [ NumberColBox ( 1 )] << Définir des valeurs ( Matrice ( valeurs )) ;
) ;
// Essaye-le
dt = Ouvrir ( "$ sample_data / Design Experiment / Coffee Data.jmp" ) ;
une analyse = Modèle ajusté (
Y ( : Force ) ,
Effets ( : Moudre , : Température , : Temps , : Charge , : Station ) ,
Personnalité ( "Moindres carrés standard" ) ,
Accentuation ( "Rapport minimal" ) ,
Courir (
: Force << { Manque d'ajustement ( 0 ) , Parcelle réelle par prédite ( 0 ) ,
Régression de parcelle ( 0 ) , Parcelle résiduelle par prédite ( 0 ) ,
Effet de levier ( 0 )}
)
) ;
InsertToReport ( une analyse ) ;
Une addition: C'est ce que j'ai essayé mais je n'ai pas réussi à faire fonctionner:
// ----------------------- +
// Dialogue utilisateur |
// ----------------------- +
// Obtient toutes les fenêtres ouvertes
windows = {};
ref_windows = Window ();
Pour (i = 1, i <= longueur (ref_windows), i ++,
Insérer dans (windows, ref_windows << Obtenir le titre de la fenêtre);
)
// dialogue
Nouvelle fenêtre ("Select Regression Report", << Modal,
Panel Box ("Sélectionnez le rapport de régression pour ajouter le R2 prédictif à", pf = Radio Box (windows));
)
lm_plattform = Plate-forme (pf << Get);
lm_plattform << Amener au premier plan;
insertToReport (lm_plattform);