Re: Extraire la plage du graphiqueJe ne connais pas de méthode directe mais voici quelques idées.Certains seraient un peu de travail à scripter et probablement je soupçonne qu'aucun ne serait beaucoup plus rapide pour de petits problèmes.
- Enregistrez une formule pour chacune de ces lignes dans le tableau de données en extrayant les paramètres et les erreurs standard du tableau dans le rapport bivarié, puis en créant une colonne avec la formule appropriée.Utilisez ensuite l'optimiseur intégré au profileur pour résoudre chacun d'eux.
- Enregistrez relativement peu de points à l'aide de la méthode de la force brute, puis ajustez-y une nouvelle courbe à l'aide du modèle d'ajustement, et alors enregistrez la formule de prédiction et résolvez avec l'optimiseur.
- Ajustez en utilisant le modèle d'ajustement à la place où vous devriez pouvoir extraire la formule de prédiction directement, mais peut-être pas le CI.
- Utilisez la méthode de la force brute et interpolez entre les quelques points les plus proches, soit linéaires entre les deux derniers, soit pour ce problème quadratique entre les trois les plus proches.
Extraire la plage de facteurs du graphique bivariéComment puis-je extraire efficacement les points de croisement de cette courbe et son IC à 95% avec une valeur Y arbitraire.

