Script pour exporter AIC dans une nouvelle table de données<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Je compare les résultats AIC pour plusieurs modèles dans la plate-forme Fit Parametric Survival. À ce stade, j'ai un script pour exécuter tous les modèles avec produit plusieurs fenêtres, et je copie/colle l'AIC et d'autres sorties dans un fichier Excel un par un. Inutile de dire qu'il s'agit d'un processus qui prend du temps et qui gaspille. Je suis novice en JSL, est-ce que quelqu'un pourrait m'aider à produire un processus automatisé pour extraire l'AIC et d'autres informations des multiples fenêtres de rapport et les enregistrer dans une seule fenêtre de données ? Les informations supplémentaires que j'évalue sont la convergence des paramètres, les observations utilisées et le nombre de valeurs censurées et non censurées.
Merci pour toute aide!
Utilisation de la macro VBA pour importer des données dans JMP et renvoyer les résultats JMP dans une feuille Excel sur l'analyse WeibullSalut les gars,
Tout d'abord, je voudrais vous remercier d'avoir partagé vos découvertes de script et cela m'a aidé à automatiser mon processus de requête de données. J'utilise VBA-Macro Excel pour copier mon tableau dans JMP afin d'effectuer l'analyse de Weibull et d'obtenir les valeurs d'échelle et de forme et de les copier dans mon fichier Excel VBA-Macro. Voici le code que j'ai utilisé. J'espère que cela sera également utile pour les autres.
VBA-Macro Excel.
Sous JMP()
Dim app As JMP.Application
Dim doc As JMP.Document
Set app = CreateObject("JMP.Application")
app.Visible = Vrai
Set doc = app.OpenDocument("C:\Users\ABC\Desktop\WS.jsl")
fin sous
Scripts JSL (enregistrés au format WS.jsl)
// ! <<>>.
dt = Ouvrir( "C:\Users\ABC\Desktop\Book1.xlsm" ); <<< JSL ouvrira le fichier Excel dans le tableau de données JMP pour exécuter l'analyse weibull ci-dessous>>>
fm = distribution de vie(
Y( :Nom( "TTF,Hr" ) ),
Censure( :Censure ),
Code de censure( 1 ),
Fréq( :Fréq ),
<
Méthode d'intervalle de confiance (probabilité),
<
<
Type d'intervalle (simultané),
<
{Papier de probabilité( Profiler( 1, Intervalles de confiance( 1 ), Term Value( Name( "TTF,Hr" )(4846.6174375, Lock( 0 ), Show( 1 )) ) ) ),
Distribution de Weibull( Profiler( 1, Intervalles de confiance( 1 ), Term Value( Name( "TTF,Hr" )(4846.6, Lock( 0 ), Show( 1 )) ) ) ),
Quantile de Weibull( Profileur( 1, Intervalles de confiance( 1 ), Valeur du terme( Probabilité( 0,5, Verrouillage( 0 ), Afficher( 1 ) ) ) ) ),
Danger de Weibull( Profileur( 1, Intervalles de confiance( 1 ), Terme Valeur( Nom( "TTF,Hr" )(4846.6, Verrouiller( 0 ), Afficher( 1 )) ) ) ),
Densité de Weibull( Profiler( 1, Term Value( Name( "TTF,Hr" )(4846.6, Lock( 0 ), Show( 1 )) ) ) ), Estimation personnalisée( Weibull, 0 )}
),
EnvoyerVersRapport(
Dispatch( {"Comparer les distributions"}, "Life Distribution", FrameBox, {Grid Line Order( 2 ), Reference Line Order( 3 )} ),
Dispatch( {"Statistiques", "Comparaisons de modèles"}, "", TableBox, {Trier par colonne( 2, 1 )} )
)
);
// Pour copier automatiquement les données Parametic Estimate dans une nouvelle table de données (par exemple : format sans titre.jmp)
fmrep = fm << Rapport ;
fmrep[Outline Box("Estimation paramétrique ?" )][Table Box( 1 )] << créer un tableau de données combiné ;
dt1 = Table de données actuelle();
dt1 << SaveAs( "c:\Users\ABC\Desktop\AAA.xlsx" ); // pour enregistrer le fichier sans titre.jmp en tant que fichier Excel (dans ce cas, je l'ai appelé AAA.xlsx) sur le bureau.
Fermer( dt, Pas d'enregistrement );
Fermer( dt1, Pas de sauvegarde );
Les scripts ci-dessus fonctionnent parfaitement pour moi.
Je pensais juste contribuer à cette communauté avec mes découvertes et mes apprentissages récents.
Merci!
Jim
Re : Script pour exporter l'AIC dans une nouvelle table de donnéesEURÉKA !!! Merci Jeff, Mark et Ian ! Vous m'avez beaucoup appris en peu de temps, et vous m'avez donné la solution qui m'évitera des heures de clics, copier, coller inutiles !
Maintenant, si l'un d'entre vous sait comment ajouter une colonne pour le texte d'avertissement lorsque les modèles ne convergent pas, ce serait la cerise sur le gâteau. Mais je suis content de ce que nous avons accompli !
Re : Script pour exporter l'AIC dans une nouvelle table de donnéesLorsque vous utilisez un By() dans un lancement de plate-forme, JMP renvoie une liste des plates-formes résultantes. Sans cela, JMP renverra une plate-forme unique, pas dans une liste.
Étant donné que les exemples ici utilisaient By (), ils devaient indexer dans la liste des plates-formes pour référencer une plate-forme spécifique pour une par groupe. C'est le [1] dans :
fmrep1[1][Outlinebox("Parametric ?")][TableBox(1)]<<make combined data table;Vous n'utilisez By() dans aucun de vos lancements de plateforme, vous n'avez donc pas besoin du [1].
Pour obtenir toutes les tables dans une seule table de données, il serait plus facile de commencer avec tous les rapports dans une seule fenêtre.
Vous pouvez le faire en utilisant New Window() pour créer votre propre fenêtre de rapport.
dt = Open( "$SAMPLE_DATA\Reliability\Tobit2.jmp" );
myWin = New Window( "My Window",
fm1 = dt << Fit Model(
Y( :YLow, :YHigh ),
Effects( :age, ),
Personality( Parametric Survival ),
Distribution( LogNormal ),
Run( Likelihood Ratio Tests( 1 ) ),
);
fm2 = dt << Fit Model(
Y( :YLow, :YHigh ),
Effects( :liquidity ),
Personality( Parametric Survival ),
Distribution( LogNormal ),
Run( Likelihood Ratio Tests( 1 ) ),
);
fm3 = dt << Fit Model(
Y( :YLow, :YHigh ),
Effects( :age, :liquidity ),
Personality( Parametric Survival ),
Distribution( LogNormal ),
Run( Likelihood Ratio Tests( 1 ) ),
);
);
combined = myWin[Outline Box( "Parametric ?" )][Table Box( 1 )] << make combined data table;
Notez que nous n'avons pas besoin d'obtenir l'objet de rapport, puisque nous avons une référence à la fenêtre de rapport, monWin , déjà.
Pour obtenir un tableau similaire à celui que vous affichez dans votre message d'origine, vous devez diviser () le tableau que vous obtenez à partir d'un tableau de données combiné.
combined <<Split(
Split By( :Column 1 ),
Split( :Column 2 ),
Remaining Columns( Drop All )
);
Je sais que vous voulez également une colonne pour indiquer quel modèle les lignes représentent. Selon la façon dont vous décidez quels modèles exécuter, il peut être plus facile de conserver cette liste vous-même et d'ajouter vous-même une colonne à la table de données avec ces informations.
Si vous ne savez pas quels modèles vous avez spécifiés, il est possible de les extraire des rapports de survie paramétriques, mais ce n'est pas aussi simple.
-Jeff
Re : Script pour exporter l'AIC dans une nouvelle table de donnéesBon, alors on se rapproche. Même si j'ai collé le mauvais script, Jeff m'a donné la bonne réponse. Le script suivant fournit la table souhaitée pour les exemples de données :
dt = Ouvrir ( "$SAMPLE_DATA/Fiabilité/Tobit2.jmp" ) ;
// Ajoute une colonne 'by' aléatoire
parCol = dt << NouvelleColonne ( "Par" , Numérique , Nominal , Formule ( Entier aléatoire ( 1 , 2 ))) ;
// Rendre le rapport invisible
FM = dt << Ajuster le modèle (
Oui ( : YBas , : YHaut ) ,
Effets ( : âge , : liquidité ) ,
Par ( : Par ) ,
Personnalité ( Survie paramétrique ) ,
Distribution ( LogNormal ) ,
Courir ( Tests du rapport de vraisemblance ( 1 ) ) ,
) ;
// Récupère une référence à la couche de rapport
fmrep = FM << Rapport ;
fmrep [ 1 ][ Boîte de contour ( "Paramétrique ?" )][ TableBox ( 1 )] << créer un tableau de données combiné ;
Fermer ( dt , Pas d'enregistrement ) ;
// Ce script fonctionne comme il est censé le faire !!
Mais pourquoi est-ce que lorsque je supprime parCol = dt << NouvelleColonne ( ...) et Par ( : Par ) , le script ne produit plus de table ?
Et puisque mon objectif est de créer une seule table de données combinées à partir de plusieurs rapports, comment puis-je faire fonctionner l'exemple de script suivant :
dt = Ouvrir ( "$SAMPLE_DATA/Fiabilité/Tobit2.jmp" ) ;
// Rendre le rapport invisible
fm1 = dt << Ajuster le modèle (
Oui ( : YBas , : YHaut ) ,
Effets ( : âge , ) ,
Personnalité ( Survie paramétrique ) ,
Distribution ( LogNormal ) ,
Courir ( Tests du rapport de vraisemblance ( 1 ) ) ,
) ;
fm2 = dt << Ajuster le modèle (
Oui ( : YBas , : YHaut ) ,
Effets ( : liquidité ) ,
Personnalité ( Survie paramétrique ) ,
Distribution ( LogNormal ) ,
Courir ( Tests du rapport de vraisemblance ( 1 ) ) ,
) ;
fm3 = dt << Ajuster le modèle (
Oui ( : YBas , : YHaut ) ,
Effets ( : âge , : liquidité ) ,
Personnalité ( Survie paramétrique ) ,
Distribution ( LogNormal ) ,
Courir ( Tests du rapport de vraisemblance ( 1 ) ) ,
) ;
// Récupère une référence à la couche de rapport
fmrep1 = fm1 << Rapport ;
fmrep1 [ 1 ][ Boîte de contour ( "Paramétrique ?" )][ TableBox ( 1 )] << créer un tableau de données combiné ;
MERCI À TOUS!!!
JP
Re : Script pour exporter l'AIC dans une nouvelle table de donnéesVous avez des erreurs d'indice dans cette ligne :
fmrep[1]["Parameter Estimates"][TableBox(1)] << Make Combined Data Table;
Au lieu de cela, il devrait être :
fmrep[Outlinebox("Parametric ?")][TableBox(1)]<<make combined data table;Vous pouvez utiliser Outlinebox(1) ou y mettre le titre complet mais le caractère générique "?" le rend un peu plus général.
-Jeff
Re : Script pour exporter l'AIC dans une nouvelle table de donnéesMark & Ian, merci pour votre temps ! Je ne comprends toujours pas bien, car ma version du script ci-dessous ne produira toujours pas de table. J'ai essayé de combiner vos deux exemples:
dt = Ouvrir ( "$SAMPLE_DATA/Grande classe.JMP" ) ;
bivouac = dt << Bivarié (
Oui ( : hauteur ) ,
X ( : lester ) ,
Ligne d'ajustement ,
Par ( : sexe )
) ;
fmrep = FM << Rapport ;
fmrep [ 1 ][ "Estimations des paramètres" ][ TableBox ( 1 )] << Créer un tableau de données combiné ;
Des idées?
Merci,
JP
Re : Script pour exporter l'AIC dans une nouvelle table de donnéesLà où j'ai utilisé "Parameter Estimates" dans l'indice pour cibler une boîte de contour particulière, vous utiliseriez à la place "Parametric Survival Fit - Model 633".
Re : Script pour exporter l'AIC dans une nouvelle table de donnéesOups ! Je vois que vous vouliez une table, pas un journal. Dans ce cas, "Make Combined Data Table" est probablement plus direct.
Re : Script pour exporter l'AIC dans une nouvelle table de donnéesSur la base de ce que Mark a expliqué, voici une méthode :
dt = Ouvrir ( "$SAMPLE_DATA/Fiabilité/Tobit2.jmp" ) ;
// Ajoute une colonne 'by' aléatoire
parCol = dt << NouvelleColonne ( "Par" , Numérique , Nominal , Formule ( Entier aléatoire ( 1 , 2 ))) ;
// Rendre le rapport invisible
FM = dt << Ajuster le modèle (
Oui ( : YBas , : YHaut ) ,
Effets ( : âge , : liquidité ) ,
Par ( : Par ) ,
Personnalité ( Survie paramétrique ) ,
Distribution ( LogNormal ) ,
Courir ( Tests du rapport de vraisemblance ( 1 ) ) ,
Invisible
) ;
// Récupère une référence à la couche de rapport
fmrep = FM << Rapport ;
// Ce sera une liste, un élément par groupe 'by'
contourTitre = fmRep << ObtenirTitre ;
// Crée une boîte d'affichage vide
lubrifier = LineUpBox ( sous-col ( 1 )) ;
// Ajouter le contenu dont nous avons besoin
Pour ( o = 1 , o <= NIéléments ( contourTitre ) , o ++,
lubrifier << Ajouter (
ContourBox ( contourTitre [ o ] ,
( fmRep [ o ])[ TableBox ( 1 )] ;
) ;
) ;
) ;
Fermer ( dt , Pas d'enregistrement ) ;
// Créer un journal
Nouvelle fenetre ( "Rapport" , << Journal , lubrifier ) ;
La seule difficulté est de savoir quelles cases du tableau inclure. Pour comprendre cela, cliquez avec le bouton droit sur le triangle du nœud de contour, puis sélectionnez Édition> Afficher l'arborescence.
Re : Script pour exporter l'AIC dans une nouvelle table de donnéesMerci pour votre réponse rapide, Marc !! C'était très utile et instructif, bien qu'au début, cela n'ait pas produit le tableau de données jusqu'à ce que je réécrive le dernier bit comme
Rapport ( bivouac [ 1 ] )[ "Estimations des paramètres" ][ TableBox ( 1 )] << Créer un tableau de données combiné ;
en suivant cet exemple : 46983 - Comment créer un tableau de données combiné de statistiques récapitulatives à partir d'un rapport de distribution lors de l'utilisation d'une variable Par .
Cependant, je ne parviens toujours pas à le traduire dans mon flux de travail, peut-être parce que le tableau que je veux n'a pas de titre (par exemple "Estimations des paramètres"). Vous trouverez ci-dessous un exemple d'un rapport. La partie encerclée est ce que je veux transformer en un tableau de données. J'ai inclus un échantillon du script que j'utilise en bas. Le défi consiste à ajouter les données encerclées d'environ 100 rapports générés simultanément dans un seul tableau de données. J'ai ajouté une capture d'écran du tableau final que je recherche, que je suis en train de saisir manuellement dans Excel (beurk). J'aurais également besoin d'un moyen d'ajouter le numéro de modèle (par exemple 633) à chaque ligne.
Merci encore pour votre aide!
JP


Voici un exemple du script que j'utilise :
Ajuster le modèle (
Censurer ( : Dispersé ) ,
Code de censure ( "0" ) ,
Oui ( : jours avant la dispersion ) ,
Effets ( : Lester , : Année , : Source , : Translocation , : Traitement , : Géologie , : Placer , ) ,
Personnalité ( Survie paramétrique ) ,
Distribution ( Fréchet ) ,
Courir ( Tests du rapport de vraisemblance ( 1 ) ) ,
Envoyer vers le rapport (
Expédition (
{} ,
Ajustement de survie paramétrique ,
ContourBox ,
{ Définir le titre ( "Parametric Survival Fit - Modèle 632" )}
)
)
) ;
Ajuster le modèle (
Censurer ( : Dispersé ) ,
Code de censure ( "0" ) ,
Oui ( : jours avant la dispersion ) ,
Effets ( : Lester , : Année , : Source , : Translocation , : Traitement , : Géologie , ) ,
Personnalité ( Survie paramétrique ) ,
Distribution ( Fréchet ) ,
Courir ( Tests du rapport de vraisemblance ( 1 ) ) ,
Envoyer vers le rapport (
Expédition (
{} ,
Ajustement de survie paramétrique ,
ContourBox ,
{ Définir le titre ( "Parametric Survival Fit - Modèle 633" )}
)
)
) ;
Re : Script pour exporter l'AIC dans une nouvelle table de donnéesVous pouvez produire ce résultat de manière interactive en cliquant avec le bouton droit sur la table avec la valeur AIC dans votre rapport et en sélectionnant Créer une table de données combinées.
L'équivalent de script nécessite l'envoi d'un message portant le même nom que la commande de menu à l'objet boîte d'affichage responsable de la présentation de la valeur AIC dans le rapport. Utilisez l'exemple suivant pour cette idée :
- ouvrir la grande classe
- lancer la plateforme bivariée avec taille versus poids et sexe comme variable de regroupement
- ajuster une ligne dans les deux groupes
- obtenir la référence à la couche de rapport
- indicez à plusieurs reprises l'arborescence d'affichage dans le rapport au niveau du premier tableau (par exemple, les estimations de paramètres)
- envoyer le message
dt = Ouvrir ( "$SAMPLE_DATA/Grande classe.JMP" ) ;
biv = dt << Bivarié (
Oui( : hauteur ) ,
X( : lester ) ,
Ligne d'ajustement ,
Par( : sexe )
);
biv4 = bivouac << Rapport ;
bivr[ 1 ][ "Estimations des paramètres" ][ TableBox ( 1 )] << Créer un tableau de données combiné ;