Re: Extraer rango del gráficoNo conozco un método directo, pero aquí hay algunas ideas.Algunos serían un poco de trabajo para escribir el script y probablemente sospecho que ninguno sería mucho más rápido para problemas pequeños.
- Guarde una fórmula para cada una de esas líneas en la tabla de datos extrayendo los parámetros y errores estándar de la tabla en el informe bivariado y luego creando una columna con la fórmula adecuada.Luego use el optimizador integrado en el generador de perfiles para resolver cada uno.
- Guarde relativamente pocos puntos usando el método de fuerza bruta y luego ajuste una nueva curva usando el modelo de ajuste, y luego guarde la fórmula de predicción y resuelva con el optimizador.
- Ajuste usando el modelo de ajuste en su lugar, donde debería poder extraer la fórmula de predicción directamente, pero tal vez no el IC.
- Use el método de fuerza bruta e interpole entre los pocos puntos más cercanos, ya sea lineal entre los dos últimos, o para este problema cuadrático entre los tres más cercanos.
Extraer el rango de factores del gráfico bivariado¿Cómo extraigo de manera eficiente los puntos de cruce de esta curva y su IC del 95% con un valor Y arbitrario?

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 )}
)
)
);Así que me gustaría obtener los valores de Relación donde la curva y su IC del 95% cruzan +/- 1,96 (es decir, 6 valores en total). ¿Hay alguna solución mejor que la fuerza bruta en la que puedo pensar: volcar las predicciones y la fórmula del límite de confianza medio en una tabla y agregar filas con valores a la tabla para ver cuándo cruza los límites?
ScriptingRe: Extraer el rango de factores del gráfico bivariadoEs posible que pueda utilizar la función Minimize () y la expresión para el límite de confianza. Consulte la ayuda para métodos de optimización .
Re: Extraer el rango de factores del gráfico bivariado@markbailey gracias, intenté darle una oportunidad pero la sintaxis no es clara para mí.
Esto es todo lo que llegué, pero ahora necesito descubrir cómo alimentarlo con las restricciones de optimización correctas:
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 última parte no funciona. ¡Gracias por tu ayuda!
Re: Extraer el rango de factores del gráfico bivariadoMe pregunto sobre otro enfoque. ¿Qué sucede si utiliza Prediction Profiler y una función de conveniencia de coincidencia con el objetivo con su respuesta objetivo? Luego, puede seleccionar la media predicha y la estimación del intervalo de confianza del 95% de la media.
Podría haberme desviado de tu objetivo original ...
Re: Extraer el rango de factores del gráfico bivariadoTu código estaba un poco desordenado. Lo limpié y terminé el ejemplo, aunque es posible que todavía esté persiguiendo el objetivo equivocado.
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: Extraer el rango de factores del gráfico bivariadoSí, el problema con ese es que generalmente hay múltiples cruces con el valor objetivo (uno a la izquierda y otro a la derecha) y con el maximizador de deseabilidad obtienes aleatoriamente uno de los dos.
Probé predicciones inversas en el modelo de ajuste, pero eso no admite términos cuadráticos.
Re: Extraer el rango de factores del gráfico bivariadoSí, exactamente esto funciona para encontrar el mínimo local, pero aún es difícil llegar al siguiente cruce con 1,96 desde allí. Aún necesitaría caminar por la curva hasta que los valores excedan 1.96.
Para resolver temporalmente esto, construí una función para ella que solo toma pequeños pasos y sale en ambas direcciones hasta que el valor excede los límites (o el número máximo de pasos) pero esperaba que hubiera una función de resolución en JMP que implementaría un mejor algoritmo (como el que está integrado en la plataforma no lineal). Supongo que por ahora tengo lo que necesito, pero siempre estoy abierto a formas más agradables de hacerlo.
Re: Extraer el rango del factor de un gráfico bivariadoPuede hacer esto usando el optimizador integrado en el generador de perfiles.Establezca los límites de respuesta para que coincidan con el objetivo y luego para encontrar los valores superior e inferior, simplemente use la cuadrícula de factor de restablecimiento para definir el rango de valores para buscar, ya sea por encima o por debajo del mínimo.
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;
También debería poder modificar la expresión que envía a la función de minimizar simplemente restando 1.96 y minimizando el residuo para obtener el mismo resultado.Por alguna razón, obtengo valores ligeramente diferentes incluso después de ajustar las tolerancias (1.07 en Profiler v 1.03 con minimizar).
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 );