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 de plusieurs modèles dans la plateforme Fit Parametric Survival. À ce stade, j'ai un script pour exécuter tous les modèles avec lequel je produit plusieurs fenêtres, et je copie/colle l'AIC et les autres sorties dans un fichier Excel une par une. Inutile aujourd’hui, c’est un processus qui prend du temps et qui est une perte de temps. Je suis novice en JSL, quelqu'un pourrait-il 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 d'une macro VBA pour importer des données dans JMP et renvoyer les résultats JMP sur une feuille Excel sur Weibull AnalysisSalut les gars,
Tout d'abord, je voudrais vous remercier d'avoir partagé vos découvertes de scripts et cela m'a aidé à pouvoir automatiser mon processus de requête de données. J'utilise VBA-Macro Excel pour copier ma table dans JMP afin d'effectuer l'analyse Weibull et obtenir les valeurs d'échelle et de forme et les copier dans mon fichier Excel VBA-Macro. Vous trouverez ci-dessous le code que j'ai utilisé. J'espère que cela sera également utile pour d'autres.
VBA-Macro Excel.
Sous-JMP()
Dim application en tant que JMP.Application
Dim doc Comme JMP.Document
Définir l'application = CreateObject("JMP.Application")
app.Visible = Vrai
Définir doc = app.OpenDocument("C:\Users\ABC\Desktop\WS.jsl")
fin du sous
Scripts JSL (enregistrés au format WS.jsl)
//! <<>>.
dt = Ouvrir( "C:\Utilisateurs\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 ), Valeur du terme ( Nom ( "TTF, Hr " )(4846.6174375, Lock ( 0 ), Show ( 1 )) ) ) ),
Distribution Weibull ( Profiler ( 1, Intervalles de confiance ( 1 ), Valeur du terme ( Nom ( "TTF, Hr " )(4846.6, Lock ( 0 ), Show ( 1 )) ) ) ),
Weibull Quantile( Profiler( 1, Intervalles de confiance( 1 ), Valeur du terme( Probabilité( 0,5, Verrouillage( 0 ), Afficher( 1 ) ) ) ) ),
Weibull Hazard( Profiler( 1, Intervalles de confiance( 1 ), Valeur du terme( Nom( "TTF,Hr" )(4846.6, Lock( 0 ), Show( 1 )) ) ) ),
Densité de Weibull ( Profiler ( 1 , Valeur du terme ( Nom ( "TTF, Hr " )(4846.6, Lock ( 0 ), Show ( 1 )) ) ) ), Estimation personnalisée ( Weibull, 0 )}
),
EnvoyerToReport(
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 d'estimation paramétrique dans une nouvelle table de données (par exemple : format untitled.jmp)
fmrep = fm << Rapport ;
fmrep[Outline Box("Parametric Estimate ?" )][Table Box( 1 )] << créer un tableau de données combinées ;
dt1 = Table de données actuelle ();
dt1 << SaveAs( "c:\Users\ABC\Desktop\AAA.xlsx" ); // pour enregistrer le fichier untitled.jmp en tant que fichier Excel (dans ce cas, je l'ai nommé AAA.xlsx) sur le bureau.
Fermer( dt, No Save );
Fermer( dt1, Pas de sauvegarde );
Les scripts ci-dessus fonctionnent parfaitement pour moi.
Je pensais juste contribuer à cette communauté avec mes récentes découvertes et apprentissages.
Merci!
Jim
Re : Script pour exporter AIC dans une nouvelle table de donnéesEURÉKA !!! Merci Jeff, Mark et Ian ! Vous m'avez beaucoup appris en peu de temps et m'avez donné la solution qui m'évitera des heures de clics, copier et 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 AIC dans une nouvelle table de donnéesLorsque vous utilisez By() lors du lancement d'une plate-forme, JMP renvoie une liste des plates-formes résultantes. Sans cela, JMP renverra une seule plateforme, et non une liste.
Étant donné que les exemples ici utilisaient By(), ils devaient être indexés dans la liste des plates-formes pour référencer une plate-forme spécifique, une par groupe. C'est le [1] dans :
fmrep1[1][Outlinebox("Parametric ?")][TableBox(1)]<<make combined data table;Vous n'utilisez By() dans aucun des lancements de votre plateforme, vous n'avez donc pas besoin du [1].
Pour regrouper tous les tableaux dans un seul tableau de données, il serait plus simple 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 rapport, puisque nous avons une référence à la fenêtre du rapport, monGagner , déjà.
Pour obtenir un tableau similaire à celui que vous montrez dans votre message d'origine, vous devrez diviser () le tableau que vous obtenez en créant un tableau de données combiné.
combined <<Split(
Split By( :Column 1 ),
Split( :Column 2 ),
Remaining Columns( Drop All )
);
Je sais que vous souhaitez également qu'une colonne indique le modèle représenté par les lignes. 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 au tableau 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 AIC dans une nouvelle table de donnéesTrès bien, alors nous nous rapprochons. 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" ) ;
// Ajout d'une colonne aléatoire 'by'
parCol = dt << NouvelleColonne ( "Par" , Numérique , Nominal , Formule ( Entier aléatoire ( 1 , 2 ))) ;
// Faire le rapport invisible
fm = dt << Modèle adapté (
Oui ( : YFaible , : YÉlevé ) ,
Effets ( : âge , : liquidité ) ,
Par ( : Par ) ,
Personnalité ( Survie paramétrique ) ,
Distribution ( JournalNormal ) ,
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 quand je supprime parCol = dt << NouvelleColonne ( ...) et Par ( : Par ) , le script ne produit plus de tableau ?
Et puisque mon objectif est de créer un seul tableau de données combiné à partir de plusieurs rapports, comment faire fonctionner l'exemple de script suivant :
dt = Ouvrir ( "$SAMPLE_DATA/Fiabilité/Tobit2.jmp" ) ;
// Faire le rapport invisible
fm1 = dt << Modèle adapté (
Oui ( : YFaible , : YÉlevé ) ,
Effets ( : âge , ) ,
Personnalité ( Survie paramétrique ) ,
Distribution ( JournalNormal ) ,
Courir ( Tests du rapport de vraisemblance ( 1 ) ) ,
) ;
fm2 = dt << Modèle adapté (
Oui ( : YFaible , : YÉlevé ) ,
Effets ( : liquidité ) ,
Personnalité ( Survie paramétrique ) ,
Distribution ( JournalNormal ) ,
Courir ( Tests du rapport de vraisemblance ( 1 ) ) ,
) ;
fm3 = dt << Modèle adapté (
Oui ( : YFaible , : YÉlevé ) ,
Effets ( : âge , : liquidité ) ,
Personnalité ( Survie paramétrique ) ,
Distribution ( JournalNormal ) ,
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 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, cela 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 AIC dans une nouvelle table de donnéesMark et Ian, merci pour votre temps ! Cependant, je ne comprends toujours pas correctement, car ma version du script ci-dessous ne produira toujours pas de tableau. J'ai essayé de combiner vos deux exemples :
dt = Ouvrir ( "$SAMPLE_DATA/Grande Classe.JMP" ) ;
bivouac = dt << Bivarié (
Oui ( : hauteur ) ,
X ( : poids ) ,
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 AIC dans une nouvelle table de donnéesLà où j'ai utilisé "Estimations de paramètres" dans l'indice pour cibler une zone de contour particulière, vous utiliseriez plutôt "Ajustement de survie paramétrique - Modèle 633".
Re : Script pour exporter AIC dans une nouvelle table de donnéesOups ! Je vois que tu voulais une table, pas un journal. Dans ce cas, « Créer un tableau de données combinées » est probablement plus direct.
Re : Script pour exporter AIC dans une nouvelle table de donnéesEn nous basant sur ce que Mark a expliqué, voici une solution :
dt = Ouvrir ( "$SAMPLE_DATA/Fiabilité/Tobit2.jmp" ) ;
// Ajout d'une colonne aléatoire 'by'
parCol = dt << NouvelleColonne ( "Par" , Numérique , Nominal , Formule ( Entier aléatoire ( 1 , 2 ))) ;
// Faire le rapport invisible
fm = dt << Modèle adapté (
Oui ( : YFaible , : YÉlevé ) ,
Effets ( : âge , : liquidité ) ,
Par ( : Par ) ,
Personnalité ( Survie paramétrique ) ,
Distribution ( JournalNormal ) ,
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 = Boîte de programmation ( NCol ( 1 )) ;
// Ajoutez le contenu dont nous avons besoin
Pour ( o = 1 , o <= NArticles ( contourTitre ) , o ++,
lubrifier << Ajouter (
Boîte de contour ( 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 de tableau inclure. Pour comprendre cela, faites un clic droit sur le triangle du nœud de contour, puis sélectionnez Edition > Afficher l'arborescence.
Re : Script pour exporter AIC dans une nouvelle table de donnéesMerci pour votre réponse rapide, Marc !! Cela a été très utile et éducatif, même si au début, cela n'a pas produit le tableau de données jusqu'à ce que j'ai réécrit le dernier morceau ainsi
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 By .
Cependant, je ne parviens toujours pas à le traduire dans mon flux de travail, peut-être parce que le tableau que je souhaite n'a pas de titre (par exemple « Estimations des paramètres »). Vous trouverez ci-dessous un exemple de rapport. La partie encerclée est ce que je veux transformer en tableau de données. J'ai inclus un échantillon du script que j'utilise en bas. Le défi est de savoir comment 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 saisis actuellement 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 :
Modèle adapté (
Censurer ( : Dispersé ) ,
Code de censure ( "0" ) ,
Oui ( : jours jusqu'à la dispersion ) ,
Effets ( : Poids , : Année , : Source , : Translocation , : Traitement , : Géologie , : Site , ) ,
Personnalité ( Survie paramétrique ) ,
Distribution ( Fréchet ) ,
Courir ( Tests du rapport de vraisemblance ( 1 ) ) ,
EnvoyerVersRapport (
Expédition (
{} ,
Ajustement de survie paramétrique ,
Boîte de contour ,
{ Définir le titre ( "Ajustement de survie paramétrique - Modèle 632" )}
)
)
) ;
Modèle adapté (
Censurer ( : Dispersé ) ,
Code de censure ( "0" ) ,
Oui ( : jours jusqu'à la dispersion ) ,
Effets ( : Poids , : Année , : Source , : Translocation , : Traitement , : Géologie , ) ,
Personnalité ( Survie paramétrique ) ,
Distribution ( Fréchet ) ,
Courir ( Tests du rapport de vraisemblance ( 1 ) ) ,
EnvoyerVersRapport (
Expédition (
{} ,
Ajustement de survie paramétrique ,
Boîte de contour ,
{ Définir le titre ( "Ajustement de survie paramétrique - Modèle 633" )}
)
)
) ;
Re : Script pour exporter AIC dans une nouvelle table de donnéesVous pouvez produire ce résultat de manière interactive en cliquant avec le bouton droit sur le tableau contenant la valeur AIC dans votre rapport et en sélectionnant Créer un tableau de données combinées.
L'équivalent en script nécessite l'envoi d'un message portant le même nom que la commande de menu à l'objet de boîte d'affichage chargé de présenter la valeur AIC dans le rapport. Utilisez l'exemple suivant pour cette idée :
- ouvrir la grande classe
- lancer la plateforme Bivariate avec la taille par rapport au poids et au sexe comme variable de regroupement
- placer une ligne dans les deux groupes
- obtenir la référence à la couche de rapport
- indicer à plusieurs reprises l'arborescence d'affichage dans le rapport au niveau du premier tableau (par exemple, estimations de paramètres)
- envoyer le message
dt = Ouvrir ( "$SAMPLE_DATA/Grande Classe.JMP" ) ;
biv= dt << Bivarié (
Oui( : hauteur ) ,
X( : poids ) ,
Ligne d'ajustement ,
Par( : sexe )
);
biv4 = bivouac << Rapport ;
bivr[ 1 ][ "Estimations des paramètres" ][ TableBox ( 1 )] << Créer un tableau de données combiné ;