dt = Open( "$sample_data/Growth.jmp" );
biv = Bivariate(
Y( :age ),
X( :ratio ),
Fit Line( {Line Color( {204, 121, 41} )}, save studentized residuals ),
SendToReport(
Dispatch(
{},
"Bivar Plot",
FrameBox,
{Grid Line Order( 3 ), Reference Line Order( 4 )}
)
)
);
biv << (Curve[1] << Save Studentized Residuals);
biv2 = Bivariate(
Y( :Studentized Residuals age ),
X( :ratio ),
Fit Polynomial( 2, {Confid Shaded Fit( 1 ), Line Color( {212, 73, 88} )} ),
SendToReport(
Dispatch(
{},
"ratio",
ScaleBox,
{Min( 0.2796875 ), Max( 1.2666259765625 ), Inc( 0.2 ), Minor Ticks( 1 )}
),
Dispatch(
{},
"Studentized Residuals age",
ScaleBox,
{Add Ref Line( 1.96, "Solid", "Black", "", 1 ),
Add Ref Line( -1.96, "Solid", "Black", "", 1 )}
)
)
);J'aimerais donc obtenir les valeurs de Ratio où la courbe et son IC à 95% se croisent +/- 1,96 (donc 6 valeurs au total). Existe-t-il de meilleures solutions que la force brute à laquelle je peux penser : vider les prédictions et la formule de limite de confiance moyenne dans une table et ajouter des lignes avec des valeurs à la table pour voir quand elle dépasse les limites ?
ScriptRe : Extraire la plage de facteurs d'un graphique bivariéVous pourrez peut-être utiliser la fonction Minimize() et l'expression de la limite de confiance. Voir l'aide pour méthodes d'optimisation .
Re : Extraire la plage de facteurs d'un graphique bivarié@markbailey merci, j'ai essayé de tenter le coup mais la syntaxe n'est pas claire pour moi.
C'est tout ce que j'ai obtenu, mais maintenant je dois trouver comment lui donner les bonnes contraintes d'optimisation :
Names Default To Here( 1 );
dt = Open( "$sample_data/Growth.jmp" );
biv = Bivariate(
Y( :age ),
X( :ratio ),
Fit Line( {Line Color( {204, 121, 41} )}, save studentized residuals ),
SendToReport(
Dispatch(
{},
"Bivar Plot",
FrameBox,
{Grid Line Order( 3 ), Reference Line Order( 4 )}
)
)
);
biv << (Curve[1] << Save Studentized Residuals);
biv << close window();
biv2 = Bivariate(
Y( :Studentized Residuals age ),
X( :ratio ),
Fit Polynomial( 2, {Confid Shaded Fit( 1 ), Line Color( {212, 73, 88} )} ),
SendToReport(
Dispatch(
{},
"ratio",
ScaleBox,
{Min( 0.2796875 ), Max( 1.2666259765625 ), Inc( 0.2 ), Minor Ticks( 1 )}
),
Dispatch(
{},
"Studentized Residuals age",
ScaleBox,
{Add Ref Line( 1.96, "Solid", "Black", "", 1 ),
Add Ref Line( -1.96, "Solid", "Black", "", 1 )}
)
)
);
biv << (Curve[1] << Mean Confidence Limit Formula);
f =column(dt, n cols(dt)) << Get Formula;
fs = substitute(name expr(f), expr(:ratio), expr(x1));
/*A = [1 5];
b = [-1.96, 1.96];
minFun = Constrained Maximize(
f,
{x1( 0, 5 )},
<<LESSTHANEQ></LESSTHANEQ>
minimize(name expr(f), {})La dernière partie ne fonctionne pas. Merci pour ton aide!
Re : Extraire la plage de facteurs d'un graphique bivariéJe m'interroge sur une autre approche. Que se passe-t-il si vous utilisez le profileur de prédiction et une fonction de désirabilité Correspondance cible avec votre réponse cible ? Ensuite, vous pouvez simplement choisir la moyenne prédite et l'estimation de l'intervalle de confiance à 95% de la moyenne.
Je me suis peut-être éloigné de votre objectif initial...
Re : Extraire la plage de facteurs d'un graphique bivariéVotre code était un peu brouillon. Je l'ai nettoyé et j'ai terminé l'exemple, même si je suis peut-être encore en train de viser le mauvais objectif.
Names Default To Here( 1 );
// example data set
dt = Open( "$sample_data/Growth.jmp" );
// fit first-order polynomial model to response
biv = Bivariate(
Y( :age ),
X( :ratio ),
Fit Line
);
// save residuals for next step
biv << (Curve[1] << Save Studentized Residuals);
biv << Close Window();
// fit second-order polynomial model to residuals
biv = Bivariate(
Y( :Studentized Residuals age ),
X( :ratio ),
Fit Polynomial( 2, {Confid Shaded Fit( 1 ), Line Color( {212, 73, 88} )} )
);
// save formulas for lower / upper 95% confidence bound
biv << (Curve[1] << Mean Confidence Limit Formula);
// get upper formula
f = Column( dt, N Cols( dt ) ) << Get Formula;
// replace predictor name with x
fs = Substitute( Name Expr( f ), Expr( :ratio ), Expr( x ) );
// initialize x, could get x that predicts mean residual = 0
x = 0.5;
// minimize expression that is Abs( residual ), or mean = 0
fa = Insert( Expr( Abs() ), Name Expr( fs ) );
Minimize( fa, { x } );
Show( x );Re : Extraire la plage de facteurs d'un graphique bivariéOui, le problème avec celui-ci est qu'il y a généralement plusieurs croisements avec la valeur cible (un à gauche et un à droite) et avec le maximiseur de désirabilité, vous obtenez au hasard l'un des deux.
J'ai essayé les prédictions inverses sous le modèle d'ajustement mais cela ne prend pas en charge les termes quadratiques.
Re : Extraire la plage de facteurs d'un graphique bivariéOui, exactement cela fonctionne pour trouver le minimum local, mais il est toujours difficile de se rendre au prochain croisement avec 1,96 à partir de là. Vous auriez toujours besoin de remonter la courbe jusqu'à ce que les valeurs dépassent 1,96.
Pour résoudre ce problème temporairement, j'ai construit une fonction qui ne fait que de petits pas et sort dans les deux sens jusqu'à ce que la valeur dépasse les limites (ou le nombre maximum d'étapes) mais je m'attendais à ce qu'il y ait une fonction de solveur dans JMP qui implémenterait un meilleur algorithme (comme ce qui est intégré à la plate-forme non linéaire). Je suppose que pour l'instant j'ai ce dont j'ai besoin, mais je suis toujours ouvert à de meilleures façons de le faire.
Re : Extraire la plage de facteurs d'un graphique bivariéVous pouvez le faire en utilisant l'optimiseur intégré au profileur.Définissez les limites de réponse pour correspondre à la cible, puis pour trouver les valeurs supérieures et inférieures, utilisez simplement la grille des facteurs de réinitialisation pour définir la plage de valeurs à rechercher, au-dessus ou au-dessous du minimum.
Profiler(
Y( :Lower 95% Mean Studentized Residuals age ),
Profiler(
1,
Desirability Functions( 1 ),
Lower 95% Mean Studentized Residuals age <<
Response Limits(
{Lower( -0.04, 0.0183 ), Middle( 1.96, 1 ), Upper( 3.96, 0.0183 ),
Goal( "Match Target" ), Importance( 1 )}
),
Term Value( ratio( 0.8, Min( 0 ), Max( 0.8 ), Lock( 0 ), Show( 1 ) ) )
),
SendToReport(
Dispatch(
{"Prediction Profiler"},
"1",
ScaleBox,
{Min( 0 ), Max( 0.8 ), Inc( 0.2 ), Minor Ticks( 0 )}
)
)
) << Maximize Desirability;
Profiler(
Y( :Lower 95% Mean Studentized Residuals age ),
Profiler(
1,
Desirability Functions( 1 ),
Lower 95% Mean Studentized Residuals age <<
Response Limits(
{Lower( -0.04, 0.0183 ), Middle( 1.96, 1 ), Upper( 3.96, 0.0183 ),
Goal( "Match Target" ), Importance( 1 )}
),
Term Value( ratio( 1.52, Min( 0.8 ), Max( 2 ), Lock( 0 ), Show( 1 ) ) )
),
SendToReport(
Dispatch(
{"Prediction Profiler"},
"1",
ScaleBox,
{Min( 0.8 ), Max( 2 ), Inc( 0.2 ), Minor Ticks( 0 )}
)
)
) << Maximize Desirability;
Vous devriez également pouvoir modifier l'expression que vous envoyez à la fonction de réduction en soustrayant simplement 1,96 et en minimisant le résidu pour obtenir le même résultat.Pour une raison quelconque, j'obtiens des valeurs légèrement différentes même après avoir ajusté les tolérances (1.07 dans le profileur v 1.03 avec minimiser).
fa = Insert( Expr( Abs() ), parse( "abs( " || char( Name Expr( fs ) ) || " - 1.96 )" ) );
// find lower value
x = 0.2;
Minimize( fa, { x(0.2,0.8) } );
Show( x );
// find upper value
x = 1;
Minimize( fa, { x(0.8,1.5) } );
Show( x );