Régression généralisée : récupère le script des paramètres de réglageEn utilisant les méthodes de retrait de la plate-forme de régression généralisée (lasso, filet élastique, etc.) avec une distribution log-normale, je dois créer un nuage de points du paramètre de réglage par rapport à diverses statistiques d'ajustement (log de vraisemblance négative, R2 généralisé). J'espérais le faire en préréglant les valeurs du paramètre de réglage et en préréglant également le nombre de points de grille sur 1 (le nombre de points le long de la grille que JMP utilise pour le paramètre de réglage).
Le script ci-dessous ne reconnaît pas les différentes valeurs du paramètre de réglage (^PEN^) et rapporte des valeurs identiques pour chaque itération de la boucle d'estimation du modèle. Ma meilleure hypothèse est qu'il ne reconnaît pas les valeurs nécessaires pour ces deux lignes dans le script :
Lambda Penalty( ^PEN^ ),
Number of Grid Points( 1 ),
Toute sagesse serait grandement appréciée!
//Script to retrieve parametrics negative logl and R2GEN
//Both data tables below must be open for script to run
dt = Data Table("JMP Test Data.jmp");
dt_pens = Data Table("Penalties1.jmp");
//Get copy of penalty table to store results
dt_results = dt_pens << Subset( All rows, Selected columns only( 0 ) );
dt_results << New Column("RsqGEN Training");
dt_results << New Column("RsqGEN Validation");
dt_results << New Column("RsqGEN Test");
dt_results << New Column("neglogl Training");
dt_results << New Column("neglogl Validation");
dt_results << New Column("neglogl Test");
dt_results << New Column("N Training");
dt_results << New Column("N Validation");
dt_results << New Column("N Test");
dt_results << New Column("Tuning Param");
for(i = 1, i<= N Row(dt_pens), i++,
PEN = dt_pens:Penalty[i];
str = Eval Insert("\[report = (dt << Fit Model(
Y( :Y1 ),
X( :X1, :X2, :X3, :X4),
Validation( :Name( "Train/Valid/Test" ) ),
Lambda Penalty( ^PEN^ ),
Number of Grid Points( 1 ),
Personality( "Generalized Regression" ),
Generalized Distribution( "LogNormal" ),
Run(
Fit(
Estimation Method( Lasso( Adaptive ) ),
Validation Method( Validation Column )
)
),
Go,
invisible
)) << Report;]\");
//Fit the model
Eval(Parse(str));
//Get the fit stats and insert them into the results table
Train = report["Model Summary"][NumberColBox(1)] << Get;
Valid = report["Model Summary"][NumberColBox(2)] << Get;
Test = report["Model Summary"][NumberColBox(3)] << Get;
report << Close Window;
dt_results:RsqGEN Training[i] = Train[7];
dt_results:RsqGEN Validation[i] = Valid[7];
dt_results:RsqGEN Test[i] = Test[7];
dt_results:neglogl Training[i] = Train[3];
dt_results:neglogl Validation[i] = Valid[3];
dt_results:neglogl Test[i] = Test[3];
dt_results:N Training[i] = Train[1];
dt_results:N Validation[i] = Valid[1];
dt_results:N Test[i] = Test[1];
// dt_results:Tuning Param[i] = Train[8];
);
Re : Régression généralisée - Récupérer le script de paramètre de réglageExcellent! Merci Clay...
Re : Régression généralisée - Récupérer le script de paramètre de réglageQuelque chose comme ça? Les pénalités sont dans la première rangée et les prédictions sont dans les rangées suivantes.
dt = Open( "$SAMPLE_DATA/Diabetes.jmp" );
fm = Fit Model(
Y( :Y ),
Effects( :BMI, :BP, :Total Cholesterol, :LDL, :HDL ),
Personality( "Generalized Regression" ),
Generalized Distribution( "Normal" ),
Run( Fit( Estimation Method( Lasso ), Validation Method( AICc ) ) )
);
lambdas = fm << (Fit[1] << get penalty grid);
lambdas = lambdas`;
nGridPoints = ncol(lambdas);
// loop through each solution and save the predictions
for(i=0, i<NGRIDPOINTS></NGRIDPOINTS>
Re : Régression généralisée - Récupérer le script de paramètre de réglageAh, je vois où tu veux en venir. Mais j'ai besoin de la valeur numérique du lambda dans le tableau de données pour pouvoir l'utiliser dans un graphique ultérieur. Serait-il possible de créer une nouvelle table de sortie avec les lambdas dans la première ligne et les prédictions dans les lignes suivantes ?
Re : Régression généralisée - Récupérer le script de paramètre de réglageCela fonctionnerait-il de mettre la valeur lambda dans le nom de la formule de prédiction ?
Si oui, vous pouvez faire quelque chose comme ci-dessous. Le script fait correspondre les valeurs de pénalité que nous obtenons de <
dt = Open( "$SAMPLE_DATA/Diabetes.jmp" );
fm = Fit Model(
Y( :Y ),
Effects( :BMI, :BP, :Total Cholesterol, :LDL, :HDL ),
Personality( "Generalized Regression" ),
Generalized Distribution( "Normal" ),
Run( Fit( Estimation Method( Lasso ), Validation Method( AICc ) ) )
);
lambdas = fm << (Fit[1] << get penalty grid);
// loop through each solution and save the predictions
for(i=0, i<150, i++, // the first solution is solution 0
fm << (Fit[1] << set solution ID(i));
fm << (Fit[1] << save prediction formula);
newc =column(dt, ncol(dt));
newc << set name( newc<<GET name=""></GET>
Re : Régression généralisée - Récupérer le script de paramètre de réglageMerci pour la réponse rapide, Clay. Très appréciée.
Le problème que j'ai maintenant est que je ne sais pas comment contrôler le paramètre de pénalité pour chaque itération. Dans un script précédent, vous aviez ceci :
penaltyVector <SPAN class="token operator">=</SPAN> fm <SPAN class="token operator"><</SPAN><SPAN class="token operator"><</SPAN> <SPAN class="token punctuation">(</SPAN>fit<SPAN class="token punctuation">[</SPAN><SPAN class="token number">1</SPAN><SPAN class="token punctuation">]</SPAN> <SPAN class="token operator"><</SPAN><SPAN class="token operator"><</SPAN><SPAN class="token messages"> get penalty grid</SPAN><SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">;</SPAN>
Je ne reçois pas non plus de nouveau tableau JMP avec les résultats.
Juste à des fins de vérification, serait-il possible d'ajouter comme première ligne dans la table de sortie la valeur du paramètre de pénalité de cette itération particulière ?
Re : Régression généralisée - Récupérer le script de paramètre de réglageHé,
Voici une façon de procéder. J'ai écrit un petit exemple ci-dessous en utilisant l'ensemble de données sur le diabète du dossier de données d'échantillon. La clé est d'envoyer le message Set Solution ID à l'ajustement. Puisque vous avez 150 points dans votre grille de paramètres, vous lui enverriez 0,1,2,...,149 pour définir le vecteur de paramètres pour chaque solution du chemin. Je regrette d'avoir fait la première solution indexée sur 0 au lieu de 1, mais je pense que nous sommes coincés avec cette syntaxe pour l'instant.
Faites-moi savoir si cela n'a pas de sens ou si cela ne fait pas ce que vous en avez besoin.
Merci,
Argile
dt = Open( "$SAMPLE_DATA/Diabetes.jmp" );
fm = Fit Model(
Y( :Y ),
Effects( :BMI, :BP, :Total Cholesterol, :LDL, :HDL ),
Personality( "Generalized Regression" ),
Generalized Distribution( "Normal" ),
Run( Fit( Estimation Method( Lasso ), Validation Method( AICc ) ) )
);
// loop through each solution and save the predictions
for(i=0, i<150, i++, // the first solution is solution 0
fm << (Fit[1] << set solution ID(i));
fm << (Fit[1] << save prediction formula);
// if you want to give the column a different name, send a message here.
);
Re : Régression généralisée - Récupérer le script de paramètre de réglageDésolé de revoir ça, Clay. Cela fait longtemps... Vous m'avez gentiment fourni un script qui me permet de faire varier la valeur du paramètre de pénalité/réglage pour les modèles de lasso et de récupérer diverses informations sur le modèle pour chaque valeur de la pénalité. Je dois maintenant faire quelque chose de plus : pour chaque valeur de la pénalité, enregistrez la valeur de prédiction dans un tableau, puis concentrez ces colonnes sur toutes les valeurs de la pénalité. Je n'ai pas réussi à le faire. Pour cette situation particulière, la pénalité sera variée 150 fois différentes et, ainsi, 150 modèles de lasso seront estimés.
Toute aide serait énormément appréciée.
Re : Régression généralisée - Récupérer le script de paramètre de réglageDans la documentation, il est indiqué que nous ne pouvons pas obtenir le paramètre de réglage si nous utilisons le CV K-fold.Je suis capable d'obtenir cela avec R glmnet et avec le lasso de Matlab.Je fais du lasso avec régression logistique.Existe-t-il un moyen de le récupérer car il est clair que JMP doit utiliser une méthode pour sélectionner lambda.
Re : Régression généralisée - Récupérer le script de paramètre de réglageAucun problème!
1 et 2 - voir l'exemple ci-dessous pour obtenir les valeurs AICc et BIC.
3. Les estimations de paramètres dans le chemin de la solution sont les estimations de paramètres que vous obtenez des prédicteurs centrés et mis à l'échelle. Vous pouvez les obtenir à l'aide de la commande <
4. Les valeurs Scaled -LogLikelihood sont simplement les log-vraisemblances négatives divisées par la somme des fréquences. Ainsi, si vous avez 100 observations dans votre ensemble de validation, par exemple, vous utiliserez << Get Validation Negative LogLikelihood pour obtenir un vecteur des probabilités, puis divisez ce vecteur par 100. Je les mets simplement à l'échelle en fonction de la taille de l'échantillon afin que nous puissions tracer les ensembles de formation et de validation sur la même échelle.
5. L'axe horizontal est la norme L1 des estimations des paramètres centrés et mis à l'échelle (à l'exclusion de l'ordonnée à l'origine). Vous voudrez donc appeler <
Voici un exemple qui rassemble la syntaxe que vous recherchiez.
dt = Open("$SAMPLE_DATA/Diabetes.jmp");
fm = Fit Model(
Y( :Y ),
Effects( :Age, :Gender, :BMI ),
Personality( "Generalized Regression" ),
Generalized Distribution( "Normal" ),
Run( Fit( Estimation Method( Lasso ), Validation Method( AICc ) ) )
);
penaltyVector = fm << (fit[1] << get penalty grid);
bics = fm << (fit[1] << get BIC path);
aiccs = fm << (fit[1] << get aicc path);
solutionPath = fm << (fit[1] << get solution path);
solutionPath = solutionPath`; // transpose for convenience
summaryTable = as table( penaltyVector || aiccs || bics || solutionPath);
column(1) << set name("Lambda");
column(2) << set name("aicc");
column(3) << set name("bic");
column(4) << set name("Intercept");
column(5) << set name("Age parm");
column(6) << set name("Gender parm");
column(7) << set name("BMI parm");
column(8) << set name("sigma parm");
summaryTable << new column("L1 norm", Formula(abs(:Age Parm) + abs(:Gender Parm) + abs(:BMI parm)));
// run this to recreate the solution path
Graph Builder(
Show Control Panel( 0 ),
Variables(
X( :L1 norm ),
Y( :Age parm ),
Y( :Gender parm, Position( 1 ) ),
Y( :BMI parm, Position( 1 ) )
),
Elements( Points( X, Y( 1 ), Y( 2 ), Y( 3 ), Legend( 3 ) ) )
);
Re : Régression généralisée - Récupérer le script de paramètre de réglageMerci Clay. C'est très utile.
Heureux de savoir que je n'avais pas perdu la tête lorsque je n'ai pas trouvé la syntaxe de la grille des pénalités et autres. Puis-je également connaître la syntaxe de ces éléments ?
Avec mes remerciements et ma gratitude...
1. BIC
2. AICc
3. La mesure "Parameter Estimates" - l'axe vertical sur l'axe le plus à gauche des deux graphiques dans la sortie Solution Path.
4. La mesure "Scaled -Loglikehood" - l'axe vertical sur le graphique le plus à droite dans la sortie Solution Path.
5. La "Magnitude des estimations des paramètres mis à l'échelle" - l'axe horizontal sur les deux graphiques du chemin de la solution.
Re : Régression généralisée - Récupérer le script de paramètre de réglage1. Pourriez-vous publier une partie de votre script pour aider à résoudre les problèmes ? Sinon, j'ai ajouté quelques commentaires à l'exemple ci-dessous.
2. Habituellement, le meilleur endroit pour trouver la syntaxe pour ce genre de chose est dans l'Index des scripts d'objet (Aide > Index des scripts). Dans ce cas cependant, les fonctions n'apparaissent pas dans l'index car elles ont été principalement ajoutées pour tester la plate-forme en interne. Nous les ferons apparaître dans la prochaine version afin qu'ils soient plus faciles à trouver.
J'ai mis à jour mon exemple précédent pour utiliser les probabilités au lieu des valeurs R^2.
// dt is a reference to the data table
dt = Open( "$SAMPLE_DATA/Diabetes.jmp" );
// fm is a reference to this instance of Fit Model
fm = dt << Fit Model(
Y( :Y ),
Effects(
:Age,
:Gender,
:BMI,
:BP
),
Personality( "Generalized Regression" ),
Generalized Distribution( "Normal" ),
Validation( :Validation ),
Run(
Fit(
Estimation Method( Lasso( Adaptive ) ),
Validation Method( Validation Column )
)
)
);
// take the first model in the platform and store the penalty values in a vector
penaltyVector = fm << (fit[1] << get penalty grid);
// so on for training and validation likelihoods
trainingnll = fm <<(fit[1] << Get Training Negative LogLikelihood);
validationnll = fm << (fit[1] << Get Validation Negative LogLikelihood);
as table(penaltyVector || trainingnll || validationnll);
Re : Régression généralisée - Récupérer le script de paramètre de réglageMerci Clay. C'était très utile. Quelques questions complémentaires, si je puis me permettre...
1. Comment récupérer les vecteurs contenant les valeurs de la grille de pénalité et les valeurs Rsq ? J'ai essayé de nombreuses variantes du script que vous avez fourni et je suis arrivé les mains vides.
2. Comment puis-je découvrir la syntaxe de choses comme "grille de pénalité" dans votre script ? Je demande parce que je voudrais aussi récupérer les log-likehoods négatifs...
Très appréciée.
Re : Régression généralisée - Récupérer le script de paramètre de réglageLa plate-forme n'est actuellement pas configurée pour vous permettre de spécifier vous-même les valeurs de pénalité. Au lieu de cela, JMP essaie une grille de valeurs de pénalité, puis présente la valeur de pénalité qui vous convient le mieux. Vous avez un certain contrôle sur la façon dont la grille est définie à l'aide du panneau Contrôles avancés dans le lancement du modèle.

Une fois que vous avez un ajustement, il existe des fonctions JSL pour obtenir la grille des valeurs de pénalité et des carrés r à partir de la plate-forme. Vous pouvez faire quelque chose comme l'exemple ci-dessous
dt = Open( "$SAMPLE_DATA/Diabetes.jmp" );
fm = dt << Fit Model(
Y( :Y ),
Effects(
:Age,
:Gender,
:BMI,
:BP
),
Personality( "Generalized Regression" ),
Generalized Distribution( "Normal" ),
Validation( :Validation ),
Run(
Fit(
Estimation Method( Lasso( Adaptive ) ),
Validation Method( Validation Column )
)
)
);
penaltyVector = fm << (fit[1] << get penalty grid);
trainingR2 = fm <<(fit[1] << get training rsquare path);
validationR2 = fm << (fit[1] << get validation rsquare path);
//testR2 = fm << (fit[1] << get test rsquare path); // this example doesn't have a test set
Re : Régression généralisée - Récupérer le script de paramètre de réglageLa deuxième table de données, Penalties1.jmp, est jointe.