Faktorbereich aus bivariatem Diagramm extrahierenWie extrahiere ich effizient die Kreuzungspunkte dieser Kurve und ihres 95 %-KI mit einem beliebigen 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 )}
)
)
);Daher möchte ich die Verhältniswerte erhalten, bei denen die Kurve und ihr 95 %-KI +/- 1,96 kreuzen (also insgesamt 6 Werte). Gibt es bessere Lösungen als die rohe Gewalt, die ich mir vorstellen kann: die Vorhersagen und die Formel für die mittlere Konfidenzgrenze in eine Tabelle zu übertragen und der Tabelle Zeilen mit Werten hinzuzufügen, um zu sehen, wann die Grenzen überschritten werden?
Erweiterte statistische ModellierungDatenzugriffDatenexploration und -visualisierungMassenanpassungBetreff: Faktorbereich aus bivariatem Diagramm extrahierenErweitern @Craige_Hales Und @Mark_Bailey Mit dem Code von können Sie so etwas wie das Folgende tun, um das Gesamtminimum zu ermitteln, und dieses dann als Grenze für nachfolgende Suchvorgänge auf jeder Seite verwenden. Auf diese Weise sind Sie nicht so stark auf den Anfangswert angewiesen.Wenn Sie außerdem ein Quadrat anstelle eines Absolutwerts verwenden, entfällt die Ecke. In der Praxis hatte ich jedoch viel Glück bei der Verwendung des Absolutwerts und anderer Funktionen mit schrittweisen Änderungen im Optimierer des Profilers.
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 formulas
fUpper = Column( dt, N Cols( dt ) ) << Get Formula;
fLower = Column( dt, N Cols( dt ) - 1 ) << Get Formula;
// replace predictor name with x
fsUpper = Substitute( Name Expr( fUpper ), Expr( :ratio ), Expr( x ) );
fsLower = Substitute( Name Expr( fLower ), Expr( :ratio ), Expr( x ) );
// initialize x, could get x that predicts mean residual = 0
x = 0.5;
// find the minimum of the whole expression, one solution will fall above and one below this value
fOverallMin = Name Expr( fsLower );
Minimize( fOverallMin, { x } );
xOverallMin = x;
// find where the value cross the x axis on each side of the overall min
x = xOverallMin - 1;
fMinCrossingTarget = Insert( Expr( Power() ), Insert( Expr( add(-1.96) ), Name Expr( fsLower ) ) );
Minimize( fMinCrossingTarget, { x(-1000, xOverallMin) } );
xMinLower = x;
x = xOverallMin + 1;
Minimize( fMinCrossingTarget, { x(xOverallMin, 1000) } );
xMinUpper = x;
x = xOverallMin - 1;
fMaxCrossingTarget = Insert( Expr( Power() ), Insert( Expr( add(-1.96) ), Name Expr( fsUpper ) ) );
Minimize( fMaxCrossingTarget, { x(-1000, xOverallMin) } );
xMaxLower = x;
x = xOverallMin + 1;
Minimize( fMaxCrossingTarget, { x(xOverallMin, 1000) } );
xMaxUpper = x;
show(xOverallMin, xMinLower, xMinUpper, xMaxLower, xMaxUpper);
Betreff: Faktorbereich aus bivariatem Diagramm extrahierenSie können das Faktorraster anpassen (Faktorraster vom roten Dreieck zurücksetzen), um nur den einen oder anderen Grenzwert zu erhalten.
Betreff: Faktorbereich aus bivariatem Diagramm extrahierenIch denke, das Problem besteht darin, dass die Absolutwertfunktion eine Kurve erstellt, die keine schöne Ableitung hat, wodurch die Minimierung wahrscheinlich fehlschlägt. ich hoffte @ich h Die Idee würde Minimieren dazu zwingen, in der richtigen Nachbarschaft zu bleiben, aber vielleicht auch nicht.
Ich habe im Moment keine Zeit, mich damit auseinanderzusetzen; Es ist wahrscheinlich, dass es für dieses Problem eine Standardalternative zu abs() gibt ... die eine glattere Funktion ergibt. (Vielleicht quadrieren? So etwas in der Art.)
Bearbeiten: Und Ihr Ergebnis stimmt mit meinem überein, weshalb ich den Kommentar zur Sichtprüfung hatte. Die abs-Funktion erstellt eine Ecke in der zu minimierenden Funktion, und die Steigung in der Nähe dieser Ecke wird von der Minimierungsfunktion verwendet und erwartet eine stetige (2.?) Ableitung auf jeder Seite der Antwort. Da der Hang sofort Es ist erstaunlich, dass es manchmal Antworten gibt, die nahe beieinander liegen. Ich denke, die Meldung im Protokoll könnte darauf zurückzuführen sein.
Betreff: Faktorbereich aus bivariatem Diagramm extrahierenIch habe verzweifelt versucht, einen Algorithmus für den Startpunkt zu finden, zum Beispiel habe ich die quadratische Formel verwendet, um den vorhergesagten Kurvendurchschnitt mit 1,96 zu berechnen, und selbst wenn man diese Zahl als Startbedingung einsetzt, erhält man ein ziemlich unvorhersehbares Verhalten:

