Re: Bereich aus Grafik extrahierenIch kenne keine direkte Methode, aber hier sind ein paar Ideen.Einige wären ein bisschen Arbeit für das Skript und wahrscheinlich vermute ich, dass keine für kleine Probleme viel schneller wäre.
- Speichern Sie eine Formel für jede dieser Zeilen in der Datentabelle, indem Sie die Parameter und Standardfehler aus der Tabelle im bivariaten Bericht ziehen und dann eine Spalte mit der entsprechenden Formel erstellen.Verwenden Sie dann den in den Profiler integrierten Optimierer, um für jeden zu lösen.
- Speichern Sie relativ wenige Punkte mit der Brute-Force-Methode und passen Sie ihnen dann eine neue Kurve mit dem Anpassungsmodell an, und dann Speichern Sie die Vorhersageformel und lösen Sie mit dem Optimierer.
- Passen Sie stattdessen mithilfe des Anpassungsmodells an, wobei Sie die Vorhersageformel direkt extrahieren können sollten, aber möglicherweise nicht das CI.
- Verwenden Sie die Brute-Force-Methode und interpolieren Sie zwischen den nächsten paar Punkten, entweder linear zwischen den letzten beiden oder für dieses Problem quadratisch zwischen den nächsten drei.
Faktorbereich aus bivariaten Graphen extrahierenWie extrahiere ich effizient die Kreuzungspunkte dieser Kurve und ihres 95%-KI mit einem willkürlichen Y-Wert?

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 )}
)
)
);Ich möchte also die Ratio-Werte erhalten, bei denen die Kurve und ihr 95%-KI +/- 1,96 kreuzen (also insgesamt 6 Werte). Gibt es bessere Lösungen als die Brute-Force, die ich mir vorstellen kann: die Vorhersagen und die Formel für die mittlere Konfidenzgrenze in eine Tabelle ausgeben und Zeilen mit Werten zur Tabelle hinzufügen, um zu sehen, wann die Grenzen überschritten werden?
SkriptingRe: Faktorbereich aus bivariaten Graphen extrahierenMöglicherweise können Sie die Funktion Minimize() und den Ausdruck für die Vertrauensgrenze verwenden. Siehe die Hilfe für Optimierungsmethoden .
Re: Faktorbereich aus bivariaten Graphen extrahieren@markbailey Danke, ich habe versucht, das zu versuchen, aber die Syntax ist mir unklar.
Das ist so weit, wie ich es habe, aber jetzt muss ich herausfinden, wie ich es mit den richtigen Optimierungsbeschränkungen füttere:
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), {})Der letzte Teil funktioniert nicht. Danke für Ihre Hilfe!
Re: Faktorbereich aus bivariaten Graphen extrahierenIch frage mich über einen anderen Ansatz. Was passiert, wenn Sie den Vorhersage-Profiler und eine Funktion zur Zielerwünschtheit abgleichen mit Ihrer Zielantwort verwenden? Dann können Sie einfach den vorhergesagten Mittelwert und die 95%-Konfidenzintervallschätzung des Mittelwerts auswählen.
Vielleicht bin ich von deinem ursprünglichen Ziel abgewichen...
Re: Faktorbereich aus bivariaten Graphen extrahierenDein Code war etwas chaotisch. Ich habe es aufgeräumt und das Beispiel beendet, obwohl ich vielleicht immer noch das falsche Ziel verfolgt habe.
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: Faktorbereich aus bivariaten Graphen extrahierenJa, das Problem dabei ist, dass es normalerweise mehrere Kreuzungen mit dem Zielwert gibt (eine links und eine rechts) und mit dem Erwünschtheitsmaximierer erhält man zufällig eine der beiden.
Ich habe inverse Vorhersagen unter dem Anpassungsmodell ausprobiert, aber das unterstützt keine quadratischen Terme.
Re: Faktorbereich aus bivariaten Graphen extrahierenJa, genau das funktioniert, um das lokale Minimum zu finden, aber es ist immer noch schwierig, von dort mit 1,96 zur nächsten Kreuzung zu gelangen. Sie müssten immer noch die Kurve hinaufgehen, bis die Werte 1,96 überschreiten.
Um dies temporär zu lösen, habe ich eine Funktion dafür gebaut, die nur kleine Schritte macht und in beide Richtungen geht, bis der Wert die Grenzen (oder die maximale Anzahl von Schritten) überschreitet, aber ich hatte erwartet, dass es eine Solver-Funktion in JMP gibt, die implementiert würde einen besseren Algorithmus (wie der, der in die nichtlineare Plattform eingebaut ist). Ich denke, im Moment habe ich, was ich brauche, aber ich bin immer offen für schönere Wege, es zu tun.
Betreff: Extrahieren Sie den Faktorbereich aus dem bivariaten DiagrammSie können dies mit dem in den Profiler integrierten Optimierer tun.Stellen Sie die Reaktionsgrenzen so ein, dass sie mit dem Ziel übereinstimmen, und verwenden Sie zum Auffinden der oberen und unteren Werte einfach das Raster für den Rücksetzungsfaktor, um den zu durchsuchenden Wertebereich zu definieren, entweder über oder unter dem 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;
Sie sollten auch in der Lage sein, den Ausdruck zu ändern, den Sie an die Minimierungsfunktion senden, indem Sie einfach 1,96 subtrahieren und den Rest minimieren, um dasselbe Ergebnis zu erhalten.Aus irgendeinem Grund erhalte ich jedoch leicht unterschiedliche Werte, selbst nachdem ich Toleranzen angepasst habe (1.07 in Profiler v 1.03 mit Minimierung).
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 );