Ajout/suppression d'effets dans la régression pas à pas via JSL et numéro/nom de colonneSalut tout le monde!
J'ai vraiment besoin d'aide car j'utilise JMP et JSL pour ma thèse. J'utilise actuellement JMP via JSL pour analyser certaines données et je me concentre sur la régression par étapes. En passant, j'aurai quelques extraits de code joints pour faciliter votre aide.
Essentiellement
1.) Comment ajouter plusieurs effets sur le modèle initial via le numéro de colonne ?
Actuellement, je peux définir Y en utilisant uniquement le numéro de colonne souhaité, mais je ne peux pas ajouter de X en utilisant le numéro de colonne.
Je veux que ça parte de ça
obj = dt << Fit Model(Y(:Column Name(i)),
Effects(
:Effect1Name, :Effect2Name, /*and so on and so forth*/
),
Personality(Stepwise), Run Model(Stopping Rule(MinimumBIC))
);
pour ça
obj = dt << Fit Model(Y(:Column Name(i)),
Effects(
:Column(/*indices of columns to place as effects*/)
),
Personality(Stepwise), Run Model(Stopping Rule(MinimumBIC))
);
2.) Comment supprimer les effets les moins significatifs ?
Après avoir exécuté le script original, je constate que certains effets ne sont pas vraiment significatifs. Le script par défaut sera d'utiliser
obj << Remove(:/*hardcoded column name*/);
mais je veux qu'il soit flexible pour pouvoir l'automatiser pour qu'il ressemble à ceci
obj << Remove(:Column Name(indextoremove));
mais l'extrait ci-dessus produit ce message d'erreur
Term not found in access or evaluation of 'Column Name' , Column Name/*###*/(indextoremove)
Merci!
Re : Ajout/suppression d'effets dans la régression pas à pas via JSL et numéro/nom de colonne<SPAN class="token string">^effect_cols^ doesnt appear to work within eval(parse(eval insert(Step_Str))); as the brackets "{" of the list still exist.</SPAN>Re : Ajout/suppression d'effets dans la régression pas à pas via JSL et numéro/nom de colonneRe-bonjour @cwillden !
J'ai changé quelque chose dans mon code, inspiré par ce que je faisais auparavant et en conjonction avec votre extrait de code. Et maintenant, ça marche !
Merci beaucoup!
Re : Ajout/suppression d'effets dans la régression pas à pas via JSL et numéro/nom de colonneSalut @cwillden ,
Merci d'avoir répondu ! Vous avez grandement résolu mon premier souci (ajout de multiples effets) !
Concernant la deuxième préoccupation, je suis déjà en mesure de supprimer le terme avec la plus grande valeur p. Cependant, je crois que ce n'est pas le critère que j'utilise pour supprimer un terme.
Ce que je fais (si je le fais avec une méthode pointer-cliquer et non avec un script) est :
- Chargez le tableau.
- Exécutez le module Ajuster le modèle
- Ajoutez les Y et les X.
- Sélectionnez la régression pas à pas
- Construisez le modèle. (Cliquez sur Aller)
- Cliquez sur Exécuter pour afficher le rapport.
- Accédez au tableau Estimations des paramètres.
- Inspectez et supprimez les termes en fonction de Prob>|t|.
Je pense que le code que vous avez envoyé supprimait des termes basés sur Prob>F du tableau Current Estimates de la fenêtre Fit Stepwise. Ce que je veux faire, c'est supprimer les termes basés sur Prob>|t| du tableau Estimations des paramètres de la fenêtre Rapport : Ajuster le modèle.
Merci encore!
Re : Ajout/suppression d'effets dans la régression pas à pas via JSL et numéro/nom de colonneSalut @pedbundoc ,
Bienvenue dans la communauté et bonne chance pour votre thèse.
Contrairement aux autres entrées de boîte de dialogue, l’entrée Effets n’est pas simplement une liste de colonnes.Vous spécifiez également des effets d'ordre supérieur dans cet argument.Vous pouvez créer la liste des effets en utilisant des éléments tels que "colonne (1), colonne (2), colonne (3), colonne (1) * colonne (2), colonne (2) * colonne (2)", etc. vous ne pouvez pas (je crois) spécifier plusieurs indices dans la fonction Column() dans aucun scénario.Une meilleure solution serait d'obtenir une liste de références de colonnes et de sous-ensembler la liste en utilisant vos index de colonnes comme ceci :
dt = Current Data Table();
all_cols = dt << Get Column Reference();
//let's say factors are columns 2-4
effect_cols = all_cols[2::4];
Maintenant, JMP ne semble pas aimer me laisser simplement insérer la variable effect_cols directement comme argument Effets pour le script Ajuster le modèle.Il recherche une colonne nommée "effect_cols" plutôt que d'évaluer la liste.Par conséquent, vous analysez le script Fit Model à partir d'une chaîne que nous substituons dans l'évaluation de effect_cols comme ceci :
Step_Str = "\[step = dt << Fit Model(
Y( Column(5) ),
Effects(
^effect_cols^
),
Personality( "Stepwise" ),
Run
);]\";
eval(parse(eval insert(Step_Str)));
Cela devrait fonctionner pour vous si vous n’avez que des effets principaux.Sinon, vous devrez être un peu plus créatif.C'est quand même totalement faisable.
Passons maintenant à la question de la suppression des effets.Remove ne fonctionnera que si vous lui donnez un argument de chaîne correspondant aux noms de l'un des effets.Vous pouvez utiliser une séquence eval(parse(eval insert())) comme nous l'avons fait auparavant pour analyser une chaîne où nous ajoutons une variable contenant le nom de l'effet que nous voulons supprimer.Voici un exemple où je prends l'effet avec la plus grande valeur p et le supprime :
//Get a reference to the report window containing the stepwise object
step_rprt = step << Report;
//get the term names and current p-values from Current Estimates
terms = step_rprt["Current Estimates"][StringColBox(1)] << Get;
pvals = step_rprt["Current Estimates"][NumberColBox(5)] << Get;
//Remove Intercept from each
remove from(terms,1); //remove intercept
remove from(pvals,1); //remove p-value for intercept
max_index = Contains(pvals, max(pvals)); //get index of max p-value
//create an expression to remove the term with the largest p-value
remove_worst = parse(eval insert("\[step << Remove("^terms[max_index]^");]\"));
//Evaluate the expression
eval(remove_worst);J'espère que cela pourra aider!