Vielen Dank, dass Sie gezeigt haben, wie es verwendet werden kann. Ich habe aus diesem Beispiel viel gelernt, aber es ist noch nicht robust genug.
Betreff: Faktorbereich aus bivariatem Diagramm extrahieren@Craige_Hales Um das Anfangswertproblem zu lösen, könnten Sie, wenn Sie zuerst die gesamte Funktion minimieren, dieses Verhältnis als Grenze für die Minimierungssuche verwenden und garantiert die Werte auf jeder Seite finden. Für dieses Problem könnte das 0,8 sein:
Minimize( fa, { x([very small number],[min ratio - found from minimizing the function]) } );
//For this example -10 is arbitrary (could use -1E6 or something), and 0.8 is
//roughly the overall function minimum
Minimize( fa, { x(-10,0.8) } );
Betreff: Faktorbereich aus bivariatem Diagramm extrahierengeringfügige Abweichung
offset = 1.96;
// (I do not know how to pick these without a visual examination of the result.)
startingPoint = 1.1; // or 0.5 (trial and error. pick something close and check.)
// 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] << save predicteds);
biv << (Curve[1] << Mean Confidence Limit Formula);
// get formulas, using order columns were saved
fupper = Column( dt, N Cols( dt ) ) << Get Formula;
flower = Column( dt, N Cols( dt ) - 1 ) << Get Formula;
fpredicted = Column( dt, N Cols( dt ) - 2 ) << Get Formula;
// replace predictor name with x
fsupper = Substitute( Name Expr( fupper ), Expr( :ratio ), Expr( x ) );
fslower = Substitute( Name Expr( flower ), Expr( :ratio ), Expr( x ) );
fspredicted = Substitute( Name Expr( fpredicted ), Expr( :ratio ), Expr( x ) );
fsupper2 = Substitute( Expr( a - offset ), Expr( a ), Name Expr( fsupper ) ); // find zero at offset
fslower2 = Substitute( Expr( a - offset ), Expr( a ), Name Expr( fslower ) ); // find zero at offset
fspredicted2 = Substitute( Expr( a - offset ), Expr( a ), Name Expr( fspredicted ) ); // find zero at offset
// initialize x, could get x that predicts mean residual = 0
x = startingPoint;
// minimize expression that is Abs( residual ), or mean = 0
faupper = Insert( Expr( Abs() ), Name Expr( fsupper2 ) );
Minimize( faupper, {x} );
xupper = x;
Show( xupper, Eval( faupper ) );
// initialize x, could get x that predicts mean residual = 0
x = startingPoint;
// minimize expression that is Abs( residual ), or mean = 0
falower = Insert( Expr( Abs() ), Name Expr( fslower2 ) );
Minimize( falower, {x} );
xlower = x;
Show( xlower, Eval( falower ) );
// initialize x, could get x that predicts mean residual = 0
x = startingPoint;
// minimize expression that is Abs( residual ), or mean = 0
fapredicted = Insert( Expr( Abs() ), Name Expr( fspredicted2 ) );
Minimize( fapredicted, {x} );
xpredicted = x;
Show( xpredicted, Eval( fapredicted ) );
// add lines on plot
Report( biv )[axisbox( 2 )] << {Add Ref Line( xpredicted, "Solid", "Black", "P", 1 ), Add Ref Line( xupper, "Solid", "Black", "U", 1 ),
Add Ref Line( xlower, "Solid", "Black", "L", 1 )};
Report( biv )[axisbox( 1 )] << {Add Ref Line( offset, "Solid", "Black", "", 1 )};
Report( biv )[framebox( 1 )] << Frame Size( 752, 513 );
Low sideLow sideNiedrige Seite
High sideHigh side Hohe Seite
Betreff: Faktorbereich aus bivariatem Diagramm extrahierenSie können dies mit dem im Profiler integrierten Optimierer tun.Legen Sie die Antwortgrenzen so fest, dass sie mit dem Ziel übereinstimmen. Um dann die oberen und unteren Werte zu ermitteln, verwenden Sie einfach das Reset-Faktor-Raster, um den Bereich der zu durchsuchenden Werte 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, den Sie an die Minimierungsfunktion senden, zu ändern, indem Sie einfach 1,96 subtrahieren und den Rest minimieren, um das gleiche Ergebnis zu erhalten.Aus irgendeinem Grund erhalte ich jedoch leicht unterschiedliche Werte, selbst nachdem ich die Toleranzen angepasst habe (1,07 in Profiler Version 1.03 mit Minimieren).
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 );
Betreff: Faktorbereich aus bivariatem Diagramm extrahierenJa, genau das funktioniert, um das lokale Minimum zu finden, aber es ist immer noch schwierig, von dort aus 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 vorübergehend zu lösen, habe ich eine Funktion dafür erstellt, die nur kleine Schritte ausführt und in beide Richtungen geht, bis der Wert die Grenzwerte (oder die maximale Anzahl von Schritten) überschreitet. Ich hatte jedoch erwartet, dass es in JMP eine Solver-Funktion gibt, die implementiert werden kann ein besserer Algorithmus (wie der, der in die nichtlineare Plattform integriert ist). Ich denke, im Moment habe ich alles, was ich brauche, aber ich bin immer offen für schönere Möglichkeiten, es zu tun.
Betreff: Faktorbereich aus bivariatem Diagramm extrahierenJa, das Problem dabei ist, dass es normalerweise mehrere Kreuzungen mit dem Zielwert gibt (eine auf der linken und eine auf der rechten Seite) und mit dem Erwünschtheitsmaximierer Sie zufällig eine der beiden erhalten.
Ich habe inverse Vorhersagen unter dem Anpassungsmodell ausprobiert, aber das unterstützt keine quadratischen Terme.
Betreff: Faktorbereich aus bivariatem Diagramm extrahierenDein Code war etwas chaotisch. Ich habe es aufgeräumt und das Beispiel fertiggestellt, obwohl ich möglicherweise immer noch das falsche Ziel verfolge.
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 );Betreff: Faktorbereich aus bivariatem Diagramm extrahierenIch frage mich, ob es einen anderen Ansatz gibt. Was wäre, wenn Sie den Prediction Profiler und die Funktion „Ziel abgleichen“ mit Ihrer Zielreaktion verwenden würden? Dann können Sie einfach den vorhergesagten Mittelwert und die 95 %-Konfidenzintervallschätzung des Mittelwerts ermitteln.
Vielleicht bin ich von Ihrem ursprünglichen Ziel abgewichen ...
Betreff: Faktorbereich aus bivariatem Diagramm extrahieren@Mark_Bailey Danke, ich habe es versucht, aber die Syntax ist mir unklar.
Dies ist soweit ich weiß, aber jetzt muss ich herausfinden, wie ich ihm die 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. Vielen Dank für Ihre Hilfe!
Betreff: Faktorbereich aus bivariatem Diagramm extrahierenMöglicherweise können Sie die Funktion Minimize() und den Ausdruck für die Konfidenzgrenze verwenden. Weitere Informationen finden Sie in der Hilfe Optimierungsmethoden .
Betreff: Bereich aus Diagramm extrahierenIch kenne keine direkte Methode, aber hier sind ein paar Ideen.Bei manchen wäre das Schreiben von Skripten etwas aufwändig, und ich vermute, dass keines bei kleinen Problemen 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 abrufen und dann eine Spalte mit der entsprechenden Formel erstellen.Verwenden Sie dann den im Profiler integrierten Optimierer, um die einzelnen Probleme zu lösen.
- Speichern Sie relativ wenige Punkte mit der Brute-Force-Methode und passen Sie dann mithilfe des Anpassungsmodells eine neue Kurve an diese an Dann Speichern Sie die Vorhersageformel und lösen Sie sie mit dem Optimierer.
- Passen Sie stattdessen mithilfe des Anpassungsmodells an, wobei Sie in der Lage sein sollten, die Vorhersageformel direkt zu extrahieren, möglicherweise jedoch 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.