Re: Estrarre l'intervallo dal graficoNon conosco un metodo diretto, ma qui ci sono alcune idee.Alcuni richiederebbero un po' di lavoro da scrivere e probabilmente sospetto che nessuno sarebbe molto più veloce per piccoli problemi.
- Salva una formula per ciascuna di queste righe nella tabella dati estraendo i parametri e gli errori standard dalla tabella nel report bivariato e quindi creando una colonna con la formula appropriata.Quindi usa l'ottimizzatore integrato nel profiler per risolverli.
- Salva relativamente pochi punti usando il metodo della forza bruta e poi adatta loro una nuova curva usando il modello di adattamento, e poi salvare la formula di previsione e risolvere con l'ottimizzatore.
- Adatta utilizzando invece il modello di adattamento in cui dovresti essere in grado di estrarre direttamente la formula di previsione, ma forse non il CI.
- Usa il metodo della forza bruta e interpola tra i pochi punti più vicini, lineare tra gli ultimi due o, per questo problema, quadratico tra i tre più vicini.
Estrai l'intervallo di fattori dal grafico bivariatoCome posso estrarre in modo efficiente i punti di incrocio di questa curva e il suo 95% CI con un valore 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 )}
)
)
);Quindi vorrei ottenere i valori del rapporto in cui la curva e il suo 95% CI incrocia +/- 1,96 (quindi 6 valori in totale). Esistono soluzioni migliori della forza bruta a cui riesco a pensare: scaricare le previsioni e la formula del limite di confidenza media in una tabella e aggiungere righe con valori alla tabella per vedere quando supera i limiti?
ScriptingRe: Estrarre l'intervallo di fattori dal grafico bivariatoPotresti essere in grado di utilizzare la funzione Minimize() e l'espressione per il limite di confidenza. Vedi l'aiuto per metodi di ottimizzazione .
Re: Estrarre l'intervallo di fattori dal grafico bivariato@markbailey grazie, ho provato a provarlo ma la sintassi non mi è chiara.
Questo è quanto ho ottenuto, ma ora ho bisogno di capire come alimentarlo con i giusti vincoli di ottimizzazione:
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), {})L'ultima parte non funziona. Grazie per l'aiuto!
Re: Estrarre l'intervallo di fattori dal grafico bivariatoMi chiedo un altro approccio. Cosa succede se si utilizza il Profiler di previsione e una funzione di desiderabilità dell'obiettivo di corrispondenza con la risposta dell'obiettivo? Quindi puoi semplicemente scegliere la media prevista e la stima dell'intervallo di confidenza al 95% della media.
Potrei essermi allontanato dal tuo obiettivo originale...
Re: Estrarre l'intervallo di fattori dal grafico bivariatoIl tuo codice era un po' disordinato. L'ho ripulito e ho finito l'esempio, anche se potrei ancora perseguire l'obiettivo sbagliato.
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: Estrarre l'intervallo di fattori dal grafico bivariatoSì, il problema con quello è che di solito ci sono più incroci con il valore target (uno a sinistra e uno a destra) e con il massimizzatore di desiderabilità ottieni casualmente uno dei due.
Ho provato le previsioni inverse sotto il modello di adattamento ma questo non supporta i termini quadratici.
Re: Estrarre l'intervallo di fattori dal grafico bivariatoSì, esattamente questo funziona per trovare il minimo locale, ma è ancora difficile arrivare al prossimo incrocio con 1,96 da lì. Dovresti comunque percorrere la curva fino a quando i valori non superano 1,96.
Per risolvere temporaneamente questo problema, ho creato una funzione che richiede solo piccoli passaggi ed esce in entrambe le direzioni fino a quando il valore supera i limiti (o il numero massimo di passaggi) ma mi aspettavo che ci fosse una funzione risolutore in JMP che avrebbe implementato un algoritmo migliore (come quello integrato nella piattaforma non lineare). Immagino che per ora ho quello che mi serve, ma sono sempre aperto a modi migliori per farlo.
Re: Estrarre l'intervallo di fattori dal grafico bivariatoPuoi farlo usando l'ottimizzatore integrato nel profiler.Impostare i limiti di risposta in modo che corrispondano all'obiettivo e quindi per trovare i valori superiore e inferiore, utilizzare semplicemente la griglia del fattore di ripristino per definire l'intervallo di valori da cercare, al di sopra o al di sotto del minimo.
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;
Dovresti anche essere in grado di modificare l'espressione che invii alla funzione di minimizzazione semplicemente sottraendo 1,96 e riducendo al minimo il residuo per ottenere lo stesso risultato.Per qualche motivo ottengo valori leggermente diversi anche dopo aver regolato le tolleranze (1.07 in profiler v 1.03 con minimizza).
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 );